• 文章
  • 信息检索中的相关性反馈
返回机器学习

信息检索中的相关性反馈

Evgeniya Sukhodolskaya

·

2025年3月27日

Relevance Feedback in Informational Retrieval

问题阐述得好,问题就解决了一半。

这句话既适用于生活,也适用于信息检索。

如果查询制定得好,检索到相关文档就变得轻而易举。然而在现实中,大多数用户难以精确定义他们正在搜索的内容。

尽管用户可能难以 формулировать一个完美的请求——尤其是在不熟悉的领域——但他们可以很容易判断检索到的答案是否相关。

相关性是检索系统强大的反馈机制,可以迭代地根据用户兴趣的方向优化结果。

在2025年,随着社交媒体每天充斥着AI突破的消息,信息检索似乎几乎已经解决,智能体可以迭代调整搜索查询并评估相关性。

当然,这里有个陷阱:这些模型仍然依赖于检索系统(尽管每天都有预测说RAG快死了,但它还没死)。它们只接收由远为简单且便宜的检索器提供的少量排名靠前的结果。因此,引导式检索的成功仍然主要取决于检索系统本身。

因此,我们应该找到一种有效且高效的方法,将相关性反馈直接整合到检索系统中。在本文中,我们将探讨研究文献中提出的方法,并尝试回答以下问题

如果搜索中的相关性反馈被广泛研究并被赞誉为有效,为什么在专用的向量搜索解决方案中实际上没有被使用呢?

剖析相关性反馈

工业界和学术界在这里往往会重复造轮子。因此,我们首先花了一些时间研究和分类不同的方法——以防有什么我们可以直接应用于Qdrant。由此产生的分类法并非一成不变,但我们的目标是使其有用。

Types of Relevance Feedback

相关性反馈的类型

伪相关性反馈 (PRF)

伪相关性反馈从初始检索结果中选取排名靠前的文档,并将它们视为相关文档。这种方法可能看起来简单,但在词汇检索中提供了显著的性能提升,同时计算成本相对较低。

二元相关性反馈

收集反馈最直接的方法是直接询问用户文档是否相关。这种方法有两个主要局限性。

首先,用户出了名的不愿意提供反馈。您知道吗,Google曾经在搜索结果中提供了一个赞/踩机制,但后来删除了,因为几乎没有人使用它?

其次,即使用户愿意提供反馈,初始检索结果中可能不存在相关文档。在这种情况下,用户无法提供有意义的信号。

与其询问用户,我们可以请一个智能模型来提供二元相关性判断,但这会限制其生成细粒度判断的潜力。

重新评分的相关性反馈

我们还可以应用更复杂的方法从排名靠前的文档中提取相关性反馈——机器学习模型可以为每篇文档提供一个相关性分数。

这里明显的担忧有两点:

  1. 自动化判断器能否准确地确定相关性(或不相关性)?
  2. 它的成本效益如何?毕竟,你不能指望GPT-4o为每个用户查询重新排序成千上万的文档——除非你富得流油。

尽管如此,当无法获得明确的二元反馈时,自动重新评分的反馈可能是一种可扩展的改善搜索的方法。

问题已经解决了吗?

深入研究材料后,我们发现第一项相关性反馈研究可以追溯到六十年前,这完全出乎我们的意料。在神经搜索热潮中,很容易忘记词汇(基于术语的)检索已经存在了几十年。很自然,这个领域的研究有足够的时间发展。

神经搜索——也称为向量搜索——大约在5年前开始在行业中受到关注。因此,针对向量的特定相关性反馈技术可能仍处于早期阶段,有待生产级别的验证和行业采用。

作为一家专用的向量搜索引擎,我们希望成为这些采用者。我们的重点是神经搜索,但词汇检索和神经检索中的方法都值得探索,因为跨领域的研究总是富有洞察力,有可能将一个领域的成熟方法应用于另一个领域。

我们发现了一些适用于神经搜索解决方案的有趣方法,此外还揭示了基于神经搜索的相关性反馈方法中的一个空白。请继续关注,我们将分享我们的发现!

解决问题的两种方法

检索就像一个食谱,可以分解为三个主要成分:

  1. 查询
  2. 文档
  3. 它们之间的相似性评分。
Research Field Taxonomy Overview

研究领域分类概述

查询的制定是一个主观过程——它可以用无限种配置完成,这使得文档的相关性在查询 формулируется并提交给系统之前是不可预测的。

因此,根据相关性反馈调整文档(或搜索索引)需要按请求进行动态更改,考虑到现代检索系统存储数十亿文档,这是不切实际的。

因此,在搜索中整合相关性反馈的方法分为两类:优化查询优化查询与文档之间的相似性评分函数

查询优化

基于相关性反馈优化查询有几种方法。总体而言,我们倾向于区分两种方法:将查询修改为文本,以及修改查询的向量表示。

