Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval
Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval
密集检索 (DR) 的有效性通常需要与稀疏检索相结合
主要瓶颈在训练机制,训练中使用的负面实例不能代表不相关文档,如下图所示
本文介绍最邻近负对比估计(ANCE):从语料库的最邻近(ANN)索引构造负样本的计件制,该索引与学习过程并行更新以选择更真实的负样本(这种方式从根本上解决了DR训练和测试中数据分布间的差异)
- **简单的说就是用已经有的DR模型,来刷negative sample(**很多工作告诉你数据中加入hard negative sample对结果的提升是非常有效的)
实验中,ANCE提升了BERT-Siamese DR 模型到超过所有计算密集检索系数的baseline。效果和用点积的sparse-retrieval-and-BERT-reranking相匹配,并提速将近100倍。
方法
负样本有两种
- 1、容易判别的
- 2、难判别的,学习这种对于对比学习的帮助更大
在对比学习的思想中,我们希望使用一些方法检索这些难判别的负样本来增强模型的效果
ANN检索
一个标准的DR(dense retrieval)结构会使用孪生或dual-encoder结构,如下
- 这个编码器在最后一层的[CLS]用一个LN映射,这个权重是q和d共享的
DR使用ANN(Approximate nearest neighbor)搜索能有好的效果
-
D R ( q , ⋅ ) DR(q,\cdot) DR(q,⋅)指的是由DR对q检索来的文档,这些文档来自模型 A N N f ( q , d ) ANN_{f(q,d)} ANNf(q,d)得来的index
这样的方法有几个特性:
- 1、可学习性:DR中的representation得到充分的学习
- 2、高效性:DR中,文档的representation可以预先计算。此外,询问只用在线编码,并用ANN检索就能得到很多好的结果
DR中representation的学习
loss如下
常规的方法,对 D − D^- D−的采样如下
在DR中,由于最优的负样本在重排序中不同于这些样本,所以还会随机采样一些样本加入,如下
由于大多数文档与查询无关,所以随机采样的也不太可能命中相关的负样本
ANCE(Approximate Nearest Neighbor Noise Contrastive Estimation)
在构建算法的时候,要考虑如何对齐训练和测试时的数据分布,即我们如何异步地学习它
ANCE使用了标准的DR模型和损失函数
唯一不同的是训练时的负样本
- ANN搜索出的index使用学习到的representation模型f(),这使得推理的时候和训练的时候相同,消除了这之间的数据分布差异
异步训练
因为训练是随机的,encoder f会每步都更新,要更新ANCE的负样本( D A N C E − D_{ANCE}^- DANCE−),要以下两步
- 1、inference:用新的encoder来更新所有文档的representation
- 2、index:用更新后的representation来重构ANN index
重构ANN index可以使用一些library,但是这样在推理的时候成本高昂,需要对他们re-encode。
- 所以这里的ANCE,只在每k个checkpoint后重构ANN index,即
- 1、取出最近的checkpoint f k f_k fk
- 2、使用 f k f_k fk推理整个语料库,此时的负样本是 D f k − 1 − D_{f_{k-1}}^- Dfk−1−,来自 A N N f k − 1 ANN_{f_{k-1}} ANNfk−1
- 3、重构ANN index( A N N f k ANN_{f_k} ANNfk),得到 D f k − D_{f_k}^- Dfk−
每个checkpoint中有m个batch,m为可调的超参;m=1时可以同步更新,但是太慢;m=∞时则不更新
实验
有所提升
效率
- ANCE在线只用11.6ms,提升百倍
- 文档编码可以离线完成,每个文档平均4.5ms
训练测试一致性
有较高的一致性
Approximate Nearest Neighbor Negative Contrastive Learning for Dense Text Retrieval相关推荐
- ANN(Approximate Nearest Neighbor)简介
简介(Introduction): ANN(Approximate Nearest Neighbor)是一种用于在大规模数据集中寻找最近邻居的算法.它的目标是在尽可能短的时间内找到与给定查询点最近的数 ...
- 检索 : Approximate Nearest Neighbor NSW + HNSW
在一个给定向量数据集中,按照某种度量方式,检索出与查询向量相近的K个向量(K-Nearest Neighbor,KNN),但由于KNN计算量过大,我们通常只关注近似近邻(Approximate Nea ...
- 机器学习算法系列(二十二)-近似k近邻算法-Annoy(Approximate Nearest Neighbor / ANN)
阅读本文需要的背景知识点:k近邻算法.一丢丢编程知识 一.引言 前面一节我们学习了机器学习算法系列(二十一)-k近邻算法(k-Nearest Neighbor / kNN Algorithm),其 ...
- 近似最近邻搜索ANN(Approximate Nearest Neighbor)
目前ANN近似近邻搜索有两种比较流行的方法:树方法和哈希方法. 特点概括 基于树的方法的一些特点概括: 递归了划分数据:分而治之.Recursively partition the data: Div ...
- 最近邻搜索|Nearest neighbor search
维基百科:https://en.wikipedia.org/wiki/Nearest_neighbor_search 觉得整理的挺好,翻译 最近邻搜索( NNS ) 作为**邻近搜索(proximit ...
- Approximate Nearest Neighbors.接近最近邻搜索
(一):次优最近邻:http://en.wikipedia.org/wiki/Nearest_neighbor_search 有少量修改:如有疑问,请看链接原文..... 1.Survey: Near ...
- 最近邻分类器(Nearest Neighbor Classifier)
先从简单的方法开始说,先提一提最近邻分类器/Nearest Neighbor Classifier,不过事先申明,它和深度学习中的卷积神经网/Convolutional Neural Networks ...
- Product Quantization for Nearest Neighbor Search论文实验
最近邻搜索之乘积量化(Product Quantizer)实验 记得大学三时有个老师跟我们说,检验是否深刻理解一篇论文的做法之一就是给你一篇论文,看你能否将论文中的结果重复实验出来,当时觉得老师的说法 ...
- [论文阅读] Nearest Neighbor Classifier Embedded Network for Active Learning
论文地址:https://www.aaai.org/AAAI21Papers/AAAI-39.WanF.pdf 代码:https://github.com/WanFang13/NCE-Net 发表于: ...
最新文章
- idea 升级到2020后 无法启动_【维修案例】2020年一汽奥迪Q5L发动机无法启动
- 平衡二叉树 构造方法
- oracle+tns+01106,TNS-01106:Listener using listener name already been started
- Python---冒泡排序、选择排序
- C/C++ OpenCV之Sobel边缘检测
- 43 MM配置-采购-条件-定价过程-定义存取顺序
- 01-eclipse打包运行程序总是报错java.lang.NoClassDefFoundError和ava.lang.ClassNotFoundException(打包原理)
- android 上下收缩动画,Android 带有弹出收缩动画的扇形菜单实例
- 小甲鱼老师目前所有视频教程下载地址(mark下来慢慢看系列)
- 【老生谈算法】matlab实现追赶法算法——追赶法算法
- psp android 模拟器,安卓psp模拟器
- 非线性最小二乘法曲线拟合
- python中localtime和gtime的区别及时区计算的代码
- 无限轮播的实现,未加自动轮播效果(非原创)
- APS高级计划排程系统,工厂各部门实施前后有哪些区别?
- SAP ScriptForms 教程系列一
- chrome浏览器安装redux-devtools调试工具
- CCAnimation创建动画cocos2d-x教程
- OpenNI SDK 2.0
- 会打字、能翻译,联想智能语音鼠标好小橙使用评测