掘金 人工智能 07月28日 15:23
RAG 每日一技(七):只靠检索还不够?用Re-ranking给你的结果精修一下
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

在构建RAG(Retrieval-Augmented Generation)系统时,仅依赖向量数据库的初步召回可能不足以确保信息的精准度。本文介绍了引入“重排模型”(Re-ranker)作为第二阶段检索的关键作用。重排模型通过Cross-Encoder结构,能更深入地理解查询与文档间的细微语义差异,从而对初步召回的候选集进行更精确的排序。实践表明,这一两阶段检索(粗排+精排)架构能显著提升传递给大语言模型的上下文质量,最终优化生成答案的准确性和相关性。文章以实际代码演示了bge-reranker模型如何有效区分并排序不同相关度的文档,为RAG系统的优化提供了实用的解决方案。

💡 **RAG检索的两阶段架构:** RAG系统的检索过程可以分为两个阶段:第一阶段是“召回/粗排”,目标是速度快、范围广,使用向量数据库快速筛选出大量可能相关的文档;第二阶段是“精排”,目标是精度高、排序准,利用重排模型对粗排结果进行更细致的分析和排序,以获得最相关的文档。

🚀 **重排模型(Re-ranker)的角色与原理:** 重排模型充当检索流程中的“复试官”,它通常采用Cross-Encoder结构,与用于Embedding的Bi-Encoder不同,Cross-Encoder将查询和文档拼接后输入,能够捕捉两者之间深层的交互信息,从而进行更精准的相关性判断。这使得它能够识别出即使相似度得分不高但实际更相关的文档。

📊 **实践演示与效果验证:** 通过使用开源的`bge-reranker-base`模型,文章展示了如何处理一个“Mac电脑怎么安装Python?”的查询。结果显示,重排模型能将直接相关的macOS安装指南排在最前面,而将Windows安装指南或泛泛介绍Python的文档排在后面,显著提高了提供给大模型的上下文质量。

📈 **优化RAG系统效果的关键:** 在向量检索的基础上增加一个精排步骤,是提升RAG系统整体性能的重要手段。通过确保最相关的上下文信息被优先传递给大语言模型,可以有效减少生成错误答案的可能性,使LLM能够输出更准确、更符合用户需求的答案。

前情回顾

到昨天为止,我们已经建立了一套相当完善的自动化检索流水线:从文档分块、向量化,再到使用向量数据库进行持久化存储和高效查询。我们的RAG系统现在已经可以针对用户问题,快速地从知识库中召回一批相关的文档片段了。

但我们不禁要问:这样就足够了吗?

从向量数据库里按相似度取出的Top 5结果,就真的是最好的5个吗?它们的顺序就是最佳顺序吗?

现实往往是:最相似 ≠ 最相关

向量检索(我们称之为“召回”或“粗排”)非常快,能迅速从海量数据中筛选出候选集。但它对语义的理解有时是“粗线条”的。比如,用户问“如何在Mac上安装Python?”,它可能会召回:

    一篇讲“如何在Windows上安装Python”的详细文章(因为“安装Python”相似度很高)。一篇讲“Mac常用软件推荐”的文章(因为提到了“Mac”)。一篇真正讲“在Mac上安装Python步骤”的文章,但可能因为措辞原因,相似度排在了第三。

如果我们直接把前两个结果喂给大模型,大概率会得到一个错误的答案。我们需要一个“复试官”,对召回的结果进行二次筛选和排序,把真正相关的结果(比如上面的第3个)提到最前面。

这个“复试官”,就是Re-ranker(重排模型)

两阶段检索:粗排(Recall) + 精排(Re-rank)

引入Re-ranker后,我们的检索流程就从一步变成了两步,这是一种在工业界非常成熟的搜索架构:

    第一阶段:召回/粗排 (Recall)

      目标:速度快,范围广(求全)。工具:向量数据库(如ChromaDB)。过程:从海量文档中,快速召回一个候选集(比如Top 20个可能相关的文档)。

    第二阶段:精排 (Re-rank)

      目标:精度高,排序准(求准)。工具:一个更复杂、更精确的重排模型。过程:对第一阶段召回的Top 20个文档,进行更细致的分析和计算,给出一个更精准的相关性分数,并按此分数重新排序。

这个过程就像招聘:HR助理(粗排)先从几千份简历里快速筛选出20份包含“关键词”的,然后招聘经理(精排)再仔细阅读这20份简历,挑出最匹配岗位的那几个人。

