在拥有200万Token上下文窗口的世界里高级检索技术:第2部分关于重排序

谷歌DeepMind推出的视觉化AI项目。

在第1部分中,我们深入探讨了通过在检索前重写查询来改进RAG(检索增强生成)结果。这次我们将了解如何通过重新排序向量数据库检索的结果来帮助提升性能。

尽管我强烈建议尝试像Cohere的Re-Rank 3这样的有前途的专有选项,但我们将主要关注研究人员在该话题上分享的内容。

首先,为什么要重新排序?向量数据库返回的结果是基于查询和文档的嵌入“相似度”评分。这些评分已经可以用于对结果进行排序,既然这已经是文档和查询之间的语义相似度评分,那么我们为什么还需要再多一步?

我们采用这种方法有几个原因:

  • 文档嵌入是“有损”的。文档在看到查询之前已经被压缩成向量格式,这意味着文档向量并没有针对查询向量进行定制。重新排序可以让我们更好地理解 文档对于查询的特定意义
  • 在传统搜索和推荐系统中,两阶段系统已经成为标准。它们在可扩展性、灵活性和准确性方面提供了改进。 检索模型非常快,而排序模型则较慢。 通过构建混合系统,我们可以平衡每个阶段之间的速度和准确性权衡。
  • 重新排序可以减少我们填充到上下文窗口中的文档数量,从而 a) 降低成本 并且 b) 减少相关数据被“淹没在草堆中”的机会

信息检索不是一个新领域。在LLM(大语言模型)采用RAG来改进生成之前,搜索引擎使用重新排序方法来改进搜索结果。两种流行的方法是TF-IDF(词频–逆文档频率)和BM25(最佳匹配25)。

卡伦·斯帕克·琼斯于20世纪70年代提出了IDF(TF-IDF中的逆文档频率)的概念,作为对词项特异性的统计解释。一般概念是,词项的特异性可以被量化为其出现的文档数量的反函数。一个简单的例子是莎士比亚戏剧中的词项频率。因为“罗密欧”这个词只出现在一部戏剧中,所以我们认为它对戏剧题材比“甜蜜”这个词更有信息量,因为“甜蜜”出现在所有戏剧中。

BM25或Okapi BM25由卡伦·斯帕克·琼斯和斯蒂芬·罗伯逊共同开发,作为TF-IDF的改进。BM25是一种“词袋”检索函数,根据查询词在每个文档中出现的情况对一组文档进行排序,而不管它们在文档中的位置。这种方法在几个重要方面扩展了TF-IDF:

  • BM25使用一种饱和函数,词项的重要性随频率增加但效果递减。(旁注:这在搜索引擎优化(SEO)变得更加重要时,对于保护准确性来说很重要。你不能通过这种改进只是简单地乱堆积你的关键词。)
  • BM25包括文档长度规范化,以确保较长的文档不会不公平地占优。(另一个用于阻止潜在SEO作弊者的改进。)

这些方法都可以用来在文档在生成上下文中使用之前对向量数据库的结果进行重新排序。这被称为基于“特征”的重新排序。

你应该注意到,传统方法注重的是精确的术语匹配。这些方法在文档使用语义上相似但不同的术语时会遇到困难。像SBERT(句子转换器)这样的神经网络重新排序方法试图克服这一限制。

SBERT是一种经过微调的BERT(双向编码器表示转换器)模型,采用了孪生/三重网络架构,大大提高了计算句子相似度的效率和延迟。像SBERT(句子BERT)这样的转换器利用术语使用的上下文,使模型能够处理同义词和具有多重含义的词汇。

SBERT在推理时的架构,例如计算相似度分数。这种架构也与回归目标函数一起使用。图片来源:《Sentence-BERT:使用孪生BERT网络进行句子嵌入》——Nils Reimers和Iryna Gurevych

由于其专业性,SBERT在语义相似度排序方面表现更好。然而,使用SBERT的缺点是你需要在本地管理模型,而不是调用API,例如使用OpenAI的嵌入模型。因此,选择时请慎重!

从向量数据库搜索得到的前K个结果是与查询向量最相似的文档向量。这种排序方法也可以称为“双编码器”排序。向量事先计算好,近似最近邻算法(ANNs)选择最相似的文档,从而使这一方法高度高效。但是,这种高效率是以牺牲一定的准确性为代价的。

