# 引言
机器学习和数据处理领域中,向量化数据的存储与检索是许多应用的核心组件。在这篇文章中,我们将深入探索如何使用Scikit-learn中的`SKLearnVectorStore`,该工具不仅能实现高效的向量检索,还支持将向量存储持久化为JSON、BSON或Parquet格式。本文旨在帮助你理解和掌握这项技术,从而在实际项目中得心应手地应用。
# 主要内容
## 1. 安装必要的组件
首先,需要安装`scikit-learn`以及`langchain-community`库。如果你计划使用BSON或Parquet格式进行持久化,也需安装相关库。
```bash
%pip install --upgrade --quiet scikit-learn
%pip install -qU langchain-community
%pip install --upgrade --quiet bson # 如果使用BSON持久化
%pip install --upgrade --quiet pandas pyarrow # 如果使用Parquet持久化
2. 配置和加载文档
我们将使用OpenAI的嵌入服务来计算文档嵌入。在进行相关操作时,确保拥有有效的OpenAI API密钥。
import os
from getpass import getpass
os.environ["OPENAI_API_KEY"] = getpass("Enter your OpenAI key:")
接下来,加载示例文档并进行预处理。
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import SKLearnVectorStore
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
3. 创建并查询向量存储
使用SKLearnVectorStore创建向量存储,并进行简单的相似度查询。
import tempfile
persist_path = os.path.join(tempfile.gettempdir(), "union.parquet")
# 使用API代理服务提高访问稳定性
vector_store = SKLearnVectorStore.from_documents(
documents=docs,
embedding=embeddings,
persist_path=persist_path,
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"
)
print("A new instance of vector store was loaded from", persist_path)
docs = vector_store2.similarity_search(query)
print(docs[0].page_content)
常见问题和解决方案
- 访问限制问题:
- 由于网络限制,尤其在某些地区,API调用可能需要使用代理服务以提高稳定性。
- 数据持久化格式选择:
- BSON适合嵌入式数据库应用,而Parquet更适合大规模数据处理和分析。
总结和进一步学习资源
本文演示了如何使用SKLearnVectorStore进行高效的向量存储和检索。想要深入学习,可以参考以下资源:
参考资料
- Scikit-learn库文档
- OpenAI API官方指南
- LangChain社区支持文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---