Incorporating Relevance Feedback in Query

在查询中整合相关性反馈

作为文本的查询

基于术语的检索中,改进查询的一种直观方法是使用相关术语扩展它。这类似于发现搜索中的“啊哈,原来这叫做...”阶段。

在本世纪的深度学习时代之前,扩展术语主要使用统计或概率模型来选择。其思想是:

  1. 要么从(伪)相关文档中提取最频繁的术语;
  2. 要么提取最具体的术语(例如,根据IDF);
  3. 要么提取最有可能的术语(根据相关性集合最可能出现在查询中)。

当时知名的方法来自相关性模型家族,其中扩展术语的选择基于它们在伪相关文档中的概率(术语出现的频率)以及给定这些伪相关文档时查询术语的可能性——这些伪相关文档与查询的匹配程度。

其中最著名的方法RM3——将扩展术语的概率与其在查询中的概率进行插值——在最近几年的论文中仍然作为基于术语检索中一个(显著不错的)基线出现,通常是anserini的一部分。

Simplified Query Expansion

简化的查询扩展

随着时代进入现代机器学习时代,多项研究开始声称,这些传统的查询扩展方法效果不如预期。

从基于手工特征的简单分类器开始,这一趋势自然地导致了著名的BERT(来自Transformer的双向编码器表示)的应用。例如,BERT-QE(查询扩展)的作者提出了以下方案:

  1. 从微调的BERT重排序器获取伪相关性反馈(约10篇文档);
  2. 将这些伪相关文档分块(约100个词),并使用同一个重排序器对查询-分块的相关性进行评分;
  3. 用最相关的分块扩展查询;
  4. 使用该重排序器和扩展后的查询对1000篇文档进行重新排序。

在实验中,这种方法显著优于BM25 + RM3基线(+11% NDCG@20)。然而,它所需的计算量是仅使用BERT进行重新排序的11.01倍,而仅使用BERT对1000篇文档进行重新排序就需要大约9秒。

查询术语扩展理论上也适用于神经检索。新的术语可能会使查询向量更接近期望文档的向量。然而,这种方法并不能保证成功。神经搜索完全依赖于嵌入,而这些嵌入是如何生成的——从而查询和文档向量的相似度如何——严重依赖于模型的训练。

如果查询优化是由在同一向量空间中操作的模型完成的,则肯定有效,这通常需要对检索器进行离线训练。目标是扩展查询编码器的输入,使其也包括反馈文档,从而产生调整后的查询嵌入。例子包括ANCE-PRFColBERT-PRF——ANCE和ColBERT的微调扩展。

Generating a new relevance-aware query vector

生成新的相关性感知查询向量

您很可能不熟悉这些模型——它们在工业界缺席——的原因在于它们的训练本身就是一笔高昂的前期成本,即使已经“付费”,这些模型在泛化能力方面仍存在困难,在领域外任务(训练期间未见过的数据集)上表现不佳。此外,在生产环境中,向基于attention的模型输入冗长的内容(查询+文档)不是一个好的做法(attention的计算复杂度与输入长度的平方成正比),时间和成本是关键的决策因素。

或者,可以跳过一步——直接使用向量。

作为向量的查询

与其修改初始查询,更具可扩展性的方法是直接调整查询向量。它易于跨模态应用,适用于词汇检索和神经检索。

尽管向量搜索近年来成为一种趋势,但其核心原理在该领域已经存在了几十年。例如,Rocchio在1965年用于其相关性反馈实验的SMART检索系统就是基于文本的词袋向量表示进行操作的。

Roccio’s Relevance Feedback Method

Rocchio的相关性反馈方法

Rocchio的思想——通过添加相关文档和不相关文档质心之间的差异来更新查询向量——似乎很适合现代基于双编码器的密集检索系统。研究人员似乎也同意:2022年的一项研究表明,Rocchio方法的参数化版本在密集检索中能够持续将Recall@1000提高1-5%,同时将查询处理时间保持在适合生产的范围内——大约170毫秒。

然而,Rocchio方法在密集检索版本中的参数(质心和查询权重)必须针对每个数据集进行调整,理想情况下,还应针对每个请求进行调整。

基于梯度下降的方法

如何高效地即时实现这一点一直是一个悬而未决的问题,直到引入了基于梯度下降的Rocchio方法泛化测试时查询表示优化 (TOUR)。TOUR在多次检索和重新排序迭代中(检索 → 重新排序 → 梯度下降步骤),根据重新排序器的相关性判断来调整查询向量。

An overview of TOUR iteratively optimizing initial query representation based on pseudo relevance feedback.
Figure adapted from Sung et al., 2023, Optimizing Test-Time Query Representations for Dense Retrieval

TOUR基于伪相关性反馈迭代优化初始查询表示的概述。
图例改编自 Sung 等人,2023年,密集检索的测试时查询表示优化

