探索Scikit-learn与SKLearnVectorStore:机器学习与向量存储的强大结合

81 阅读2分钟

探索Scikit-learn与SKLearnVectorStore:机器学习与向量存储的强大结合

在当今数据驱动的时代,机器学习技术已经深刻地改变了数据处理和分析方式。Scikit-learn作为一个广泛使用的开源机器学习库,提供了丰富的算法实现。本文将为您介绍如何结合Scikit-learn与SKLearnVectorStore,用于向量存储和检索,并体验其便捷的序列化能力。

引言

随着大数据的普及和机器学习的日益成熟,如何高效地管理和利用庞大的数据成为一个关键问题。SKLearnVectorStore提供了一种灵活的方式,将文档嵌入向量化后进行存储和查询。通过支持JSON、BSON和Parquet格式的序列化,它为数据持久化提供了多种选择。

安装与基本设置

在开始之前,请确保安装以下工具和库:

%pip install --upgrade --quiet scikit-learn
%pip install --upgrade --quiet langchain-community
%pip install --upgrade --quiet pandas pyarrow  # 如果使用Parquet序列化

另外,如果你需要使用OpenAI嵌入,需要获取一个API密钥,可以通过OpenAI平台获取。

import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass("Enter your OpenAI key:")  # 输入你的OpenAI密钥

主要内容

数据加载与预处理

首先,我们需要加载文档数据并进行分割处理。这一步是为了便于后续的嵌入和存储。

from langchain_community.document_loaders import TextLoader
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)

创建向量存储

接下来,我们将文档向量化并存储在SKLearnVectorStore中。

from langchain_community.vectorstores import SKLearnVectorStore
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()
import tempfile

persist_path = os.path.join(tempfile.gettempdir(), "union.parquet")

vector_store = SKLearnVectorStore.from_documents(
    documents=docs,
    embedding=embeddings,
    persist_path=persist_path,  # 使用API代理服务提高访问稳定性
    serializer="parquet",
)

query = "What did the president say about Ketanji Brown Jackson"
docs = vector_store.similarity_search(query)
print(docs[0].page_content)

保存与加载向量存储

SKLearnVectorStore支持将数据持久化存储,便于后续加载和重用。

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访问问题:在某些地区,访问OpenAI等API可能会遇到网络限制,建议使用API代理服务以提高访问的稳定性。
  • 数据格式不兼容:确保安装所需的库以支持特定的序列化格式,例如BSON或Parquet。

总结和进一步学习资源

通过本文的介绍,我们可以看到Scikit-learn与SKLearnVectorStore结合使用的潜力和灵活性。为了进一步深入学习,您可以参考以下资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---