提升 RAG 准确率最常用的手段-重排序

第一阶段: 先用 Naive RAG 进行粗召回。

Naive RAG 在这里召回的不是一整本操作手册,也不是随意的一段话,而是知识库(Knowledge Base) 中具体的条目。Naive RAG 的任务是从成百上千条故障日志中,快速筛选出一批“大概率相关”的文档。为了进行筛选,例如,系统通常会先召回相关度最高的 前 20 个文档(Top-20) 作为候选 。这个列表是基于向量相似度排序的,但可能包含一些不够精准的噪音数据,所以被称为“粗”召回。

粗召回的技术原理:双流编码器 (Two-stream Encoder)

为了得到这个列表,Naive RAG 使用了 双流编码器架构

  1. Query 编码: 将用户的查询(例如:“TCU2 通信故障,转换器2被隔离,可能是什么故障?”)转化成一个向量。

  2. Document 编码: 将上述清洗过的故障日志(现象+部位+类型)也转化成向量。

  3. 匹配计算: 计算查询向量与文档向量之间的相似度(通常是余弦相似度)。

  4. 输出: 输出相似度分数最高的那些文档(即 Top-K 列表)。

第二阶段: 引入一个重排序模型对检索回来的文档进行精细化的二次排序。

Rerank(重排序) 方法随后会接过这个列表,用更精细的模型对这 20 条记录进行二次打分和排序,把真正最相关的几条排到最前面,丢弃不相关的。

Naive RAG (粗召回):Bi-Encoder 架构

在第一阶段(粗召回),系统为了快,使用的是 Bi-Encoder

  • 机制: Query 和 Document 是独立进入模型的。模型分别算出 Query 向量和 Document 向量。

  • 计算: 最后只计算两个向量的余弦相似度。

  • 缺点: 这种方式丢失了 Query 和 Document 之间词与词的精细交互信息。模型在处理 Document 时还没见到 Query,所以只能提取一个泛泛的特征向量。

Ranking Model (精细重排):Cross-Encoder 架构

在第二阶段(重排序),数据量变少了(比如只剩 20 条),系统就可以使用更昂贵但更精准的 Cross-Encoder

  • 机制: 它将 Query 和 Document 拼接在一起(通常用 [SEP] 分隔),作为一个整体输入到 BERT 等模型中。

  • 深度交互: 在模型内部(Transformer 层),Query 中的每一个词都能注意到 Document 中的每一个词(Full Self-Attention)。

  • 输出: 模型不输出向量,而是直接通过一个线性层(Linear Layer)输出一个 0 到 1 之间的相关性分数(Score)

按照什么“标准”排序?

  • 精细化排序的标准不再是简单的“向量空间距离”,而是**“深层语义匹配度”**。

    具体到这篇论文的故障诊断场景,重排序模型会依据以下更深层的逻辑进行打分:

  • 精确匹配 (Exact Term Matching):

    • 粗召回标准: 只要 Query 和 Document 都包含“故障”、“TCU”等词,向量距离就很近。

    • 精细化标准: 重排序模型会看具体的修饰关系。例如,Query 问的是“TCU2 通信故障”,粗召回可能会拉回“TCU1 电源故障”(因为词重叠度高),但重排序模型通过全文注意力机制,能识别出“TCU2”和“TCU1”的不匹配,从而给“TCU1”的文档打低分。

  • 逻辑关系 (Logical Consistency):

    • 标准: 文档内容是否真的回答了问题?

    • 如果 Query 是“导致转换器隔离的原因是什么?”,粗召回可能拉回包含“转换器隔离”这个词的所有文档(包括描述现象的、描述结果的)。

    • 重排序模型经过训练(通常是在 MS MARCO 等数据集上微调过),能更好地区分“原因”和“现象”的语境差异,将真正解释“原因”的文档排在前面。

实验中的具体流程

  1. 输入(Input):

    • Query:用户的问题。

    • Candidate List:Naive RAG 粗召回的 Top-20 个文档 3。

  2. 重排序(Reranking Process):

    • 模型将 Query 与这 20 个文档逐一配对:(Query, Doc 1), (Query, Doc 2) ... (Query, Doc 20)。

    • 将这 20 对文本送入 Ranking Model 进行深度推理。

    • 模型输出 20 个新的相关性得分。

  3. 截断(Truncation/Output):

    • 按照新得分从高到低排序。

    • 取前 8 个(对应 $k_{hr}=8$)或前 10 个(对应 $k_{hr}=10$)作为最终结果,去计算命中率(Hit Rate)4。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值