文档融合与重排对混合搜索召回的结果集进行合并与优化,以筛选出具有最高综合评分的文档。首先,引入基于熵权法的策略,采用相对分数融合机制,调整召回结果的评分,实现两种评分体系的有效整合。然后从融合后的文档集中选择评分最高的TopK文档,基于原始问题进行进一步的精排,得到最终输出的TopN文档。本方案采用文档融合与重排模型分为两个主要阶段。第一阶段是文档融合,采用相对分数融合的策略。流程的第二阶段旨在对文档融合后的结果集进行进一步的重排。
1.文档融合
文档融合算法接收向量搜索和关键词搜索产生的结果集作为输入,即分别召回的排名前K位的记录。其中每个结果以JSON的格式返回,包含三个字段,即文档分块的唯一ID、文档内容及相应分数。为了有效处理这些结果,构建哈希表存储评分信息,其中键对应于文档的唯一ID。算法分别遍历向量搜索结果和关键词搜索结果,将分数记录到哈希表中〖score〗_sem以及〖score〗_lex字段中,通过熵权法计算两种评分的权重比例,进而得出文档的最终得分,并选择综合得分最高的前N个文档作为输出。
最终的分的策略首先对向量搜索和关键词搜索的得分进行归一化处理,得分计算方法如下式所示,然后通过加权融合标准化得分以计算出综合得分,旨在更精确地量化文档的相关性。
score=□((score-S_min)/(S_max-S_min )) S∈{Sem,Lex)
其中,score代表指定文档的原始得分,S_max和 S_min分别代表在当前检索策略下召回的文档集合中最高得分和最低得分。对于Sem和Lex检索结果集,本方法分别对其得分进行标准化,从而获得归一化得分列表〖score〗_sem与〖score〗_lex。为了在最终结果中灵活调整两种得分的相对重要性,本课题采用熵权法引入权重参数a,如下式所示,以协调两种搜索策略的综合贡献。
〖score〗_a= a×〖score〗_sem+(1-a)×〖score〗_lex
其中,〖score〗_a表示R流程第一阶段的最终得分,参数a默认取值为0.5,表示两种算法对最终结果产生相等的贡献。文档融合示意如下图所示。
文档融合示意图
2.文档重排
文档重排利用交叉编码器计算用户问题与给定候选文档之间的相关性分数,并结合文档融合得分,从而对文档列表进行重新排序,算法考虑问题与文档之间的语义匹配度,改进语义排序的结果。
本方案选用离线交叉编码器(Rerank)模型来执行此任务。交叉编码器同时处理两个文档输入,产生一个包含两者特征及其相互关系的综合嵌入向量,具体表达如下式所示。该模型通过在编码阶段考虑句子文档之间的依赖性,从而为后续的分类提供了一种更细致的评分机制。
〖score〗_β=Encoder(concat(query,context))
其中,query和context通过[CLS]连接后通过类BERT模型进行打分,得到重排阶段的分数〖score〗_β。
在流程中,两个独立的阶段分别产生两组得分,即〖score〗_a和〖score〗_β,为了有效融合这两阶段的评估结果,课题引入了权重因子γ,该因子每个阶段的得分赋予相对重要性权重,综合得分的计算如下式所示。
〖score〗_final=γ×〖score〗_β+(1-γ)×〖score〗_a
流程的设计特点决定了其第二阶段能够作为一个模块化组件,独立地集成到现有系统中,根据特定应用的需求进行定制化微调。在实际应用过程中,为了捕捉数据特性并优化排序效果,关键参数γ需要调整。通过对离线交叉编码器模型的微调及参数调优,DFAR流程得以有效识别文档和关键词的细微差异,进而计算出最优的综合得分,完成文档融合与重排任务。文档重排具体步骤如下图所示。
文档重排示意图