【IR 论文】DPR — 最早提出使用嵌入向量来检索文档的模型

论文:Dense Passage Retrieval for Open-Domain Question Answering
⭐⭐⭐⭐⭐
EMNLP 2020, Facebook Research
Code: github.com/facebookresearch/DPR

文章目录

    • 一、论文速读
    • 二、DPR 的训练
      • 2.1 正样本和负样本的选取
      • 2.2 In-batch negatives 技巧
    • 三、实验
      • 3.1 数据集的选用
      • 3.2 使用的模型
      • 3.3 Main Result
      • 3.4 模型训练的消融实验
      • 3.5 DPR 对比 BM25
    • 四、总结

一、论文速读

本篇文章提出的 DPR 模型是最早提出使用嵌入向量来实现文档检索的模型,也是目前 RAG 中 Retriever 的经典实现方案

在文档检索上,有两大流派:

  • Sparse Retrieval:使用 TF-IDF 或者 BM25 来实现检索
  • Dense Retrieval:向量检索

本文的 DPR 就属于 dense retrieval。

问题形式:我们有一堆文档 D = { d 1 , d 2 , … , d D } D = \{ d_1, d_2, \dots, d_D \} D={d1,d2,,dD},将这里面的每个文档切分为多个等长的 passages,passage 就是检索结果的基本单元。这些切分后的 passages 构成了我们的 corpus C = { p 1 , p 2 , … , p M } C = \{ p_1, p_2, \dots, p_M \} C={p1,p2,,pM}。而我们的任务是,给定一个 question q q q,我们需要返回与其相关的 passage 集合 C F ∈ C C_F \in C CFC

DPR 是一个 dual-encoder 架构,也就是包含两个 encoder:

  • passage encoder E P ( ⋅ ) E_P(\cdot) EP():是一个 BERT,将任意的 passage 映射为 d d d 维的 embedding 向量
  • question encoder E Q ( ⋅ ) E_Q(\cdot) EQ():也是一个 BERT,将一个 question 映射为 d d d 维的 embedding 向量

首先,DPR 会使用 encoder E P E_P EP 将 corpus 中的所有 passage 映射为 embedding 向量,并存入 FAISS 中离线构建向量索引,之后在运行时,对于到来的一个 user question,先使用 encoder E Q E_Q EQ 将其映射为 embedding 向量,然后通过比较 question embedding 和所有的 passage embedding 的相似性,选出 top-k 个 passages 作为检索结果

这里计算两个 embedding 相似性使用的是向量点积:

相似性函数

二、DPR 的训练

训练目标:找到这样一个向量空间,在这里面相关的 question 和 passage 比不相关的具有更高的相似度。

训练样本的形式:每一个 training data 的 instance 包含一个 question q i q_i qi、一个正样本 positive passage p i + p_i^+ pi+ 以及 n 个负样本 negative passages p i , j − p_{i,j}^- pi,j

损失函数:最小化正样本的负对数似然:

损失函数

2.1 正样本和负样本的选取

positive passage 比较好选,这往往是 QA 数据集已经给定了,或者可以从 answer 中找到。

而 negative passages 就比较难选了,负样本的使用是为了提高模型识别不相关文档的能力,这就需要让负样本多样化。在这篇论文中,考虑了以下三种类型的负样本类型:

  1. Random Negatives:从整个文档集合中随机选择的文档作为负样本。
  2. BM25 Negatives:使用BM25检索系统根据问题检索到的,但不包含答案的文档作为负样本。
  3. Gold Negatives:来自训练集中,与当前问题不匹配的正样本(即其他问题的正样本)作为负样本。

Gold Negatives 的 Gold 指的是这个样本是高质量的负样本,是特意选出来与当前问题不相关的样本。

2.2 In-batch negatives 技巧

这是一个在语义理解(向量索引)技术中的常见的训练技巧。

以如下 Batch size=4 的训练数据为例:

我手机丢了,我想换个手机 我想买个新手机,求推荐
求秋色之空漫画全集 求秋色之空全集漫画
学日语软件手机上的 手机学日语的软件
侠盗飞车罪恶都市怎样改车 侠盗飞车罪恶都市怎么改车

