熵权法融合与交叉编码器重排,是构建高性能RAG检索系统时,用于优化结果排序的两个关键步骤。它们通常在混合检索(召回阶段)之后执行,构成一个从“粗筛”到“精选” 的两阶段排序流水线。
简单来说,混合检索负责快速召回可能相关的文档(大候选池),而这两步则负责精细排序,把最相关的文档精确地排在前面。
流程概览
整个流程可以看作一个两阶段的排序优化过程:
第一阶段:融合排序:将向量检索和关键词检索的两组分数,通过熵权法等算法合并成一个综合分数,得到一个初步排序。
第二阶段:重排:用交叉编码器对第一阶段的Top-N个结果进行更精细的语义相关性打分,最终输出精准排序。
⚖️ 第一阶段:熵权法融合
熵权法是一种客观的赋权方法。它的核心思想是:数据的离散程度(信息量)越大,其权重就应该越高。
在融合场景下,我们有两个检索器的打分结果,需要决定各占多少比例。熵权法会根据这组查询结果本身的数据分布,来动态、自适应地计算权重,避免了人工调参的主观性。
工作原理:
提取数据:取向量检索和关键词检索召回的前K个文档分数。
归一化:将两组分数都映射到[0,1]区间。
计算指标变异程度:
计算每组分数的信息熵。熵值越小,说明分数越分散(区分度大),包含的信息量就越多。
计算权重:根据信息熵计算权重。熵值越小的检索方式,权重就越高。
简单来说,如果这次查询中,向量检索的分数层次分明,而关键词检索的分数都差不多,那么熵权法会自动给向量检索分配更高的权重,让融合结果更依赖这次表现更好的检索器。
🎯 第二阶段:交叉编码器重排
交叉编码器(Cross-Encoder) 与向量检索所用的双编码器(Bi-Encoder)不同。它不再将问题和文档分开编码,而是将“问题+文档”作为一个整体输入,让模型在编码的最初阶段就对两者进行充分的交互和比较。
工作原理:
输入拼接:将 [问题] 和 [候选文档] 拼接成一个长文本。
深度交互:送入Transformer编码器,模型内部的自注意力机制会让问题和文档的每一个Token都进行深度交互,从而精确捕获它们之间的相关性。
输出分数:模型最终输出一个0到1之间的相关性分数。
为什么需要它?
对比双编码器(用于向量检索)和交叉编码器,它们的差异非常明显:
双编码器:可以预计算文档向量,检索速度极快。但问题和文档是独立编码的,缺乏交互,精度有限。
交叉编码器:精度极高,是当下排序模型的天花板。但无法预计算,推理耗时,成本高。
特性 双编码器(向量检索) 交叉编码器(重排)
编码方式 问题和文档独立编码 问题和文档联合编码
交互程度 无交互,仅有向量相似度计算 深度交互,注意力机制全面比较
检索速度 极快,可预建索引 较慢,需要实时计算
精度 较高 最高,对细粒度语义敏感
典型应用 召回(第一阶段) 精排(第二阶段)
因此,为了平衡效率和精度,系统会先用双编码器快速召回,再用交叉编码器对少数候选文档进行精准重排。
💡 两者如何协同工作?
在实际系统中,它们按以下顺序协同工作:
召回:用户提问,系统并行进行向量检索和关键词检索,各返回Top-K(如K=100)文档。
融合排序:使用熵权法计算向量分和关键词分的最优权重,计算出第一阶段的综合得分,并排序。
候选集筛选:取融合排序后的Top-N(如N=20) 个文档作为精排候选集。这一步能大幅降低交叉编码器的计算量。
重排:交叉编码器对这个N个文档进行精细打分,按新分数排序。
输出:将重排后的Top-M(如M=5)个最终结果返回给用户。
这种设计既保证了效率和召回率,又通过精排显著提升了最终答案的准确性和可靠性