跳至主要内容

什么是 Faiss(Facebook AI 相似性搜索)?

Faiss 是一个开源库,专为高效的相似性搜索和稠密向量聚类而设计,可用于推荐系统、图片搜索等应用。
Ryan Ong
Ryan Ong

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

传统搜索引擎擅长查找精确匹配,但在基于图像、视频或文本等内容来识别相似项时常常力不从心。这一局限会阻碍推荐系统、图片搜索与异常检测等应用的开发。

为了解决这一问题,Meta AI(原 Facebook AI)开发了 Facebook AI Similarity Search(Faiss)。

Faiss 是一个专门为高效处理相似性搜索而设计的库,在处理大型多媒体数据集时尤为实用。

本文将解释什么是 Faiss,并引导您如何将其用于搜索类应用。

什么是 Faiss?

Faiss(Facebook AI Similarity Search 的缩写)是一个为稠密向量的相似性搜索与聚类而构建的开源库。Faiss 可用于构建索引并以出色的速度和内存效率执行搜索。此外,它还通过针对多种索引方法的 GPU 实现来提升搜索性能。

核心功能

Faiss 通过使用 k-means 聚类与产品量化等复杂算法对向量建立索引,从而加速近邻搜索。这些方法帮助 Faiss 高效组织与检索向量,确保相似性搜索既快又准。以下是索引算法的简要介绍:

  1. K-means 聚类:该算法将数据划分为多个簇,查询时聚焦于最相关的簇,从而缩小搜索空间。
  2. 产品量化(PQ):将向量压缩为更短的编码,显著降低内存占用,并在精度损失不大的情况下加速搜索。
  3. 优化产品量化(OPQ):PQ 的改进版本,通过对数据进行旋转以更好适配量化网格,从而提升压缩向量的精度。

灵活性

在度量向量相似性方面,Faiss 十分灵活,提供多种距离度量可选。主要包括:

  • 欧氏距离:衡量两点之间的直线距离,适用于关注向量几何相似性的场景。
  • 余弦相似度:考察两个向量夹角的余弦,更关注方向而非长度。对文本分析尤为有用,因为方向往往比幅度更重要。

这些选项让您可以选择最符合数据与应用需求的度量方式。

Faiss 可在 CPU 和 GPU 上运行,利用现代硬件加速搜索过程。它适配多种计算平台,从个人电脑到高性能计算集群。Faiss 可在 CPU 与 GPU 索引之间平滑切换,其 Python 接口与 C++ 索引良好配合,便于从测试过渡到部署。多平台支持确保 Faiss 能在不同环境中高效使用,优化性能与资源利用。

Faiss 的关键特性

Faiss 是出众的相似性搜索工具,具备一系列面向大型且多样化数据集的功能。以下将更近一步介绍其在数据密集型任务中大显身手的核心能力。

可扩展性

Faiss 能处理从数百万到数十亿级别的向量数据集,非常适合大型推荐系统或海量图像、视频库等应用。其采用倒排文件系统与分层可导航小世界(HNSW)图等先进技术,即使在超大数据集下也能保持高效。

速度

借助优化的算法与数据结构,Faiss 十分迅速。其使用 k-means 聚类、产品量化以及优化的穷举搜索来提速。在 GPU 上,Faiss 在新版 Pascal 级别硬件上的性能可比 CPU 版本快至多 20 倍。这一速度对需要快速响应的实时应用至关重要。

准确性

Faiss 在准确性上提供灵活性,可根据需求在速度与精度之间权衡。您可以将其微调为高精度搜索,或选择更快但略低精度的结果。它提供多种索引方法与参数可选,并可用如 1-recall@1 与 10-intersection 等指标来评估相对穷举法的性能表现。

通用性

Faiss 能通过将不同类型的数据转换为向量表示来处理多样数据。这意味着您可以将其用于图像、文本、音频等,使其在各个领域和行业均具实用价值。它支持多种距离度量,包括欧氏距离、余弦相似度和内积距离,从而按需定制搜索过程。Faiss 可适配诸如图像相似性搜索、文本文档检索与音频指纹等多种应用。

Faiss 的应用场景

