无需大语言模型的弱检索预测
大多数检索系统对所有查询使用单一管道,这种做法既不合适:单一管道对困难查询服务不足,对简单查询则浪费计算资源。本文提出了无需大语言模型的廉价信号——如分数分散和检索器一致性——来检测弱检索,从而实现仅在需要时进行选择性升级。
大多数检索系统对所有查询运行单一管道,这是错误的默认设置:单次遍历对困难查询服务不足,而对每个查询都进行重排序或重写则在简单查询上浪费计算。更糟糕的是,单次遍历会静默失败。当相关文档从未到达顶部时,系统仍然从其获取的任何内容中给出答案,没有任何迹象表明出了问题。
昂贵的修复方法(如交叉编码器、ColBERT晚交互、查询重写和解构)已广为人知,因此真正的问题是什么时候使用它们:理想情况下,在支付任何费用之前廉价地捕捉到弱检索,并且只升级需要升级的查询。但是,什么能廉价地告诉你检索是弱的?这取决于你的检索如何失败,我们在三个语料库上进行了测量。
弱检索的定义
检测弱检索始于一个可测量的定义。只有前几个结果被使用:提供给模型的前k个块或向用户显示的页面。称之为窗口。好的检索将查询所需的所有证据放入窗口;检索是弱的,即使更深的召回率看起来很好,只要缺少一个证据。
将窗口设置为你系统消耗的任何大小。在标记分割中,你知道每个查询需要哪些文档,弱是一个你可以预测的二元标签。
廉价信号
信号是从结果中计算出的预测弱证据的数字。两个标准:它在标记数据上区分好的检索和弱的检索;并且它足够廉价,可以在每个查询上运行。“廉价”排除了明显的做法:在每个查询上询问LLM“这足够吗?”会增加一个模型调用到你正在保护的路径。这里的信号读取检索器已经返回的内容,或者最多一次额外的Qdrant查询。热路径中没有LLM。
这些信号都不是新的:预测检索是否成功是查询性能预测(QPP),而dense_variance接近其未归一化的查询承诺。贡献不是新的预测器,而是哪些已知的预测器值得其成本,以及适用于哪种语料库。
系列的信号包括:高度(最大分数)、分散度(稠密方差)、覆盖率(证据覆盖率)和一致性(稠密与稀疏或稠密模型间)。直觉是:自信的检索器将其顶部分数分散开;迷失的检索器将它们聚拢。覆盖率检查查询中的实体是否出现在检索到的文本中。一致性是指当两个检索器或两个稠密模型返回不同的文档时,其中一个通常是迷失的,尤其是在术语和词汇表外术语上。
信号的计算方式
分散信号是检索器分数的总体方差。dense_variance读取原始稠密排序,一次额外的Qdrant查询重用你已经嵌入的查询向量,因此没有额外的模型调用。两种一致性信号都是前k集合重叠。retriever_divergence比较稠密和稀疏排序;dense_agreement平均两个或多个独立稠密模型的重叠。无论哪种方式,不一致意味着弱检索。
一致性信号不是免费的:dense_agreement运行额外的稠密模型,每个查询几个嵌入。但仍然比LLM判断便宜得多。
哪些信号触发取决于失败模式
通过AUC(0.5随机,1.0完美)评估每个信号在标记分割上区分好与弱检索的能力。我们在三个不同失败方式的语料库上运行了所有信号:MuSiQue(多跳QA)和BEIR集合中的NFCorpus(医学术语)和SciFact(科学主张)。
没有单一信号在所有三个上都是最好的,哪些信号值得计算取决于语料库的失败方式:
词汇不匹配(NFCorpus):在这个语料库中,术语和词汇表外术语似乎使稠密和稀疏模型以及独立稠密模型在弱查询上不一致。一致性信号从接近随机上升到0.73到0.76,与分散度持平,这是测量它们值得的唯一情况。
排序精度(SciFact):正确文档被检索但排名太低。分散度和高度捕捉到它(0.75到0.76);一致性信号没有贡献。
可达性(MuSiQue):答案需要一个查询无法表达的跳转,因此第一次检索看起来自信即使错误。最佳廉价信号仅达到0.73,一致性信号下降到接近随机:没有廉价信号能可靠地捕捉到缺失的跳转,因此修复方法是解构(到达下一跳的新查询),而不是更好的门控。
三个基准无法产生通用信号,因此可交付的是方法,而不是默认值:在自有数据上测量分离度并保留有效的信号。一个可能泛化的模式是上限:当失败是可达性而非嵌入混淆时,结果看起来健康,没有廉价信号能察觉到。
找到你的信号
获胜的信号不可迁移,但方法可以。在校准分割上,通过分离度评分每个候选信号:使用roc_auc_score,并取max(auc, 1-auc)作为分离度,无论方向如何。两条规则:保留分离度高于阈值(0.65是合理的起点)的信号,并删除任何与更强信号冗余的信号(绝对相关性高于0.85),因为冗余信号增加成本而非信息。在校准分割上设置阈值;保留测试分割用于最终数字。让失败模式首先指引你:一致性信号适用于术语或标识符密集的语料库,分散度和高度适用于精度缺失,然后用数字确认,因为获胜者是语料库特定的。
将信号转化为门控
阈值将信号转化为决策。将所选信号定向为越低表示越弱,对在弱检索上触发高值的信号(如retriever_divergence)取负,因此单个阈值决定:低于它,将检索视为弱并升级:
function retrieval_is_weak(result) { return signal(result) < FLOOR; // signal oriented so lower means weaker }
阈值是一个权衡:提高它以捕捉更多弱检索并升级更多,降低它以减少升级并遗漏更多。一个良好的默认是最大化校准集上的捕捉率减去误报率(Youden点);当遗漏成本高于额外升级时,以召回率为目标,例如90%。如果两个信号分离良好且几乎不相关,则任一触发时门控。
对弱检索采取行动
升级到什么是容易的选择:重排序、重写、解构、放宽过滤器或交给人工。门控不在乎哪个;昂贵的是是否决定,而它在每个查询上免费做出决定。升级不能做的事是发明语料库中不存在的证据:当没有东西可找时,胜利是检测到弱检索并避免从薄弱的证据中回答。可运行的示例将门控连接到完整的自我纠正循环。
将此法应用于你的语料库
这里的胜者不可移植,但配方是:
定义窗口和每个查询所需的证据。 在校准分割上标记弱检索。 基准测试廉价信号;保留分离的,删除冗余的。 将胜出信号阈值化为门控,仅在其触发时升级。
检索质量可以从结果的廉价统计中观察到,但只有当失败是这些统计能看到的类型时。在自有数据上测量哪个信号是那样的。
相关工作
这项工作与纠正性和适应性检索并列。区别在于决策来源:已检索内容的廉价统计,没有额外的模型调用,没有需要训练的内容。查询性能预测有许多检索后预测器;最便宜的预测器能迁移多远以及其上限在哪里是这里的问题。CRAG训练检索评估器,Self-RAG微调生成器以批评自身上下文;两者都将训练好的模型放在本工作使用免费统计的位置。Adaptive-RAG在检索前根据查询复杂度路由,本文反对这种查询形状方法:根据获得的证据进行门控,而不是问题形状。充分上下文工作使用LLM判断而不是免费信号来询问同样的问题。完整的循环、纠正措施和评估框架在自我纠正检索循环工作坊中。对于升级到的构建块,参见晚交互模型、混合搜索和查询解构。