In-batch Negatives 策略的训练数据为语义相似的 Pair 对,策略核心是在 1 个 Batch 内同时基于 N 个负例进行梯度更新,将同一 Batch 内除自身之外其它所有 Source Text 的相似文本 Target Text 作为负例,例如: 上例中“我手机丢了,我想换个手机” 有 1 个正例(”我想买个新手机,求推荐“),3 个负例(1.求秋色之空全集漫画,2.手机学日语的软件,3.侠盗飞车罪恶都市怎么改车)。

具体来说,In-batch negatives策略的实施步骤如下:

  1. 选择正样本:首先从当前批次中选择出一个正样本,这个样本是模型需要正确识别的目标样本。
  2. 选择负样本:然后从同一批次中随机选择或根据特定规则选择一些负样本。这些负样本可以是与正样本相似但被错误标记的样本,也可以是完全不相关的样本。
  3. 模型训练:将正样本和负样本一起输入模型进行训练。模型需要学会区分正样本和负样本,从而提高推荐或检索的准确性。

In-batch negatives 策略的优势在于:

  • 提高模型的区分能力:通过在每个批次中引入负样本,模型被迫学习如何区分正样本和负样本,这有助于提高模型的泛化能力和区分度。
  • 利用现有数据:不需要额外的负样本库,可以直接利用当前批次中的数据作为负样本,这在数据有限的情况下尤其有用。
  • 减少计算资源消耗:与从全局样本集中采样负样本相比,In-batch negatives可以减少计算资源的消耗,因为它避免了在整个数据集上进行负采样的需要。

然而,In-batch negatives 策略也存在一些潜在的问题,例如:

  • 批次大小的限制:如果批次大小较小,可能无法提供足够多样化的负样本,这可能影响模型的学习效果。
  • 偏差问题:由于负样本是在同一个批次中选择的,可能会出现某些样本被频繁选为负样本的情况,这可能导致模型学习到的表示存在偏差。

In-batch negatives 已被证明是一个有效的训练 dual-encoder 模型的方法

In-batch negatives 的更多资料:https://github.com/paddlepaddle/PaddleNLP/tree/develop/applications/neural_search/recall/in_batch_negative

三、实验

文章做了两大类实验:Passage Retrieval 和 Question Answering,在这里我们主要关注 Passage Retrieval 上的实验。

3.1 数据集的选用

学习一下这里是如何构建数据集的

本工作通过预处理从 Wikipedia 中获取到 21,015,324 篇 passages,然后使用了多个 QA 数据集来构建本工作所用数据:

  • Natural Question(NQ)
  • TriviaQA
  • WebQuestion(WQ)
  • CuratedTREC(TREC)
  • SQuAD v1.1

具体关于数据集的详细信息,可以参考原论文。

之后,本论文工作从这些数据集中构建出本文模型所需要使用的数据,针对 QA 中的每一个 question,本文使用了 BM25 来检索出相关的 passages,并将最高排名的 passage 作为 positive passage。

3.2 使用的模型

主要使用了三个模型来进行实验:

  1. BM25:经典的 sparse retrieval 的模型
  2. DPR:本文的模型
  3. BM25 + DPR:先分别让 BM25 和 DPR 独立运行,然后将两者的输出进行聚合,使用某种线性组合或者重排序(reranking)策略来得到最终的检索列表。

3.3 Main Result

实验结果
可以看到,除了 SQuAD 数据集,DPR 模型都表现比 BM25 效果好。

作者还给出了 DPR 在 SQuAD 数据集上表现不如 BM25 的原因,是认为这个数据集是注释者在看到文章后写下问题。因此,段落和问题之间有很高的词汇重叠,这给 BM25 带来了明显的优势。其次,数据仅从500多篇维基百科文章中收集,因此训练示例的分布极有偏见。

3.4 模型训练的消融实验