Re-ranker如何工作:Cross-Encoder简介

为什么Re-ranker更准?因为它通常使用一种叫做**Cross-Encoder(交叉编码器)**的模型结构。

缺点就是计算量大、速度慢。所以它不适合用于海量文档的初筛,但极其适合对小范围的候选集进行“精加工”。

上手实战:用 bge-reranker 精修结果

我们将使用 bge-reranker-base 这个目前非常流行的开源重排模型来演示。

首先,确保库已安装:

pip install sentence-transformers

现在,我们来模拟一个场景。假设我们已经从向量数据库中召回了以下3个文档。

from sentence_transformers import CrossEncoder# 加载一个预训练好的Cross-Encoder模型reranker_model = CrossEncoder('bge-reranker-base')# 模拟一个用户查询query = "Mac电脑怎么安装Python?"# 模拟从向量数据库召回的3个文档# 注意它们的初始顺序documents = [    "在Windows上安装Python的步骤非常简单,首先访问Python官网...", # 最不相关    "Python是一种强大的编程语言,适用于数据科学、Web开发和自动化。", # 有点相关,但不是教程    "要在macOS上安装Python,推荐使用Homebrew。首先打开终端,输入命令 'brew install python' 即可。" # 最相关]# Re-ranker需要的是[查询, 文档]对的列表sentence_pairs = [[query, doc] for doc in documents]# 使用predict方法计算相关性分数# (注意:它不是0-1之间的相似度,而是一个可以排序的任意分数值)scores = reranker_model.predict(sentence_pairs)print("原始文档顺序:", documents)print("Re-ranker打分:", scores)print("-" * 20)# 将分数和文档打包并排序scored_documents = sorted(zip(scores, documents), reverse=True)print("精排后的文档顺序:")for score, doc in scored_documents:    print(f"分数: {score:.4f}\t文档: {doc}")

输出结果:

原始文档顺序: ['在Windows上安装Python的步骤非常简单,首先访问Python官网...', 'Python是一种强大的编程语言,适用于数据科学、Web开发和自动化。', "要在macOS上安装Python,推荐使用Homebrew。首先打开终端,输入命令 'brew install python' 即可。"]Re-ranker打分: [-4.6853375  -1.370929   7.9545364]--------------------精排后的文档顺序:分数: 7.9545      文档: 要在macOS上安装Python,推荐使用Homebrew。首先打开终端,输入命令 'brew install python' 即可。分数: -1.3709     文档: Python是一种强大的编程语言,适用于数据科学、Web开发和自动化。分数: -4.6853     文档: 在Windows上安装Python的步骤非常简单,首先访问Python官网...

结果一目了然!Re-ranker给出了一个非常明确的排序。最相关(直接回答了macOS安装问题)的文档获得了极高的正分(7.95),而那个讲Windows的文档则获得了很低的负分(-4.68)

经过精排后,我们就可以胸有成竹地将排序第一的文档,作为最高质量的上下文,交给大模型去生成最终答案了。

总结与预告

今日小结:

    RAG的检索可以分为**粗排(Recall)精排(Re-rank)**两个阶段,以平衡速度和精度。Re-ranker(重排模型)通常使用Cross-Encoder结构,能更精准地判断查询和文档的相关性。在召回的候选集上增加一个精排步骤,可以显著提升送入大模型上下文的质量,从而改善最终生成答案的效果。

恭喜!到今天为止,我们已经把RAG系统中“R”(Retrieval)部分,从文本分块到向量检索再到重排序,完整地走了一遍。我们现在手上已经有了一套能够稳定产出高质量上下文信息的强大管道。

原材料已经精挑细选,接下来,就该轮到“G”(Generation)——我们的主角**大语言模型(LLM)**登场了。

有了高质量的上下文,我们该如何组织语言,向LLM提问,才能让它做出最精彩的回答呢?是简单地把上下文和问题丢给它吗?

明天预告:RAG 每日一技(八):连接大脑!为RAG定制强大的Prompt

明天,我们将正式打通RAG的最后一公里,学习如何设计和构造一个强大的提示词(Prompt),将我们辛苦检索到的上下文“喂”给大模型,并引导它生成我们想要的、忠实于原文且格式优美的答案!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

RAG 重排模型 Cross-Encoder 信息检索 LLM
相关文章