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 的结果,证明了其在提高神经信息检索的质量和稳健性方面的有效性。

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

王道C语言督学营OJ课后习题(课时20)

#include<stdio.h> int main() {printf("%3d%3d",0,13);return 0; }

图深度学习——2.图的理论知识

1.图 1.1 图的定义 图是由节点&#xff08;顶点&#xff09;和边构成的数学结构。图用于表示对象之间的关系&#xff0c;其中节点表示对象&#xff0c;边表示对象之间的关系。 一个图&#xff0c;记为 G <V, E> &#xff0c;它包括以下两个要素&#xff1a; 1.节点&am…

函数的内容

一&#xff0c;概念 封装一份可以被重复执行的代码块&#xff0c;让大量代码重复使用 二&#xff0c;函数使用 大体分两步&#xff1a;声明函数&#xff0c;调用函数 声明函数有关键字&#xff1a;function 函数名&#xff08;&#xff09;{ 函数体 } 为基本格式&#xf…

linux系统安全与应用【下】

目录 1.开关机安全控制 1.1GRUB限制 2.终端登录安全控制 2.1 限制root只在安全终端登录 2.2 禁止普通用户登录 3.弱口令检测 3.1 Joth the Ripper&#xff08;JR&#xff09; 4.网络端口扫描 4.1 nmap命令 1.开关机安全控制 1.1GRUB限制 通常情况下在系统开机进入GRU…

哈希表实现[很详细!]

目录 哈希表 定义节点类 根据hash码获取value 向hash表存入新key value,如果key重复,则更新value 根据hash码删除,返回删除的value 关于resize()一些问题的解答 冲突测试 MurmurHash 设计思考 练习 Leetcode01 Leetcode03 Leetcode49 Leetcode217 Leetcode136 L…

人工智能大模型培训老师叶梓 探索知识库问答中的查询图生成:处理多跳复杂问题的新方法

在人工智能领域&#xff0c;基于知识库的问答&#xff08;KBQA&#xff09;技术正变得越来越重要。它使得机器能够理解自然语言问题&#xff0c;并从结构化的知识库中检索答案。然而&#xff0c;面对多跳复杂问题&#xff0c;传统的KBQA方法往往力不从心。近期&#xff0c;研究…

账号安全基本措施1

一、系统账号清理 1.1 将用户设置为无法登录 useradd -s /sbin/nologin lisi shell类型设置为/sbin/nologin用户将无法使用bash或其他shell来登录系统。 1.2 锁定用户。passwd -l 用户名 正常情况下是可以送普通用户切换到其他普通用户的 当锁定密码后passwd -l lisi就用普…

第22天:安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

第二十二天 一、PHP留言板前后端功能实现 开发环境&#xff1a; DW PHPStorm PhpStudy Navicat Premium DW : HTML&JS&CSS开发 PHPStorm : 专业PHP开发IDE PhpStudy &#xff1a;Apache MYSQL环境 Navicat Premium: 全能数据库管理工具 二、数据库创建&架…

【解决】echarts条形图纵坐标显示不全

先说结论&#xff1a; option:{...grid: {containLabel: true},... }这个属性是控制整体的坐标标签的。加上这个就可以显示完整了。然后再根据其他属性调整标签的字体、颜色之类的 yAxis : [{...axisLabel:{width:100,overflow:break,truncate:...,color:red,fontSize:10,},..…

JavaScript进阶部分知识总结

作用域 局部作用域 作用域规定了变量能够被访问的范围&#xff0c;离开了这个范围变量就不能被访问作用域分为&#xff1a;局部作用域和全局作用域 局部作用域分为函数作用域和块作用域 1.函数作用域&#xff1a; 在函数内部声明的变量只能在函数内部被访问&#xff0c;外…

AWD线下攻防万字最完整战术(记第一届“长城杯”半决赛战术)

