Meta提出全新文档级嵌入框架,利用LLM来增强信息检索能力

近年来,基于嵌入式检索(embedding-based search)或密集检索(dense retrieval)相比传统的稀疏检索(sparse retrieval)或基于词袋(bag of words)的方法,已经展示出了更先进的结果。

于此同时,Meta 的研究团队(Mingrui Wu 和 Sheng Cao)近日发表了一个通过大型语言模型(LLM)实现检索增强的的文档级嵌入框架,使得可以显著提高广泛使用的各类检索器模型(如 Bi-encoders (Contriever,DRAGON) 和 late-interaction模型 (ColBERTv2))的检索有效性,并在 LoTTE 数据集和 BEIR 数据集上实现了 Sota(State of the art)的结果。

图片

论文链接:

https://arxiv.org/abs/2404.05825

图片

引言

Bi-encoder 是一种广泛用于信息检索的神经网络架构。它由两个编码器组成,通常以 Transformer 模型的形式,分别为用户查询(user query)和潜在文档(target document)或段落编码一个向量表示。这两个编码器可以共享或使用两个独立的模型。然后可以计算这两个嵌入向量之间的相似性,通常使用点积或余弦相似性,以确定文档或段落与用户查询条(user query)的相关性。

Cross-encoders 与 bi-encoders 不同,它们在早期阶段就将输入融合在一起,允许用户查询和文档之间进行更复杂的交互。在这里,用户查询和文档被连接在一起,基于此计算一个联合的潜在空间中的向量。然后使用此向量进行预测,例如在信息检索任务中确定文档对查询的相关性。在需要对输入之间的相互作用进行细致理解的任务中,Cross-encoders 通常优于 bi-encoders。

Late-interaction 模型,如 ColBERT 和 ColBERTv2,是混合了 cross-encoder 模型和 bi-encoder 模型的模型架构。查询和文档被独立地编码成 token 级别的向量表示。

因此,在某种意义上,这是一个向量袋(bag of embedding)的模型。这些向量表示之间的交互,即“后期交互”,涉及到在 token 级别的向量嵌入上计算余弦相似性或点积分数。所有的模型架构都需要用户查询和目标文档的信息嵌入向量。虽然我们不能在检索任务中控制用户查询,但我们假设通过丰富文档的嵌入式向量可以提高文本检索的质量和稳健性。

大语言模型增强检索及其框架

2.1 合成相关查询(synthetic relevant queries)

这个概念的灵感来自网络搜索技术。为了说明这个想法,让我们考虑一个用户查询 "MIT" 的例子。如果没有先验知识,很难弄清楚 "Massachusetts Institute of Technology" 和 "MIT" 是等价的。

然而,在网络搜索中,我们可以观察到 "Massachusetts Institute of Technology" 的主页从 "MIT" 的查询中收到了大量的点击,这使我们可以推断出 "Massachusetts Institute of Technology" 的主页必须与 "MIT" 的查询密切相关。

另一方面,我们通常没有每个用户查询的点击数据。然而,大型语言模型擅长生成合成查询,所以我们可以使用合成查询作为代理的“点击数据”来引导用户查询到相关的文档。

一个重要的点是,在传统的检索任务中,我们使用相似性来表示相关性。相似性得分在数学上定义为用户查询和文档的编码向量的点积或余弦。然而,有时这个相似性得分可能不能反映语义相关性。例如,“谁是美国的第一任总统?”在相似性得分上可能非常接近“谁成为了美国的第一任总统?”。但我们的目标答案可能是关于“乔治·华盛顿”的维基百科页面或自传,其与查询的相似性得分可能不那么高。

然而,如果我们使用华盛顿的自传来创建合成查询,“谁成为了美国的第一任总统?”可能是其中之一。用户查询“谁是美国的第一任总统?”可以通过相似性得分轻松地匹配到相关查询。后者指向目标文档(华盛顿的自传)。因此,生成的相关查询从不同的角度表达了原始文档的语义,这有助于匹配相关的查询。

2.2 标题(title)

文档的标题在确定其对用户查询的相关性和用途方面起着关键作用。标题通常是用户在搜索文档时看到的第一条信息,它可以极大地影响他们点击特定结果的决定。一个精心制作的标题可以提供重要的上下文和关键词,帮助用户快速理解文档的内容和目的。如果原始文档有标题,我们可以直接使用。如果没有,我们可以利用大型语言模型为该文档生成一个合成标题。