下一代基于梯度的查询优化方法——ReFit——在2024年提出了一种更轻量级、更适合生产的TOUR替代方案,将检索 → 重新排序 → 梯度下降序列限制为仅一次迭代。检索器的查询向量通过匹配(通过Kullback-Leibler散度)检索器和交叉编码器在反馈文档上的相似性分数分布进行更新。ReFit与模型和语言无关,并稳定地将Recall@100指标提高了2-3%。

An overview of ReFit, a gradient-based method for query refinement

ReFit概述,一种基于梯度的查询优化方法

基于梯度下降的方法似乎是一种适合生产的可行选项,可以替代微调检索器(从重排序器中提炼)。事实上,它不需要预先训练,并且与任何重排序模型兼容。

然而,这些方法本身的一些局限性阻碍了它们在行业中的广泛采用。

基于梯度下降的方法像修改模型参数一样修改查询向量的元素;因此,它们需要大量的反馈文档才能收敛到稳定解。

最重要的是,基于梯度下降的方法对超参数的选择很敏感,容易导致查询漂移,即查询可能完全偏离用户的意图。

相似性评分

Incorporating Relevance Feedback in Similarity Scoring

在相似性评分中整合相关性反馈

另一类方法是围绕着将相关性反馈直接整合到相似性评分函数中的想法而构建。在我们希望保留原始查询意图,但仍根据相关性反馈调整相似性分数的情况下,这可能是理想的选择。

词汇检索中,这可以像提高与被判断为相关文档共享更多术语的文档分数一样简单。

神经搜索对应方法是一种基于k近邻的方法,通过将候选文档与所有已知相关示例之间的相似度之和加到查询-文档相似度分数上来进行调整。这项技术带来了显著的改进,在NDCG@20上提升了大约5.6个百分点,但它需要有明确标记(由用户标记)的反馈文档才能有效。

在实验中,基于knn的方法被视为一个重排序器。在所有其他论文中,我们还发现基于相关性反馈调整相似性分数主要围绕着重新排序——即训练或微调重排序器使其具备相关性反馈感知能力。通常,实验会包含交叉编码器,尽管简单的分类器也是一种选择。这些方法通常涉及对初始搜索中检索到的更广泛文档集进行重新评分,并由排名靠前的较小子集中的反馈进行指导。这本身并非相似性匹配函数的调整,而是相似性评分模型的调整。

方法通常分为两类:

  1. 离线训练重排序器,以便在推理时将相关性反馈作为附加输入,如这里所示——同样,基于attention的模型和冗长的输入:这对生产环境是致命的组合。
  2. 在第一阶段检索到的相关性反馈上微调重排序器正如Baumgärtner等人所做的那样,针对每个查询使用2k,k={2, 4, 8}反馈文档微调一个小型交叉编码器的偏差参数。

这里最大的局限性在于,这些基于重排序器的方法无法检索到初始搜索返回结果之外的相关文档,并且在生产环境中使用重排序器处理成千上万的文档是不可行的——成本太高。理想情况下,为了避免这种情况,应该在第二次检索迭代中直接使用已根据相关性反馈更新的相似性评分函数。然而,在我们接触到的所有研究论文中,检索系统都被视为黑盒——接收查询,返回结果,但没有提供内置机制来修改评分。

那么,有哪些要点呢?

伪相关性反馈(PRF)已知可以提高词汇检索器的效果。几种基于PRF的方法——主要是基于查询术语扩展的方法——已成功集成到传统检索系统中。与此同时,在神经(向量)搜索专用解决方案中,目前没有已知的行业采用的类似方法;与神经搜索兼容的方法仍停留在研究论文中。

我们在研究该领域时注意到的一个空白是,研究人员无法直接访问检索系统,这迫使他们围绕着像黑盒一样的检索预言机设计封装。这对于查询调整方法来说足够了,但对于相似性评分函数调整则不行。

或许相关性反馈方法没有进入神经搜索系统是出于一些微不足道的原因——比如没有人有时间去寻找成本和效率之间的恰当平衡。

让它在生产环境中工作意味着实验、构建接口和调整架构。简单来说,它需要看起来值得投入。而且与二维向量数学不同,高维向量空间完全不直观。维度诅咒是真实存在的。查询漂移也是如此。即使在纸面上看起来完美无缺的方法,在实践中也可能不起作用。

一个现实世界的解决方案应该简单。或许只比基于规则的方法稍微智能一点,但仍然实用。它不应该需要微调数千个参数,也不需要将段落文本输入到transformer模型中。为了使其有效,它需要直接集成到检索系统本身中。

此页面是否有用?

感谢您的反馈! 🙏

很抱歉听到这个消息。😔 您可以在GitHub上编辑此页面,或创建一个GitHub issue。