相比之下,交叉编码器通过对数据对进行分类来计算相似度。这意味着你需要为每个文档和查询准备一对数据。这种方法可以产生更准确的结果,但效率极低。这就是为什么交叉编码器最好通过一种混合方法来实现,即首先使用“双编码器”对前K个结果进行筛选,然后再使用交叉编码器进行排序。你可以在SBERT文档中阅读更多关于双编码器和交叉编码器结合使用的方法。

信息检索/问答检索图解说明如何将双编码器和交叉编码器结合使用,详见SBERT文档,完整引用如下所示。

@inproceedings{reimers-2019-sentence-bert, title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks", author = "Reimers, Nils and Gurevych, Iryna", booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing", month = "11", year = "2019", publisher = "Association for Computational Linguistics", url = "https://arxiv.org/abs/1908.10084", }

基于提示的重新排序(PBR)

到目前为止,我们主要关注使用向量或其他数值方法对RAG结果进行重新排序。但这是否意味着我们低估了大模型(LLM)的能力?将文档和查询返回给LLM进行评分是一种有效的文档评分方式;采用这种方法时几乎没有信息损失。如果提示LLM只返回一个单一的记号(即得分),延迟通常是可以接受的(尽管这是一种较为昂贵的扩展方法)。这被认为是“零样本”重新排序,虽然在这个主题上的研究仍然有限,但我们知道它必须对提示的质量非常敏感。

另一种版本的(PBR)是DSLR框架(基于句子级重新排序和重构的文档精炼)。DSLR提出了一种无监督的方法,将检索到的文档分解成句子,根据相关性重新排序,并在传递给LLM之前将其重构为连贯的段落。这种方法与依赖固定大小段落的传统方法形成对比,后者可能包含冗余或无关信息。在生成响应之前删除不相关的句子可以减少幻觉并提高整体准确性。下面你可以看到DSLR精炼如何改进LLM的响应示例。

来自DSLR: 通过句子级重新排序和重构增强检索增强生成的文档精炼,作者为韩国高级科学技术研究院计算机学院的Taeho Hwang、Soyeong Jeong、Sukmin Cho、SeungYoon Han、Jong C. Park的DSLR精炼示例

有时答案不会完美地适应单一文档块。书籍和论文的写作期望是它们将被线性阅读,或者至少读者将能够轻松参考早期的段落。例如,当阅读关于SBERT时,可能会被要求参考早期章节的BM25。在基本的RAG应用中,这是不可能的,因为检索到的文档与之前的章节没有关联。

G-RAG是由谷歌和UCLA的研究人员提出的一种方法,旨在缓解这一问题。G-RAG是一种重新排序器,利用图神经网络(GNN)来考虑检索文档之间的连接。文档被表示为节点,边代表文档之间共享的概念。这些图被生成为抽象意义表示(AMR)图,可以使用https://github.com/goodbai-nlp/AMRBART(MIT License)等工具创建。

在自然问题(NQ)和TriviaQA(TQA)数据集上进行的实验表明,这种方法在平均绑定逆序得分(MTRR)和平均命中数@10(TMHits@10)上优于其他最先进的方法。

来自UCLA和谷歌研究人员:G-RAG使用两个图来对文档进行重新排序:抽象意义表示(AMR)图用作文档级别图的特征。然后文档图用于文档重新排序

希望你喜欢这篇关于改进RAG应用性能的技术概述。期待在这一领域的持续进展。考虑到目前研究的迅猛速度,我知道未来将会有很多新进展。

总结:

谷歌DeepMind推出的视觉化AI项目通过重新排序向量数据库的检索结果,提升了检索增强生成(RAG)的性能。传统方法如TF-IDF和BM25在信息检索中有着关键作用,但它们面临着语义匹配上的局限。为了克服这一点,神经网络技术如SBERT和交叉编码器提供了更高的语义相似度排序精度。而最新的基于图的方法G-RAG则通过利用图神经网络解决了文献之间的关联问题,提高了检索的准确性。DSLR框架通过句子级重新排序和重构,也为生成模型提供了更为精确的输入。本文深入探讨了这些方法,为AI在信息检索中的应用提供了新的思路和启示。

在这个快速发展的科技领域,使用光年AI能够显著提升工作效率和客户获取能力。光年AI,智能化私域流量管理,让营销更高效。从流量增长到成本降低,光年AI为您提供一站式解决方案。开启AI时代的私域流量革命,就选光年AI。

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值