2.3 段落(chunk/passage)

分块是指将一大段文档或文本划分为更小、更易管理的单元的过程。这些单元,被称为"块"或"段落",通常是通过将相关的信息组合在一起创建的。由于检索模型的上下文窗口的限制(换句话说,模型输入的最大长度),我们通常将一个长文档划分为几个块,其 token 数量低于上下文窗口限制。块数据来自原始文档,而不是来自 LLM 增强。最优的分块大小对于各种检索模型是不同

以下是对于文档级嵌入框架当中对于文档“相关性”搜索的表达。

图片

2.4 大语言模型增强检索框架下的Bi-encoder

Bi-encoder 通常是“双塔”(two-tower)模型结构。给定一个查询和一个文档,分别应用查询编码器和文档编码器来计算查询和文档的嵌入向量。然后将这两个嵌入向量输入到点积(或余弦相似度)中,以计算查询和文档之间的相似度分数。由于我们希望通过注入合成查询和标题来丰富文档嵌入向量,作者建议计算相似度如下:

图片

右手边的第一项计算查询块嵌入对的最大相似度分数,其中  是相似度分数函数, 是输入查询的嵌入向量, 是文档中第  块的嵌入向量。这一项在当前基于嵌入的检索中常用,它根据查询和文档中最相关的块确定查询和文档之间的相似度。

第二项是创新的,并考虑了更多的信息,其中  是每个文档字段的嵌入向量。计算查询嵌入和每个字段嵌入之间的相似度分数,并将它们组合在一起,每个字段都有一个字段权重参数 。如前所述,这些文档字段包括合成查询、标题和块字段。

现在让我们考虑如何计算每个字段的查询字段嵌入 。对于只包含一个阶段或句子的标题字段,这是直接的。我们只需应用文档编码器来计算标题的嵌入向量作为标题字段嵌入。对于可能包含多个文档块的块字段,我们可以使用文档编码器计算每个块的嵌入向量。问题是如何组合这些嵌入向量来表示整个文档?作者建议计算所有块嵌入向量的平均值作为块字段嵌入。

同样,对于合成查询字段,作者使用查询编码器计算每个查询的嵌入向量,然后计算这些嵌入向量的平均值作为查询字段嵌入。这种简单的方法在实验中效果非常好,而在未来显然可以在这里探索更先进的方法。

此外,由于相似度函数是线性的(点积是线性的;如果我们将嵌入向量归一化到单位长度,余弦相似度也是线性的),上述方程可以简化为以下形式:

图片

因此,我们可以将  视为原始文档的每个块  的块嵌入向量。这将与业内的嵌入式向量搜索数据库兼容。

2.5 大语言模型增强检索框架下的Token-Level Late-Interaction model

与使用单个嵌入向量表示查询和每个文档的单个嵌入向量不同,像 ColBERT 和 ColBERTv2 这样的后期交互模型 token 级嵌入向量交互,所有 token 的嵌入向量都被保留,并将参与计算查询和文档之间的相似度分数。

图片

其中  和  分别是输入查询和文档的 token 级嵌入向量。因此,对于每个查询 token,都会识别出文档中最相似的 token,并记录他们的相似度分数。所有这些分数都会在所有查询 token 上求和,以获得查询和文档之间的总体相似度。由于相似度分数的计算是在 token 级别完成的,我们可以将合成查询和标题连接到原始文档段落。之后,如果 token 数量达到上下文窗口限制,我们将决定是否对连接的文档进行分块。

Experiments

作者选择开源的 Llama-70B 进行合成查询生成和标题生成。对于 Bi-encoders,作者按照上述方法实现了文档级嵌入,并为 Contriever 模型选择了=1.0,=0.5,=0.1,为 DRAGON 模型选择了=0.6,=0.3,=0.3。

作者在历经实验后选择了=64,并发现这样的 chunk size通常在 Bi-encoders 的检索结果中表现最好。注意,这些字段权重的超参数并没有完全优化。它们是根据 Bi-encoder 模型在单个数据集上的性能选择的,然后固定用于所有其他数据集的评估。

