【RAG 论文】Contriever:对比学习来无监督训练文本嵌入模型

论文:Unsupervised Dense Information Retrieval with Contrastive Learning

⭐⭐⭐⭐⭐

Facebook Research, arXiv:2112.09118

Code:github.com/facebookresearch/contriever

一、论文速读

本文使用对比学习的方法来对文本检索模型做无监督学习训练,从而实现在多个领域的泛化性。

提出的 motivation:在有大量数据集的 domain 上做监督训练得到的 dense retriever 具有强大的表现,但是当被应用到其他 domain 时,表现可能还不如 BM25 这类经典方法。于是想到,无监督学习是迁移学习的一种自然选择,本文的研究问题就是:有没有可能在无监督的情况下训练一个 dense retriever,并与 BM25 的性能相匹配

本工作提出了 Contriever 模型,采用 bi-encoder 架构,query 和 doc 分别进行编码,其相关性得分由两者的 vector representation 的 dot product 计算得出。经验表明,query encoder 与 doc encoder 采用相同的 encoder 通常可以在零样本迁移或者少样本学习的背景下提高鲁棒性(原 paper 第 3 节提出),因此本工作使用了相同的 encoder,encoder 基于 BERT 来进行训练。

论文的重点创新是其训练思路,下面详细介绍。

二、模型的训练

2.1 对比学习(Contrastive Learning)

训练数据包含 positive pairs 和 negative pairs,对比学习采用 InfoNCE 损失,具体如下论文所示:

1715417066478

2.2 构建 positive pairs

对比学习的一个关键因素是如何从单个 input 中构建 positive pairs,本文的方法如下:

  • 反完形填空任务Inverse Cloze TaskICT):是一种训练 retriever 的数据增强方法,经常被用来生成用于训练的正样本对,具体来说,ICT 的步骤如下:
    1. 文本分段:将 document 分割成若干的 segments
    2. 随机采样:从每个 segment 中随机采样出一个 span 的文本作为 query,该 segment 的剩余部分作为 context,(query, context) 就可以作为一个正样本
    3. 训练检索器:训练 retriever,使其能够根据 query 检索出原始的 context
  • Independent cropping:从一个 document 中,完全独立随机地采样出两个 span tokens 作为正样本对
  • Additional data augmentation:额外的数据增强,如随即删除单词、替换或者屏蔽等。

在之后的消融实验中,该工作发现使用“independent cropping”来训练 retriever 是 ICT 的一个有力替代方案

2.3 构建大量的 negative pairs

这里主要用了两种思路:in-batch negatives 方法和 MoCo 方法。

in-batch negatives 方法已经在其他论文讲解中介绍了。

Moco(Momentum Contrast)是一种用于无监督或自监督学习的对比学习方法,它在处理大规模数据集时特别有效,因为它可以高效地利用大量的负样本。MoCo 的核心思想是使用一个动态更新的 queue 来存储 negative example 的 vector representation

MoCo 方法的几个关键步骤如下:

  1. 正样本对:对于每个 input,先按照前面的方法构造一个 positive pair
  2. 负样本队列:维护了一个 negative queue,用于存储之前 batch 的 negative example 的 vector representation,其大小是固定预先设定的。每个训练步骤中,最新的负样本表示会被加入到 queue 中,而队首则会被移除。queue 反映了最近的训练状态。
  3. Query Network:该网络负责对 input query 生成 vector representation,训练过程中会通过梯度下降进行更新
  4. 动量编码器(momentum encoder):MoCo 中,负样本的 representation 由动量编码器生成,该编码器的参数更新也不是通过梯度下降更新,而是通过“指数移动平均”来更新(具体可参考原论文)。这意味着动量编码器的参数更新速度较慢,从而在训练过程中提供了更加平滑和一致的负样本表示。
  5. 对比损失:使用对比损失来训练 encoder,对于每个正样本对,模型需要将其与队列中的负样本区分开来。

以上就是 MoCo 的思路。

三、结论

该工作主要探索了使用 MoCo 技术来基于对比学习和无监督学习来训练 retriever,并发现它表现出良好的检索性能,具有不错的泛化性。