Faiss 兼具通用性与高效率,适用于不同行业的多种应用。下面一起看看 Faiss 大显身手的主要场景。

推荐系统

对于推荐系统,Faiss 可谓改变游戏规则。它能在海量数据集中快速找到相似项,如商品、电影或文章。

设想一家电商平台使用 Faiss 分析用户行为与商品交互。平台为这些交互生成高维向量,并通过近邻搜索,Faiss 能识别与用户浏览或购买过的商品相似的其他产品。此类个性化方式可提高用户参与度与满意度,从而促进销售与用户留存。

图像与视频搜索

Faiss 还可为搜索引擎提供支持,通过索引多媒体内容中的高维向量来检索视觉上相似的图像或视频。比如,一款照片管理应用借助 Faiss 帮助用户在相册中找出某一特定地标的所有图片。应用将图像转换为向量并用 Faiss 建索引,便能快速执行相似性搜索。对于视频平台同样适用,Faiss 可基于视觉与音频特征对视频片段进行索引与相似检索,提升内容发现与推荐功能。

异常检测

在异常检测中,Faiss 擅长通过查找与其最近邻显著偏离的点来识别数据集中的离群值或异常。

以欺诈检测为例:可将金融交易转换为包含交易金额、地点与时间等属性的向量。Faiss 通过相似性搜索标记离群交易,从而指示潜在欺诈。

在网络安全中,Faiss 可检测异常的网络流量模式,提示可能的网络攻击。

在质量控制中,它可通过将产品特征与正常产品进行比较来识别次品。

信息检索

Faiss 也是出色的信息检索工具,能基于语义相似度查找相关文档或段落。这对于搜索引擎、数字图书馆或任何需要快速准确文本检索的系统都极为重要。

例如,搜索引擎可以使用 word2vec 或 BERT 向量嵌入将文档与查询转换为高维向量。通过用 Faiss 对这些向量建立索引,搜索引擎即可快速执行相似性搜索,检索与用户查询在“含义”上匹配的文档,而非仅靠关键词匹配。这能使结果更相关,提升用户体验与信息检索效率。

Faiss 入门

本节将展示如何设置 Faiss,并将其与 LangChain 和 OpenAI 向量嵌入搭配使用。

安装

您可以使用 pip 安装 Faiss 的 CPU 或 GPU 版本:

# For CPU
pip install faiss-cpu

# For GPU
pip install faiss-gpu

此外,若要将 Faiss 与 LangChain 和 OpenAI 向量嵌入一起使用,您还需要安装以下软件包:

pip install -U langchain-community langchain-openai tiktoken

基础用法

下面的简单示例展示了如何使用 Faiss、LangChain 与 OpenAI 向量嵌入来建立向量索引并执行最近邻搜索:

from langchain.document_loaders import WikipediaLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

# Load content from Wikipedia using WikipediaLoader
loader = WikipediaLoader("Machine_learning")
document = loader.load()

# Chunking
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# Loading embeddings model
embeddings = OpenAIEmbeddings()

# Convert documents to vectors and index vectors
db = FAISS.from_documents(docs, embeddings)
print(db.index.ntotal)

# Search query
query = "What is machine learning?"
docs = db.similarity_search(query)
print(docs[0].page_content)

如需查看更多示例并熟悉 Faiss,请查阅官方文档和这些教程。

结论

Faiss 作为高效的相似性搜索工具脱颖而出,兼具可扩展性、速度、准确性与通用性。它能处理大型数据集并执行快速而准确的相似性搜索,对推荐系统、异常检测与信息检索等多种应用都极具价值。

借助 Faiss,我们可以构建更智能、更直观的系统,提升用户体验并改进运营效率。

如需进一步学习与资源,您可探索以下相关文章:

Ryan Ong

作者

Ryan Ong

Ryan 是一名首席数据科学家,专注于使用大型语言模型构建 AI 应用。他是伦敦帝国理工学院自然语言处理与知识图谱方向的博士候选人,并在该校获得了计算机科学硕士学位。除数据科学之外,他还撰写每周的 Substack 时事通讯 The Limitless Playbook,分享来自全球顶尖思想家的一个可操作理念,并不时撰写关于核心 AI 概念的文章。

主题