对于 ColBERTv2,如前所述,作者将标题与每个文档的所有合成查询连接起来,使其成为原始文档的额外“段落”。因此,在这些实验中没有字段权重超参数。在 late-interaction 模型架构下,可能有其他更好的组装方法来组成文档级嵌入。作者在构建 ColBERT 索引时设置 index_bits=8。

基于所有三种模型在 LoTTE 和 BEIR 数据上的结果,我们可以观察到,LLM 增强检索和文档级嵌入显著提高了Bi-encoders(Contriever 和 DRAGON)的recall@3 和 recall@10。

对于 token-level late-interaction 模型(ColBERTv2),在 LoTTE 和 BEIR 数据集上的增加仍然明显,尽管没有 Bi-encoders 那么多。这可能是因为 token-level late-interaction 模型的基线比 Bi-encoders 的基线要高。

此外,LLM 增强的 Contriver 的性能已经超过了大多数数据集中的 vanilla DRAGON。同样,LLM 增强的 DRAGON 甚至在 BEIR-ArguAna,BEIR-SciDocs 和 BEIR-CQADupstack-English数据集上超过了 vanilla ColBERTv2,并在其余数据集中大大减小了性能差距,尽管 ColBERTv2 引入了比 DRAGON 更复杂的 late-interaction 架构。

因此,我们可以看到,通过使用 LLM 增强来丰富文档的嵌入,可以在不进行进一步微调的情况下,大大提高检索器模型的召回性能。

图片

Ablation Studies

作者进行了进一步研究来了解段落块(chunk), 相关查询(relevant query)和标题(title)字段如何影响不同检索模型的检索质量。对于 Bi-encoders(Contriever 和 DRAGON),作者进一步控制了块、合成查询和标题的字段权重,以了解这些参数如何影响性能。

对于 token-level late-interaction 模型(ColBERTv2),作者只控制模型使用块、查询或标题字段中的一个,以了解它们如何影响端到端的检索质量。

对于 Contriever 模型,作者观察到大多数时候,合成查询在提升召回性能方面起着最关键的作用,与其他两个字段相比,而在 BEIR-SciDocs 和 BEIR-Scifact 中,合成查询的重要性较小。因此,文档级嵌入中多个字段的加权和在大多数情况下可以产生更好的性能。这些权重可以作为超参数进一步调整。

图片

对于 DRAGON 模型,在文档级嵌入中哪个字段起着更重要的作用没有明显的模式。在 LoTTE 数据集中,它更多地受到标题字段的驱动。然而,在 BEIR-ArguAna、BEIR-Quora 和 BEIR-SciFact 的数据集中,块字段更重要。再次,文档级嵌入中多个文档字段的加权和在大多数情况下可以产生更好的性能。

对于作者在 DRAGON 和 Contriever 中观察到的不同模式,一个原因可能是 DRAGON 使用独立的查询和上下文编码器,而 Contriever 在作者的设置中使用共享的查询和上下文编码器。因此,Contriever 更擅长于识别相似性而不是相关性,这就是为什么合成查询字段在 Contriever 模型中有更大的影响,因为它更好地将相似性转化为相关性。

图片

对于 ColBERTv2,作者从 LoTTE 数据集中观察到,进一步切分段落实际上会损害性能。这可能是因为相似性计算是在 token 级别进行的,所以切分段落(同时增加块的数量)不会帮助 ColBERTv2 模型消化粒度的上下文信息。因此,作者在 BEIR 数据集上没有评估仅块的情况。

在所有数据集中,合成查询对 ColBERTv2 的重要性都大于标题,而将它们全部组合在一起通常会产生更好的召回结果。再次注意,对于 token-level late-interaction 模型,没有字段权重超参数。

图片

结论和局限性

本文提出了一种创新的框架,即大语言模型增强检索,通过大型语言模型来丰富文档的嵌入,显著提高了现有检索模型的性能。该框架包括一个文档级嵌入系统,它编码了来自合成查询、标题和段落块的上下文信息,可以适应各种主流检索模型架构。该方法在不同的模型和数据集上取得了 Sota 的结果,证明了其在提高神经信息检索的质量和稳健性方面的有效性。