如果继续对其微调的话,可以进一步改进其表现,从而产生强大的结果。
triever,并发现它表现出良好的检索性能,具有不错的泛化性。

如果继续对其微调的话,可以进一步改进其表现,从而产生强大的结果。

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

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

相关文章

数据结构(一)绪论

2024年5月11日 一稿 数据元素数据项 逻辑结构 集合 线性结构 树形结构 图结构 物理结构 数据运算 算法 时间复杂度

【贪心算法】哈夫曼编码Python实现

文章目录 [toc]哈夫曼编码不同编码方式对比前缀码构造哈夫曼编码哈夫曼算法的正确性贪心选择性质证明 最优子结构性质证明 总结 Python实现时间复杂性 哈夫曼编码 哈夫曼编码是广泛用于数据文件压缩的十分有效的编码方法,其压缩率通常为 20 % 20\% 20%到 90 % 90\%…

Cloud Translation 价格

Cloud Translation 价格 您需要按月为 Cloud Translation 处理的内容量付费。您需要支付的具体费用取决于您使用的 API 方法和翻译模型。所列价格以美元 (USD) 为单位。 如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。 如需详细了解…

机器学习算法应用——CART决策树

CART决策树(4-2) CART(Classification and Regression Trees)决策树是一种常用的机器学习算法,它既可以用于分类问题,也可以用于回归问题。CART决策树的主要原理是通过递归地将数据集划分为两个子集来构建决…

怎么制作流程图?介绍制作方法

怎么制作流程图?在日常生活和工作中,流程图已经成为我们不可或缺的工具。无论是项目规划、流程优化,还是学习理解复杂系统,流程图都能帮助我们更直观地理解和表达信息。然而,很多人可能并不清楚,其实制作流…

12、FreeRTOS信号量(semaphore)

文章目录 一、信号量的特性1.1 使用场景1.2 什么是信号量1.3 信号量和队列的区别1.4 两种信号量的对比 二、二值信号量/计数信号量2.1 什么是二值信号量2.2 什么是计数信号量2.2 (二值信号量/计数信号量) 相关API 三、互斥量(mutex)3.2 什么是优先级翻转3.3 互斥量的使用场合3.…

互斥锁概述

1. 同步互斥概述 在多任务操作系统中,同时运行的多个任务可能都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务同步和互斥就是用于解决这两个问题的。 互斥:一个公共资源同一时刻只能被一个进程或线程使用…

谷粒商城实战(023 业务-订单模块-页面和幂等性等校验)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第270p-第p283的内容 简介 远程调用的服务已经注册到了注册中心 校验 幂等性校验 拿令牌 读令牌 删令牌 要实现 原子性 在一个事务中 添加令牌…

使用注解的方式进行配置RabbitMQ

引入依赖&#xff1a; <dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit-test</artifactId><scope>test</scope></dependency> 配置application.yml server:port: 8082 spring:rabbitmq…

堆排序 之实现最小的K个数

目录 1、方式一&#xff1a;通过自定义实现建堆和堆化操作 2、方式二&#xff1a;借助模块heapq实现 2.1、模块heapq的基本使用 2.2、使用heapq实现最小的k个数 3、堆在实际项目的应用 实现语言&#xff1a;Python 3.9 题目来源&#xff1a;牛客 分析&#xff1a; 要找…

Tiff文件解析和PackBits解压缩

实现了Tiff图片文件格式的解析&#xff0c;对Tiff文件中的PackBits压缩格式进行解压缩&#xff0c;对Tiff文件中每一个Frame转换成BufferedImage显示。 Java语言实现&#xff0c;Eclipse下开发&#xff0c;AWT显示图片。 public static TIFF Parse(final byte[] bytes) throw…

es6语法总结

【1】语法 &#xff08;1&#xff09;声明变量(let-var-const) 变量提升&#xff1a; 是JavaScript引擎在代码执行前将变量的声明部分提升到作用域顶部的行为。尽管变量的声明被提升了&#xff0c;变量的赋值&#xff08;即初始化&#xff09;仍然保留在原来的位置。因此&…