概述:DenserRetriever 是一个检索器平台,支持关键字搜索、向量搜索和重新排序,它为构建 RAG 应用程序提供了有效的解决方案。我们在 DenserRetriever 中对 Anthropic Contextual Retrieval 数据集进行了基准测试,并重现了令人印象深刻的结果!我们创新地集成了 Elasticsearch + 向量搜索,为大规模工业 RAG 部署提供了支持。 开源模型的准确性与付费模型相当甚至更好,提供了一种高经济效益的解决方案,而不会影响性能。告别高成本,迎接可扩展、高精度的 AI!
检索增强生成 (RAG) 是一种强大的技术,可通过从知识库中检索相关信息并将其附加到用户输入中来增强 AI 模型响应。尽管 RAG 非常有效,但传统的 RAG 实现在编码信息时通常会剥离重要的上下文,这可能导致检索准确度较低,下游任务的性能不佳。
Anthropic 在其博客文章《介绍上下文检索》和《食谱(cookbook)》中提出了一种称为上下文检索的新方法,该方法提高了 RAG 框架内检索过程的准确性。该方法在编码步骤中保留了必要的上下文,确保检索到更多相关信息,从而显著提高下游任务的性能。
在这篇博客中,我们首先在Denser Retriever中重现了 Anthropic 的上下文检索实验。然后,我们用开源(免费)模型替换付费 API,并表明开源模型可以达到与付费模型相同或更好的准确度水平。这对于成本敏感的生产环境至关重要,因为在保持准确性的同时尽量减少开支至关重要。我们的实验目录可以在这里找到。
本次实验中使用的数据集在 Anthropic 的博客文章《介绍上下文检索》中进行了描述,可在其Anthropic Cookbook中找到。该数据集包含 248 个查询和 737 个文档。
为了在 Denser Retriever 实验中使用此数据集,我们首先将原始数据从 Anthropic cookbook 复制到original_data目录。然后我们运行以下命令来准备数据:
python experiments/data/contextual-embeddings/create_data.py
这将生成两个数据集:
● data_base:Anthropic 提供的原始数据集。
● data_context:数据集的增强版本,具有附加上下文信息,如 Anthropic 的博客文章中所述。
每个数据集包含:
● 查询文件(查询.json)
● 文档文件(段落.jsonl)
● 相关性文件(qrels.jsonl)
这些数据集之间的主要区别在于数据上下文版本包含增强文档上下文,由 Anthropic API 提供。我们提供数据上下文因此用户无需调用 Anthropic API 即可运行实验。
Denser Retriever是一个检索平台,它有效地支持关键字搜索、向量搜索和重新排序,以提供最佳结果。我们在MTEB 数据集上的实验表明,通过 xgboost 模型结合关键字搜索、向量搜索和重新排序可以显著改善向量搜索。
我们首先在数据库数据集。这是通过运行以下命令完成的:
python experiments/train_and_test.py anthropic_base test test
这实验/train_and_test.py脚本可以在这里找到。在这个实验中,人类学基础是数据集的名称,两个测试参数指的是训练和测试分割,在这种情况下它们是相同的。
在介绍上下文检索之后,我们使用 Voyagevoyage-2用于向量嵌入和 Cohere 的 API rerank-english-v3.0重新排名的 API。
得到以下结果:
我们的结果(包括关键词搜索、向量搜索和重新排序)与 Anthropic Cookbook 中报告的数字相符。具体来说,向量搜索的 Recall@20 指标与 Cookbook 的结果 90.06 一致。重新排序器对关键词搜索和向量搜索的结果进行重新排序,并进一步将召回率提高到 94.15。关键词+向量+重新排序方法是 Denser Retriever 中提出的一种新方法。它使用轻量级 xgboost 模型来对查询和文档相关性进行评分。关键词+向量+重新排序方法实现了 94.24 的 Recall@20,优于单个组件。值得注意的是,关键词+向量+重新排序对每个查询引入的延迟不到一毫秒,使其适用于实时应用。
接下来,我们通过运行以下命令,使用 Denser Retriever 重现人为上下文检索实验:
python experiments/train_and_test.py anthropic_context test test
结果总结如下:
与原始 Anthropic 实验类似,我们观察到上下文增强显著提高了关键字搜索的性能,Recall@20 从 70.48 提高到 89.26。向量搜索也受益于增强的上下文,召回率从 90.06 提高到 94.48。重排器进一步将召回率提高到 96.10,展示了在关键字和向量搜索之上添加重排器的价值。我们注意到,Denser Retriever 中的关键字+向量+重排器方法并没有比重排器带来提升,这可能是因为 Cohere rerank-english-v3.0 重排器的表现明显优于关键字搜索和向量搜索。
无论是基础实验还是增强上下文实验,Voyage API 模型的成本都是几美分,而 Cohere 重新排序模型 API 的成本约为 1 美元。如果检索语料库变大,成本可能会大幅增加(请记住,我们只有 248 个查询和 737 个文档)。Denser Retriever 可以灵活地用开源模型替换这些付费模型,从而在不牺牲准确性的情况下降低总体成本。
我们现在用开源模型替换付费的 Voyage 和 Cohere 模型,并评估其性能。具体来说,我们选择了BAAI/bge-en-icl嵌入模型和jinaai/jina-reranker-v2-base-multilingualHuggingface MTEB Leaderboard中的 reranker 模型作为付费模型的免费替代品。为此,我们修改了训练和测试.py脚本如下:
embeddings=BGEEmbeddings(model_name="BAAI/bge-en-icl", embedding_size=4096),
reranker=HFReranker(model_name="jinaai/jina-reranker-v2-base-multilingual",
top_k=100, automodel_args={"torch_dtype": "float32"}, trust_remote_code=True),
我们取得以下成果:
在 Recall@20 方面(94.55 vs. 94.48)开源模式bge-en-icl略优于付费 Voyage 模式voyage-2。此外,开源模型jinaai/jina-reranker-v2-base-multilingual优于付费的 Cohere rerank-english-v3.0重新排序模型(96.30 vs 96.10)。最后,Denser Retriever 关键字+向量+重新排序将最终的 Recall@20 提升到 96.50。这表明开源模型可以提供比付费模型更好的准确度水平,提供经济高效的解决方案而不会影响性能。
我们在 Denser Retriever 中重现了人类情境检索实验。我们的实现集成了 Elasticsearch 和向量搜索,这对于大规模、工业级部署 RAG 框架至关重要。我们的实验表明,开源模型可以提供与付费模型相同或更好的准确度,在成本敏感的生产环境中提供了宝贵的灵活性,在这种环境中,保持高精度并最大限度地降低费用至关重要。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。