藏在你RAG流程背后的五十年检索研究历史
RAG分块、混合搜索、HyDE、重排序以及评估方法在信息检索领域都有着数十年的历史渊源。本文将梳理相关研究进展及其存在的不足。
来源: We deleted fifty years of information retrieval and called it RAG
毫无成效的分块螺旋
想象一下,为一家金融客户构建文档处理流程时,却因分块大小问题耗费了数个深夜。分块大小从256个标记开始,逐步上升至512、1024,再以64个标记的重叠区间回到512,最终因为某个论坛帖子的推荐而定为384。一个笔记本中存放着简单的评估工具,另外两个聊天助手则位于不同的标签页中。其中一个助手会被当作高级工程师一样询问分块策略,它的回答会与当月互联网上发布的资料进行比对。这项工作就像在探索未知领域,每一轮结束后都会产生一个胜出方案以及相应的图表。
随后语料库不断扩大。放入向量存储的文档越多,检索效果就越差。在少量样本上表现良好的方法,在大规模应用时就会变得混乱不堪,返回的段落往往在向量空间中距离很近,但实际上毫无用处。人们自然而然地会尝试更严格地调整分块方式,因为分块是大家都懂的调整手段。几天过去,每次调整都会改变一些数值,而这种变化总被误认为是进展。但这些做法根本没有触及真正的问题。
这时一位同事看了看配置文件,毫无讽刺意味地问道:“BM25是什么?”当时并没有现成的准确答案。BM25已经很老旧了,人们大致认为它就是“简单的关键词搜索”,是大家都应该已经摒弃的技术。这一幕实际上暴露出,整个团队的工作一直停留在五十年前那场讨论中,甚至都没记住在场的人的名字。
这就是本文背后的坦白,而且这一情况普遍存在。“构建RAG”的几乎每个步骤都有对应的名称,而这些名称大多源自比那些用演示文稿推销这些理念的人更早的时期。那些推销者往往也不了解其起源。文中提到的“我们”和“该领域”指的是广大从业者,而这些错误都是常见的。
其他人也注意到了这一规律。Vespa的一位资深搜索工程师在2024年写道,混合检索与排序流程能够让人们将BM25这类无监督方法的信号与基于监督学习的神经网络排序器结合使用。将文档提取出来用于构建提示语属于信息检索范畴,而这项工作远不止计算余弦相似度那么简单,还包括查询重写、信息融合、重新排序以及分阶段检索等环节。一位经验丰富的相关性工程师也多次提出类似观点:检索技术并未消失,它只是隐匿起来,继续默默地支撑着整个行业的发展。
这两种观点都是成立的,不过“RAG不过是信息检索而已”只是一种口号,而口号本身并不具备实际价值。真正改变工作方式的是对实际成果的审视。下文将呈现一份相关成果的脉络图,这份图不会从2020年开始,也不会省略之前的五十年发展历程。
分块、嵌入与语义
一切始于“分块”这一概念,也正是尴尬的起源。将文档拆分成段落而非整体处理,这一想法已有数十年历史。早在1993年,段落检索就已经成为研究课题(Salton、Allan和Buckley),次年Callan便对段落级的证据进行了研究。到1997年,Kaszkiel和Zobel发表了《重新审视段落检索》,说明这一主题已足够陈旧,需要重新探讨。他们的关于段落长度与分割的实验发现,简单固定长度的段落表现出惊人的好效果,而这恰恰是采用更差方法经过多次分块调整后所得到的结果。
同年,Marti Hearst提出的TextTiling方法会在主题真正发生变化处设置分界点,而忽略词元数量。如今的“语义分块”服务提供商仍在沿用这一理念,而其背后的论文出现的时间甚至早于这些公司大多数创始人的第一台电脑。
接下来是嵌入技术,这堪称真正现代的突破,使人们区别于那些仅依赖关键词的人群。将文档和查询表示为向量并通过余弦值进行评分的做法可追溯到1975年Salton、Wong和Yang提出的向量空间模型。1972年,Karen Spärck Jones提出了为稀有词赋予更高权重的方法,如今这一功能已由嵌入模型通过其参数来实现。而通常被视为该技术核心的步骤——基于语义而非字面词汇进行匹配,从而消除词汇不匹配的问题——则是Latent Semantic Analysis,由Deerwester及其同事在1990年提出,他们利用词文档矩阵的奇异值分解来揭示隐藏的结构。
用变换器取代SVD后,许多人便宣称这一想法出自自己之手。变换器确实带来了实质性的提升,而非仅仅是表面上的改进,因为它能结合上下文来理解每个单词,而单一的静态LSA向量根本无法做到这一点。其核心原则依然未变:含义比表面形式更为重要。
融合、查询重写与重新排序
混合搜索是目前最受欢迎的方式,它将词汇得分与密集得分相结合,让所有人都能感觉自己很聪明。Elasticsearch、OpenSearch、Weaviate以及Azure AI Search中采用的混合方法即为互反排名融合,这一方法由Cormack、Clarke和Büttcher在2009年的SIGIR会议上提出。该论文中有一个细节值得更多关注:一种使用固定值60且从未经过调整的极其简单的融合方式,其性能竟优于与之对比的那些经过训练的排名学习系统。未经调整的默认设置就能胜过人们自行训练的模型。早在1994年,Fox和Shaw就已经使用CombSUM和CombMNZ将多个引擎的结果进行整合,这已是当时的标准做法。
查询重写堪称一个“咖啡杯被猛力放下”的场景。在HyDE中,模型会生成一份虚假的答案文档,系统则将其嵌入到原问题位置,其依据是一个看似合理的错误答案比原问题本身更接近正确的文档。这确实是个巧妙的技巧,不过其实早在1971年Rocchio就已经使用过类似方法了。
Rocchio的相关性反馈机制会促使查询向量向看似相关的文档靠拢,而远离那些不相关的文档。Croft和Harper在1979年提出的伪相关性反馈方法则无需任何人工干预,仅通过假设排名靠前的结果已足够好从而可以从中学习来实现同样的调整。从这个角度看,HyDE其实是一种基于神经网络的伪相关性反馈机制,只不过是多年后通过Transformer架构实现了同样的功能。其相关论文并未引用Rocchio的研究,这表明这种“遗忘”现象并不仅限于教程和论坛帖子,有时甚至会波及到论文本身。
早期的研究也为困扰生产环境中HyDE风格系统的故障指出了名称:查询漂移。当最顶层的搜索结果质量不佳时,再基于这些结果扩展查询只会让情况变得更糟,这也是为什么经验丰富的人只会运行一次反馈机制后就停止的原因。而现在的智能代理循环会不断重复这一过程,当检索结果偏离到无关领域时,所有人都会表现得十分惊讶。
其余的技术也遵循相同的模式。在第一阶段检索之后加入交叉编码器进行重新排序,以优化最顶层的搜索结果,这其实属于两阶段级联结构。级联排序机制由Wang、Lin和Metzler在2011年正式提出,而RankNet则在2005年为排序学习提供了基于神经网络的排序器。那种先运行BM25再运行交叉编码器的流程,在一年内就出现了好几次,其实不过是换了个名称的标准两阶段级联结构罢了。
评估环节才是最棘手的所在
评估是课程中最令人为难的部分,因为这一环节的处理最为糟糕。将语料库固定、编写测试查询、收集人工相关性判断结果并在离线环境下进行评分,这是源自1966年Cleverdon及其同事提出的Cranfield范式。NIST从1992年开始对这一范式进行扩展,Voorhees和Harman则在2005年的书中对其进行了记录。几十年前,从这些研究中诞生了无需阅读全部语料即可进行结果评判的汇总方法,以及MAP和nDCG等有意义的评估指标。
典型的RAG“评估”其实只是该范式的简化版且缺乏规范。不存在相关性判断,由未经验证的LLM充当评判者,而测试集则是从那些已经能正常工作的查询中悄悄拼凑而成的。
经典的集成学习方法对最后这种习惯有一个不太好的称呼:对因变量进行采样。如果基于那些已知能准确返回结果的查询来构建评估模型,那么模型就能通过测试,但一旦遇到没人考虑过要测试的情况,系统就会出错。这些错误会被标记为“幻觉”,因为没有工具能够指出真正的原因。尽管这种有缺陷的模型仍有一定价值,因为它能识别出人们在关心的查询中出现的真实回归问题,但对于那些没人提出过的查询却毫无说明,而正是这些查询在实际应用中会导致故障。在金融领域的处理流程中,这种情况就会出现在集合之外的第一个查询上,比如超出阈值的数据或日期范围——这些都是金融查询中常见的形式,但却从未被测试过。
这些数据更难以反驳。试想这样一种假设:人们本应先运行基准测试,却去调整分块大小,认为密集检索默认就优于词汇搜索。2021年Thakur及其同事的BEIR研究让十个系统在十八个数据集上展开竞争,得出的结论值得被印在每一个RAG代码库中。在训练数据集上的表现并不能说明在其他场景下的性能。BM25在领域内数据上的表现比神经网络模型落后7到18分,但当数据来自不同分布时,它的表现又优于大多数神经网络模型。而最强的密集双编码器也仅在十八个数据集中的八个上取得了胜利。
那种小众金融语料库恰恰就是BEIR所警告的那种专业性极强、属于分布范围之外的材料。人们如此笃定“密集向量法依然会胜出”,以至于尽管推荐该方法的论文已经发表了四年,却依然没人去进行词汇基线测试。
需要加以说明的是,这一基准标准一直在变化。目前一些商业排行榜显示,在BEIR测试中密集向量法的检索效果比BM25高出15%到25%。虽然有可能如此,但这些数据来自厂商在自身设定的条件下进行的测试,因此就像任何由销售方主导的基准测试一样值得怀疑。经过同行评审的研究仍然得出了平淡而正确的结论:BM25是一个出色的基线模型,而混合模型则是最稳妥的选择。如果这一状况发生变化,应该由没有利益关联的人来证明。
一种更为可悲且根深蒂固的陋习是刻意降低基准标准,然后将这样的结果视为进步。吉米·林在2018年发表的论文标题极为尖锐,名为《神经网络炒作与对弱基准的比较》,他认为许多神经网络检索技术的“胜利”其实只是战胜了那些根本没人花心思调优的BM25系统。2019年的一篇后续研究对多年来的相关论文进行了分析,发现其效果并未呈现上升趋势;目前公布的最佳数据已有十年历史,此后没有任何新方法能接近这一水平。因此,当某个RAG基准测试显示向量检索效果正在“赶超”关键词搜索时,首先应该测试BM25配置。在这个领域,最常见的情况就是一种有效的旧方法被其粗制滥造的仿制品所击败。
位置偏差:再度被发现
位置偏差这一发现以一种奇怪的方式显得有趣。在《迷失在中间》(Liu及其同事,2023年)的研究中,模型在处理位于上下文开头或结尾的信息时表现最佳,而在中间位置的表现最差,呈现出U形曲线。实际情况更为严峻:在需要处理二三十份检索到的文档的多文档问答任务中,GPT-3.5-Turbo在答案位于中间位置时的表现甚至低于其56.1%的闭卷测试得分,这意味着加入检索到的上下文反而使其表现不如凭记忆作答。在一项合成测试中,当目标信息位于输入中间时,最弱的模型表现也低于40%,而GPT-4、Claude以及几款开源模型同样呈现出U形曲线。该领域将这一现象视为关于某种新型奇特机器的新闻。
2005年,Joachims及其同事开展了一项眼动追踪研究,探讨人们如何阅读排序后的搜索结果,并在2007年进行了跟进研究。人们的注意力集中在列表顶部,即便下方的内容更具相关性,他们仍会不断点击顶部的链接。学术界将这种现象称为“信任偏差”。证据的呈现顺序会改变其被使用的方式,以及这些证据是否有效,而在有人通过模型“发现”这一现象的18年前,人类就已经知晓这一点了。
这种类比并不完美,若声称其完全一致,便犯了与被批评者相同的错误。传统的位置偏差是单调的,越靠顶部越强,随后逐渐减弱,而模型效应则呈U形,中间存在无影响区域,后期又会因近期性而出现上升趋势。尽管问题类别相同,但二者形态仍存在差异。模型版本也不稳定:一些2025年的后续研究显示,当输入接近上下文限制时,中间的惩罚效应并非消失,而是会发生变化。这又是另一个不能将“中间迷失”视为金科玉律的理由。值得保留的观点是,排序会扭曲使用方式,而精确的曲线始终在变化,因此应注重测量而非死记硬背。
旧地图的局限性
让步虽然会降低击倒的成就感,但仅停留在收据层面则只能产生一种看似聪明的击倒方式,其实不过是长时间犯错罢了。旧地图终究会用尽,而它们失效的地方最为关键。
最根本的问题在于由谁或什么来执行解读。半个世纪以来,人们都是通过浏览排名列表来进行搜索,因此相关性意味着人类一眼就能判断的内容。如今则由算法来执行解读,最新研究也明确指出:这其实是人工智能的搜索,而非人类的搜索。因此相关性取决于其运行环境,很难事先确定。
这一变化彻底颠覆了原有的假设。Cuconasu及其同事在2024年SIGIR会议上发表的论文《噪声的力量》中进行了相关实验。其中一个预期结果是:当检索结果中主题相近但缺乏答案的文档排名靠前时,其输出质量会下降;另一个令人惊讶的结果是:随机选取的、与主题无关的文档竟能使准确率提升多达35%。Cranfield模型将文档的相关性视为一种独立的、可叠加的属性;而在RAG系统中,一段文本的实用性取决于上下文中的其他所有内容以及生成器如何整合这些内容。相关性的基本衡量单位发生了变化,而大多数指标仍在使用旧有的衡量标准。
另一种故障模式没有传统的先例,因为旧系统无法出现这种状况。传统的信息检索系统虽然排名可能不佳,但不会说谎——它会返回真实存在的文档,也绝不会写出与这些文档完全矛盾的流畅且自信的段落。忠实性,即生成的文本是否确实有检索到的内容作为支撑,是一个新的评估维度。2023年出现的RAGAS之类的工具,衡量的是整个早期领域从未需要命名的概念。
代理式检索并非完全新颖的概念。单次搜索请求早已存在。不同之处在于有一种模型能够将问题拆解,发出各自的子查询,读取结果后调整计划,从而在常规检索基础上形成一种自主控制循环。这种循环才是创新所在。Khattab的DSP和DSPy项目正是对这一理念的深入研究,而他们熟悉相关早期文献,这也解释了为何能做出如此出色的成果。
评分机制也需要重新思考。nDCG、MAP和MRR都是针对逐项阅读排序列表的人设计的评估指标,它们无法判断最终生成的答案是否正确、完整且有依据。直接沿用旧有的评估标准是无法完成任务的。
那些研究人员仍在从事这项工作
打造这一切的人并没有去海边退休。他们中有几位仍在默默地将RAG融入到这一评估体系中,而RAG此前两年来一直忽视这一体系。
Jimmy Lin维护着Anserini和Pyserini这两个工具,它们能将经过精心调优的BM25简化为单一命令,从而消除“基准模型太弱”这一借口。在发表了那些令人不满的“神经网络炒作”相关论文后,他在2019年发表了《神经网络炒作,有理有据!——一篇反悔声明》,承认在面对强基准模型时,BERT时代的神经网络方法确实在资源匮乏的环境中带来了优势。他曾认为该领域被过度炒作,但在经过更有力的证据分析后又在出版物中改变了观点,不过他对炒作现象的判断仍有部分正确之处。这种态度值得双方借鉴:资深专家应关注新的研究成果,而新人则应回溯足够多的历史资料,了解自己正在更新哪些内容。
2018年,Bhaskar Mitra和Nick Craswell撰写了一本关于神经信息检索的入门读物,该书将神经网络模型牢固地置于传统框架之中,并将BM25视为值得尊重的基准方法。从2019年起,他们负责领导TREC深度学习竞赛,利用Cranfield和TREC数十年来不断完善的、可重复使用的数据集来评估整个神经网络时代的技术进展。这场变革是由该领域的专家们用原有的评估标准来评判的,结果它通过了考验。从一开始,只要有人需要,这种严谨的评估标准就是可移植的。
Ellen Voorhees与Donna Harman共同编撰了关于TREC评估的标准著作。Voorhees多年来一直在研究一个棘手的问题:人类对相关性的判断往往相互矛盾,而这正是任何试图用大型语言模型取代人类评估员的人所面临的难题。信息检索领域在探讨这一替代方案时,通过出版物阐述观点,并指出某些研究人员警告称这可能会悄悄破坏该领域的科学性。试点数据表明,模型的判断与人类的判断之间的肯德尔塔值接近0.86,这一数值看似令人安心,但仅凭相关性无法说明两者在何处存在分歧,而真正重要的分歧往往出现在那些决定最终胜出系统的边缘文档上。
现在已有针对此领域的竞赛项目。2024年,NIST基于经过去重处理的包含1.13亿段文本的MS MARCO语料库,设立了包含301个主题的TREC RAG竞赛项目。那些将评估视为运行pytest命令的人,应当了解构建一个可靠测试集所需付出的繁琐工作。该竞赛项目会评估信息提取的召回率——这将Voorhees早期的信息提取方法引入了大语言模型时代——以及引用支持能力,即检查生成的结论是否有相应检索到的文本作为依据。2025年,查询内容从简短的关键词字符串转变为冗长、复杂的多句叙述,更接近真实问题的形式。这一传统并未因此消失,而是设立了新的竞赛项目并引入了RAG技术,这完全是TREC式的做法。
读取历史记录时会发生什么变化
信息检索并未消亡,RAG也并未改变一切。凡是宣扬其中某一种观点的人都值得怀疑,因为这两种说法都会让人逃避实际工作。真相更为简洁且实用。该领域虽然出现了处理检索到文本的出色方法,却在匆忙之中抛弃了五十年来积累的关于如何有效进行信息检索的知识。
这些知识随时都可以重新学习。引用关系图是公开的,评估标准也是公开的,而那些研究人员依然在从事这项工作;当有更年轻的人提出有见地的疑问时,他们通常会感到惊喜。
实际做出的改动都是刻意设计得比较乏味的:
- 在调整嵌入模型之前,先优化BM25基准模型。
- 从那些令人担忧的查询中构建评估集,而忽略那些已经能正常工作的查询。
以上方法都无法带来调整数据块大小时的那种兴奋感。那些本应胜出的基准模型缺乏重新探索前沿领域的刺激感,而这种缺失的刺激感会带来实际代价。它还会让在优质数据集上表现良好的流程与在未经爬取的数据集上表现一般的流程分离开来。
那位询问BM25的同事并非落伍,他与其他人获得的是相同的资料,即从2020年开始的版本,其中前五十年已被删除。解决方法是找到缺失的页面,幸运的是这些页面从未丢失,只是人们不再阅读它们了。
分类整理的原始论文
至少阅读其中一篇,总比完全听信他人之言要好。
段落、分块与嵌入:
- Salton、Allan和Buckley(1993)研究了全文系统中的段落检索问题,那时的网络还尚未出现搜索引擎。
- Callan(1994)在《文档检索中的段落级证据》一文中比较了实际检索系统中的段落与固定窗口段落。所谓“分块策略”其实有其起源。
- Kaszkiel和Zobel(1997)在《重新审视段落检索》一文中通过实验发现固定长度的段落更为有效,只要给评估工具足够的时间,它也会得出这一结果。
- Hearst(1997)在《文本分块》一文中探讨了在子主题发生变化时对文本进行分割的方法。每一种语义分块方式都有更早的文献记载。
- Salton、Wong和Yang(1975)提出了向量空间模型,他们在1975年就阐明了向量数据库在查询时所执行的操作。
融合、反馈与重排序:
- Cormack、Clarke和Büttcher(2009年)提出了互反排名融合方法,这是多家主流搜索引擎所采用的混合搜索技术,其中60这一未经调整的常数就能超越经过训练的方法。
- Fox和Shaw(1994年)研究了多种搜索方式的结合,CombSUM和CombMNZ这类方法在当时已较为常见。
- Gao、Ma、Lin和Callan(2022年)在HyDE论文中提出了一种巧妙的虚假答案技巧,其本质属于神经网络伪相关性反馈。
- Rocchio(1971年)提出了最初的相关性反馈方法,通过引导查询向看似相关的结果靠拢。
- Croft和Harper(1979)提出的伪相关性反馈机制,亦被称为查询漂移。
- Wang、Lin和Metzler(2011)提出的BM25-then-cross-encoder流程背后的正式级联排序模型。
- Burges及其同事(2005)提出的RankNet,证明了在2005年时学习排序技术已能实现有效的神经网络排序器。
评估方法:
- Cleverdon、Mills和Keen(1966)提出的Cranfield II,这一已有六十年历史的模板涵盖了语料库、查询、评估标准以及离线评分流程。
- Voorhees和Harman(2005)编写的TREC评估指南,旨在帮助人们更客观地测试检索系统。
- Järvelin和Kekäläinen(2002)阐述了nDCG的起源及其理论依据。
- Voorhees(2000)研究了人类评估者之间的分歧程度,这正是引入大型语言模型评估者时需要解决的核心问题。
- Faggioli、Dietz、Clarke及其同事(2023)探讨了大型语言模型在相关性判断中的应用,其中也提到了可能破坏相关科学研究的风险。
- Mitra和Craswell(2018)介绍了将神经网络模型纳入传统研究框架的神经信息检索概念。
- Craswell及其同事(2019)总结了2019年TREC大会中的深度学习相关内容。
实证研究结果:
- Thakur及其同事(2021)在BEIR研究中表明,BM25在数据分布不一致的情况下仍能优于大多数密集模型。
- Lin(2018)以及Yang、Lu、Yang和Lin(2019)研究了性能提升缓慢且缺乏明显上升趋势的问题。
- Lin(2019)在其文章中撤回了先前的观点,体现了批评者态度的转变。
- Liu及其同事(2023年发表,2024年出版)提出了“陷入中间困境”的观点。
- Joachims及其同事(2005年,2007年有后续研究)探讨了点击率作为隐性反馈及其所暴露的信任偏差问题。
- Veseli、Chibane、Toneva和Koller(2025年)研究了当输入内容接近上下文窗口限制时位置偏差的变化情况。
真正的新进展包括:
- Cuconasu及其同事(2024年)在《噪声的力量》一文中指出,随机无关文档反而能提升准确性。
- Es、James、Espinosa-Anke和Schockaert(2023年)提出了RAGAS工具,用于衡量信息的忠实度。
- Khattab及其同事(2022年和2023年)开发了Demonstrate-Search-Predict和DSPy,这是代理检索技术的更成熟版本。
- NIST举办的TREC 2024 RAG竞赛设置了301个主题、1.13亿篇文本,支持信息片段召回及引用验证功能。
相关阅读
- 实用笔记:什么是检索增强生成(RAG)?实战指南 — 为采用该模式的团队提供的实用笔记:检索增强生成(RAG)?实战指南的详细操作步骤,包括相关契约、检查项以及可直接使用的代码模板。
- 从下一个标记预测到可运行代码:LLM如何生成Python代码 — 按顺序解释标记、softmax函数、温度参数、自注意力机制以及前馈层,同时给出逐步排序示例,并分析预测过程中存在的固有限制。