探索USearch:比FAISS更小巧快速的向量搜索引擎
引言
在当今的AI驱动时代,向量搜索引擎成为了许多应用程序的核心组件。从推荐系统到实时搜索,快速准确的向量搜索一直是一项重要任务。FAISS作为一个广泛认可的高性能向量搜索引擎,因其出色的性能和丰富的功能而备受欢迎。然而,USearch以其紧凑的设计和广泛的兼容性,提供了一个更轻量级但同样高效的系统。本文将深入探讨USearch的功能和使用场景,帮助开发者更好地应用这一工具。
主要内容
USearch的独特之处
USearch和FAISS的基础功能相似,都是基于HNSW(Hierarchical Navigable Small World)算法进行近似最近邻搜索。然而,USearch在设计原则上有所不同,重点在于用户自定义度量和较少的依赖。其紧凑的单文件设计使其在保持高性能的同时,具备更好的移植性和兼容性。
安装和初始化
首先,确保安装了usearch
和其他依赖包:
%pip install --upgrade --quiet usearch langchain-community
然后,我们需要获取OpenAI的API Key来利用OpenAI Embeddings:
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
文档加载和向量存储
接下来,我们使用TextLoader
加载文本并利用CharacterTextSplitter
对文本进行拆分:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
loader = TextLoader("../../../extras/modules/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
通过OpenAIEmbeddings
进行文本向量化,并初始化USearch存储:
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import USearch
embeddings = OpenAIEmbeddings()
db = USearch.from_documents(docs, embeddings)
执行查询
我们可以使用USearch执行相似度搜索,查找与查询最相关的文档:
# 使用API代理服务提高访问稳定性
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
print(docs[0].page_content)
带评分的相似度搜索
USearch还支持返回距离分数的相似度搜索:
docs_and_scores = db.similarity_search_with_score(query)
print(docs_and_scores[0])
常见问题和解决方案
-
网络访问问题:由于某些地区的网络限制,使用OpenAI API可能会遇到访问困难,建议使用API代理服务。
-
内存管理:在处理大规模数据集时,内存使用可能成为瓶颈。考虑使用增量加载和分批处理来优化内存消耗。
总结和进一步学习资源
USearch提供了一个高效且灵活的解决方案,适合需要快速实现向量搜索的应用场景。通过其紧凑的设计,开发者可以在更多的平台上轻松部署和集成。
参考资料
- Langchain社区文档
- OpenAI API使用文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—