引言
在现代机器学习应用中,文本向量化是不可或缺的一部分。Scikit-learn作为一个强大的机器学习库,提供了多种算法,其中包括k近邻算法。在本篇文章中,我们将探讨如何使用LangChain提供的SKLearnVectorStore来实现文本向量存储,并在此过程中讨论存储的持久化和查询功能。
主要内容
1. 安装必要的库
在开始之前,我们需要安装一些必要的Python库。这些库包括scikit-learn、langchain-community以及根据需求可能需要的bson和pandas、pyarrow。
# 安装基础库
pip install --upgrade --quiet scikit-learn langchain-community
# 如果使用bson序列化
pip install --upgrade --quiet bson
# 如果使用parquet序列化
pip install --upgrade --quiet pandas pyarrow
此外,如果你计划使用OpenAI的嵌入技术,需要获得一个API密钥。你可以访问OpenAI平台获取密钥。
2. 加载文档和创建向量存储
加载一组文档并将其进行文本拆分,然后利用OpenAI的文本嵌入功能将其转换为向量。
import os
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import SKLearnVectorStore
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# 设置OpenAI API Key
os.environ["OPENAI_API_KEY"] = "your_openai_api_key_here" # 使用API代理服务提高访问稳定性
# 加载文档
loader = TextLoader("path_to_your_document.txt")
documents = loader.load()
# 拆分文档
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# 嵌入向量
embeddings = OpenAIEmbeddings()
3. 存储和查询向量
创建向量存储,并执行简单查询以寻找与查询文本最相似的文档。
import tempfile
# 创建存储路径
persist_path = os.path.join(tempfile.gettempdir(), "union.parquet")
# 创建SKLearnVectorStore
vector_store = SKLearnVectorStore.from_documents(
documents=docs,
embedding=embeddings,
persist_path=persist_path, # persist_path和serializer是可选的
serializer="parquet",
)
# 查询向量存储
query = "What did the president say about Ketanji Brown Jackson"
docs = vector_store.similarity_search(query)
print(docs[0].page_content)
4. 存储持久化和加载
可以将向量存储的内容持久化到磁盘,并重新加载。
# 持久化向量存储
vector_store.persist()
print("Vector store was persisted to", persist_path)
# 重新加载向量存储
vector_store2 = SKLearnVectorStore(
embedding=embeddings, persist_path=persist_path, serializer="parquet"
)
docs = vector_store2.similarity_search(query)
print(docs[0].page_content)
常见问题和解决方案
1. 网络访问问题
由于某些地区的网络限制,访问API时可能需要使用API代理服务来提高稳定性。
2. 持久化格式选择
对于不同的数据持久化需求,可以选择json、bson或parquet格式。bson适合需要二进制格式的场景,而parquet更适合大规模数据存储。
总结和进一步学习资源
通过本文的教程,我们能够使用LangChain结合Scikit-learn来实现高效的文本向量存储和查询。进一步学习可以参考以下资源:
参考资料
- OpenAI API文档
- Scikit-learn官方文档
- LangChain社区说明文档
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---