目录 准备阶段 1.登录比赛平台&#xff08;获取资产&#xff09; 查看账号账号修改 服务器SSH口令mysqlWEB服务口令(后台密码)数据库后台管理员密码 账号用户检查 2.dump源码&#xff08;方便应急响应恢复靶机&#xff09; 网站源码备份 压缩文件解压文件备份到服务器本地上传…

这10款VS Code神仙插件,嵌入式程序员必备

大家好&#xff0c;我是知微&#xff01; 嵌入式软件开发工程师平时可能更多的是使用Source Insight、Keil、IAR来阅读代码&#xff0c;写代码。 VSCode大家都听说过&#xff0c;功能十分强大&#xff0c;而且免费&#xff01; 或许是因为这款软件上手有一定的学习成本&…

css:echarts渐变色转换为css渐变色

通过一个下拉框来选择渐变类型&#xff0c;为了简化&#xff0c;我设置了三种&#xff1a;水平方向的渐变、垂直方向的渐变和径向渐变用&#xff0c;表格来配置echarts渐变色的百分比位置和颜色。 config是表格里的数据格式如下&#xff1a; offset是百分比位置&#xff0c;co…

C语言项目实践——贪吃蛇

引言&#xff1a;本篇博客中&#xff0c;我将会使用结构体&#xff0c;链表&#xff0c;WIN32 API等一系列知识完成C语言项目——贪吃蛇的实现。在观看此篇博客之前&#xff0c;请将这些知识所熟悉&#xff0c;不然可能会造成理解困难。 更多有关C语言的知识详解可前往个人主页…

[C++][算法基础]求组合数(IV)

输入 &#x1d44e;,&#x1d44f;&#xff0c;求 的值。 注意结果可能很大&#xff0c;需要使用高精度计算。 输入格式 共一行&#xff0c;包含两个整数 &#x1d44e; 和 &#x1d44f;。 输出格式 共一行&#xff0c;输出 的值。 数据范围 1≤b≤a≤5000 输入样例…

一线实战:国产数据库Mogdb双网卡同步最佳实践

前言 大家都知道Oracle数据库无论是单机还是RAC集群在进行生产部署实施时&#xff0c;我们都会对网卡做冗余考虑&#xff0c;使用双网卡&#xff0c;比如public、心跳网络。这样的目的主要是为了安全&#xff0c;避免单点故障。当然双网卡Bond不仅是可以做主备还可以支持负载均…

安装mysql的流程

安装mysql的步骤 安装流程 [rootlocalhost z]# cd /mnt/share/share[rootlocalhost share]# ll[rootlocalhost share]# cp mysql157-community-release-el7-10.noarch.rmp /usr/localcp: cannot stat ‘mysql157-community-release-el7-10.noarch.rmp’: No such file or direc…

企业车辆管理系统平台是做什么的?

企业车辆管理系统平台是一种综合性的管理系统&#xff0c;它主要集车辆信息管理、车辆调度、车辆维修、油耗管理、驾驶员管理以及报表分析等多种功能于一体。通过这个平台&#xff0c;企业可以实现对车辆的全面管理&#xff0c;优化车辆使用效率&#xff0c;降低运营成本&#…

JavaWeb开发06-原理-Spring配置优先级-Bean管理-SpringBoot原理-Maven继承和聚合-私服

一、Spring配置优先级 不同配置文件&#xff0c;配置同一个属性谁有效 properties>yml>yaml 命令行参数>Java系统属性 项目打包后要改变属性&#xff1a; 红色是Java系统属性&#xff0c;绿色是命令行参数 ‘ 二、Bean管理 1.获取bean 获取IOC容器&#xff1a;ap…

linux之进程通信

目录 一、进程通信介绍 1.目的 2.发展 3.进程通信是什么&#xff0c;怎么通信&#xff1f; 二、管道 1.介绍 2.匿名管道 1.单向通信管道原理 2.代码实现 3.管道特征 4.管道的四种情况 5.管道的应用场景 使用管道实现一个简易版本的进程池 3.命名管道 1.思考 2.…