分别针对以下部分做了消融实验,这里仅列出一些结论,具体可以参考原论文:

  1. Sample efficiency:作者发现,少量的训练样本就可以让 DPR 的表现超过 BM25,并且随着样本的增多,DPR 的表现也在变得更好。
  2. In-batch negative training:作者发现负样本的选择方式(前面介绍了三种)对模型表现影响不大
  3. Impact of gold passages:作者将 gold positive passage 作为正样本和将 BM25 选出来的最靠前的 passage 作为正样本继续了对比,发现前者表现更好。
  4. Similarity and loss:选择 L2 distance 作为相似性函数并相应的修改 loss func 后,并不会太影响模型的结果
  5. Cross-dataset generalization:将模型在 NQ 上训练后直接用于其他 QA Dataset 的实验,发现效果还不错,说明了 DPR 的检索能力具备通用性。

3.5 DPR 对比 BM25

这篇论文虽然实验说明 DPR 在数据集上表现比 BM25 要好,但在实际中,两者有着不同的适用场景

  • BM25 这样的术语匹配方法对高度选择性的关键词和短语很敏感
  • DPR 更好地捕捉词汇变化或语义关系

两者的效率也有明显的区别:

  • 在运行时,有 FAISS 的帮助下,DPR 的吞吐量比 BM25 明显要高
  • 但在预先构建索引阶段,DPR 向量化所有 passages 需要花费大量的时间(论文使用了 8.5h
  • ),而 BM25 的工业实现 Lucene 可以很快完成(论文使用了 30min)

这里的具体数据可以参考原论文。

四、总结

DPR 是密集向量检索的经典实现方式之一,目前也还有大量基于它的思路来实现的,对这个模型进行认真学习很有必要。

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

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

相关文章

医学影像增强:空间域方法与频域方法等

医学影像图像增强是一项关键技术,旨在改善图像质量,以便更好地进行疾病诊断和评估。增强方法通常分为两大类:空间域方法和频域方法。 一、 空间域方法 空间域方法涉及直接对医学影像的像素值进行操作,以提高图像的视觉质量。以下是一些常用的空间域方法: 对比度调整:通过…

双向链表的介绍

引入 特点 操作 定义 插入 删除 小结 整合代码: //定义 typedef struct node{int data;node* next,prior; }Dlnode,*Dlinklist;//初始 void init(Dlinklist &l){Dlnode lnew Dlnode;l->nextNULL;l->priorNULL; }//插入:插入指定位置&#…

buuctf-misc-rar

13.rar 题目:直接破解就可以了 这个借用工具Aparch进行4位纯数字暴力破解,根据题目的提示是4位的纯数字,那我们就选择数字的破解 在长度这里,把最小口令长度和最大口令长度都选择为4 获得密码后进行解压。

各省财政涉农支出统计数据集(2001-2022年)

01、数据简介 财政涉农支出是指在政府预算中,用于支持农业、农村和农民发展的财政支出。这些支出旨在促进农村经济的发展,提高农民收入,改善农村生产生活条件,推进农业现代化。 在未来的发展中,各省将继续加大财政涉…

【研发管理】产品经理知识体系-产品设计与开发工具

导读:产品设计与开发工具的重要性体现在多个方面,它们对于产品的成功开发、质量提升以及市场竞争力都具有至关重要的影响。产品设计工具可以帮助设计师更高效地创建和优化产品原型。开发工具在产品开发过程中发挥着至关重要的作用。产品设计与开发工具还…

这三个AI导航站,你绝对用得到!!

Hi,这里是前端后花园,专注分享前端软件网站、工具资源。不得不说AI正在慢慢改变我们学习和工作方式,今天带来这三个AI导航站,总有一个你用得到,记得收藏啊! AI工具集 https://ai-bot.cn/ 网站汇集了700 …

Linux多线程(三) 线程池C++实现

一、线程池原理 我们使用线程的时候就去创建一个线程,这样实现起来非常简便。但如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需…

华为MRS服务使用记录

背景:公司的业务需求是使用华为的这一套成品来进行开发,使用中发现,这个产品跟原生的Hadoop的那一套的使用,还是有很大的区别的,现记录一下,避免以后忘了 一、原始代码的下载 下载地址:MRS样例…

STM32HAL库++ESP8266+cJSON连接阿里云物联网平台