未来的研究可以探索对大语言模型增强检索框架的进一步改进,例如将更多的上下文信息集成到文档级嵌入中,应用更先进的相似性得分度量,更复杂的方法来将多个块/查询的嵌入组合成一个块/查询字段嵌入等。

本研究的一个局限性是它在为原始文档增强相关查询和标题时需要额外的计算资源,有时增强文本的大小可以与原始文档的大小相当。这种计算量可能会限制这种方法在计算资源有限的地方的使用。另一个局限性或风险是,大型语言模型中的幻觉可能会对增强语料库对原始文档的准确性造成额外的影响。幻觉在大型语言模型的研究领域仍然是一个未解决的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640383.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

找不到msvcp140dll,无法继续执行代码的详细解决方法

在我们日常使用计算机进行各类工作任务的过程中,时常会遭遇一些突发的技术问题。比如,有时在运行某个重要程序或应用软件时,系统会突然弹出一个令人困扰的错误提示:“电脑提示找不到msvcp140.dll文件,因此无法继续执行…

多项式相关题()

D - S老师的虚树 值得一提的是如何求这个 a i a_i ai​,可以考虑按dfs序考虑同一种边,运用树状数组即可统计(注意不要加重了,不需要打区间覆盖,这样可以不用打线段树) F(i, 1, n) {ll sz d[i].size() - 1…

自动化测试的7个步骤

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

微服务:Eureka原理实践:@EnableEurekaServer、@LoadBalanced

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 微服务:Eureka原理实践&#xff1a…

国产生骨肉冻干品控好不好?热榜TOP5生骨肉冻干分享

对于新手养猫人来说,进口生骨肉冻干的高价常常让人疑惑,为何它能在养猫达人中赢得如此高的声誉?与国产生骨肉冻干相比,进口产品的价格高出数倍,那么这高昂的价格是否代表了其独特的价值,还是只是一个消费陷…

在React Router 6中使用useRouteLoaderData钩子获取自定义路由信息

在 React Router 6 中怎么像vueRouter一样,可以在配置路由的时候,定义路由的元信息(附加信息)?答案是可以的。稍有些复杂。核心是通过为每个路由定义了一个 loader 函数,用于返回自定义的路由信息,然后通过useRouteLoaderData 钩子…

力扣HOT100 - 94. 二叉树的中序遍历

解题思路&#xff1a; 递归 class Solution {List<Integer> list new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {recur(root);return list;}public void recur(TreeNode root) {if (root null) return;recur(root.left);lis…

最强开源大模型Meta LIama3抢先在线体验!

4月19日Facebook母公司Meta重磅推出了其迄今最强大的开源人工智能&#xff08;AI&#xff09;模型——Llama 3。模型分为两种规模&#xff1a;8B 和 70B 参数&#xff0c;每种规模都提供预训练基础版和指令调优版。最强开源大语言模型Meta LIama3可以在线体验啦&#xff01; G…

javaWeb宠物商店管理系统

摘 要 本系统是采用Java技术来构建的一个基于Web技术的B/S结构的宠物网站&#xff0c;该网站建立在Spring和Struts2框架之上&#xff0c;前台使用JSP作为开发语言&#xff0c;后台使用MySQL数据库管理系统对数据进行管理&#xff0c;开发环境选用MyEclipse&#xff0c;应用服务…

拿捏 顺序表(2) ----- 实现通讯录

目录 前言一. 通讯录功能要求二. 实现方法三. 代码汇总四. 效果展示总结 正文开始 前言 书接上文, 我们已经初步了解了线性表, 顺序表其实就是在数组的基础上增加了一些特有的功能, 那么顺序表有哪些应用呢? 下面我们一起使用顺序表实现通讯录的功能. 博客主页:酷酷学!!! …

JavaAgent的agent与attach

文章目录 简介agent与attachagentattach如何attachpom.xml 简介 javaagent是什么&#xff1f; 从名字agent也可以看出&#xff0c;是一种代理。 javaagent用来做什么&#xff1f; 本质上是对class的一种增强&#xff0c;用来实现一些通用功能&#xff0c;例如链路追踪等。 …

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告&#xff1a;“学习排名 (Learning To Rank)” 功能处于技术预览版&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但此功能不受官方 GA 功能的支持 SLA 的约束。 注意&#xff1a;此功能是在版本 8.12.0 中引入的&#xff0c;并且仅适…