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相关推荐

  1. ANN(Approximate Nearest Neighbor)简介

    简介(Introduction): ANN(Approximate Nearest Neighbor)是一种用于在大规模数据集中寻找最近邻居的算法.它的目标是在尽可能短的时间内找到与给定查询点最近的数 ...

  2. 检索 : Approximate Nearest Neighbor NSW + HNSW

    在一个给定向量数据集中,按照某种度量方式,检索出与查询向量相近的K个向量(K-Nearest Neighbor,KNN),但由于KNN计算量过大,我们通常只关注近似近邻(Approximate Nea ...

  3. 机器学习算法系列(二十二)-近似k近邻算法-Annoy(Approximate Nearest Neighbor / ANN)

    阅读本文需要的背景知识点:k近邻算法.一丢丢编程知识 一.引言   前面一节我们学习了机器学习算法系列(二十一)-k近邻算法(k-Nearest Neighbor / kNN Algorithm),其 ...

  4. 近似最近邻搜索ANN(Approximate Nearest Neighbor)

    目前ANN近似近邻搜索有两种比较流行的方法:树方法和哈希方法. 特点概括 基于树的方法的一些特点概括: 递归了划分数据:分而治之.Recursively partition the data: Div ...

  5. 最近邻搜索|Nearest neighbor search

    维基百科:https://en.wikipedia.org/wiki/Nearest_neighbor_search 觉得整理的挺好,翻译 最近邻搜索( NNS ) 作为**邻近搜索(proximit ...

  6. Approximate Nearest Neighbors.接近最近邻搜索

    (一):次优最近邻:http://en.wikipedia.org/wiki/Nearest_neighbor_search 有少量修改:如有疑问,请看链接原文..... 1.Survey: Near ...

  7. 最近邻分类器(Nearest Neighbor Classifier)

    先从简单的方法开始说,先提一提最近邻分类器/Nearest Neighbor Classifier,不过事先申明,它和深度学习中的卷积神经网/Convolutional Neural Networks ...

  8. Product Quantization for Nearest Neighbor Search论文实验

    最近邻搜索之乘积量化(Product Quantizer)实验 记得大学三时有个老师跟我们说,检验是否深刻理解一篇论文的做法之一就是给你一篇论文,看你能否将论文中的结果重复实验出来,当时觉得老师的说法 ...

  9. [论文阅读] Nearest Neighbor Classifier Embedded Network for Active Learning

    论文地址:https://www.aaai.org/AAAI21Papers/AAAI-39.WanF.pdf 代码:https://github.com/WanFang13/NCE-Net 发表于: ...

最新文章

  1. idea 升级到2020后 无法启动_【维修案例】2020年一汽奥迪Q5L发动机无法启动
  2. 平衡二叉树 构造方法
  3. oracle+tns+01106,TNS-01106:Listener using listener name already been started
  4. Python---冒泡排序、选择排序
  5. C/C++ OpenCV之Sobel边缘检测
  6. 43 MM配置-采购-条件-定价过程-定义存取顺序
  7. 01-eclipse打包运行程序总是报错java.lang.NoClassDefFoundError和ava.lang.ClassNotFoundException(打包原理)
  8. android 上下收缩动画,Android 带有弹出收缩动画的扇形菜单实例
  9. 小甲鱼老师目前所有视频教程下载地址(mark下来慢慢看系列)
  10. 【老生谈算法】matlab实现追赶法算法——追赶法算法
  11. psp android 模拟器,安卓psp模拟器
  12. 非线性最小二乘法曲线拟合
  13. python中localtime和gtime的区别及时区计算的代码
  14. 无限轮播的实现,未加自动轮播效果(非原创)
  15. APS高级计划排程系统,工厂各部门实施前后有哪些区别?
  16. SAP ScriptForms 教程系列一
  17. chrome浏览器安装redux-devtools调试工具
  18. CCAnimation创建动画cocos2d-x教程
  19. OpenNI SDK 2.0
  20. 会打字、能翻译,联想智能语音鼠标好小橙使用评测

热门文章

  1. setw()和setfill()的用法
  2. GESP一级、二级、三级、四级 样题 真题 解析
  3. C++实现简单的固定大小内存分配器
  4. 黄山游之西海大峡谷篇
  5. Halcon 学习之焊点提取
  6. IDEA格式化代码快捷键失灵原因
  7. 强化学习3(策略学习)
  8. WPF中DataGrid自动滚动,跑马灯效果实现
  9. 一个时间复杂度是logn的例子
  10. 已被macOS使用不能打开解决,iphone照片到移动硬盘