实验使用资源:正点原子F1 USART1:PA9P、A10(串口打印调试) USART3:PB10、PB11(WiFi模块) DHT11:PG11(采集数据、上报) LED0、1:PB5、PE5&#xff…

input框添加验证(如只允许输入数字)中文输入导致显示问题的解决方案

文章目录 input框添加验证(如只允许输入数字)中文输入导致显示问题的解决方案问题描述解决办法 onCompositionStart与onCompositionEnd input框添加验证(如只允许输入数字)中文输入导致显示问题的解决方案 问题描述 测试环境:react antd input (react的事件与原生…

浅谈在Java代码中创建线程的多种方式

文章目录 一、Thread 类1.1 跨平台性 二、Thread 类里的常用方法三、创建线程的方法1、自定义一个类,继承Thread类,重写run方法1.1、调用 start() 方法与调用 run() 方法来创建线程,有什么区别?1.2、sleep()方法 2、自定义一个类&…

嵌入式常见存储器

阅读引言: 在看一款芯片的数据手册的时候, 无意间翻到了它的启动模式(Boot Mode), 发现这种这么多种ROM,所以就写下了这篇文章。 目录 一、存储器汇总 二、易失性存储器(RAM) 1. SRAM 1.1 单口SRAM 1.2 双口SRAM 2. DRAM 2.1 SDRAM 2…

Fast-DetectGPT 无需训练的快速文本检测

本文提出了一种新的文本检测方法 ——Fast-DetectGPT,无需训练,直接使用开源小语言模型检测各种大语言模型,如GPT等生成的文本内容。 Fast-DetectGPT 将检测速度提高了 340 倍,将检测准确率相对提升了 75%,超过商用系…

有哪些好用电脑端时间定时软件?桌面日程安排软件推荐 桌面备忘录

随着现代生活节奏的加快,人们对于时间管理和任务提醒的需求越来越大。为了满足这一需求,市场上涌现出了众多桌面便签备忘录软件,它们不仅可以帮助我们记录待办事项,还能定时提醒我们完成任务。在这篇文章中,我将为大家…

计算机研究生如何在顶级会议了解行业方向

以为例子论文可视化 |WACV 2022 年 (thecvf.com)https://wacv2022.thecvf.com/papers-visualizations?filterprimary_subject_area&search3DComputerVision 这些图表适用于IEEE/CVF 计算机视觉冬季会议 (WACV) 2022。顶部图表是根据彼此相似性分布的会议主要会议论文的可…

微电子领域材料生长方法(六)液相外延(LPE)

微电子领域材料生长方法(六)液相外延(LPE) 液相外延(Liquid Phase Epitaxy, LPE)是一种用于生长单晶薄膜的技术,特别是在半导体材料的制备中。LPE技术允许在较低的温度下从熔体中生长出高质量的…

Visual 下载 NuGet包速度变慢

Visual 下载 NuGet包速度变慢 最近遇到一个问题,即我在使用 Visual Studio 下载 Nuget 包的时候会发现变得特别慢,那么该如何解决该问题呢 Visual Studio → 工具 → NuGet 包管理项 → 程序包管理设置 → 程序包源 从上面我们可以看到我使用的包源地址…

2024 最新免费听全网音乐神器

之前分享过几个的音乐软件挂了2024最新神器app,全网音乐免费听 ,这里再整理分享下,下载地址 https://pan.quark.cn/s/b52ada313fbd 玩转互联网达人 苏生不惑备用号,分享各种黑科技软件资源和技巧,带你玩转互联网。 …

12.JAVAEE之网络原理2

1.网络层 网络层要做的事情,主要是两方面, 1)地址管理,制定一系列的规则,通过地址,描述出网络上一个设备的位置. 2)路由选择.网络环境比较复杂的,从一个节点到另一个节点之间,存在很多条不同的路径,就需要通过这种方式,筛选/规划出更合适的路径进行数据传输 IP协议 8位协议&…

HackMyVM-Convert

目录 信息收集 arp nmap WEB web信息收集 gobuster RCE漏洞 反弹shell 提权 get user.txt 提权 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 08:00:27:77:ed:84, IPv4: 192.168.9.126 Starting…
最新文章