论文阅读1:Multi-View Document Representation Learning for Open-Domain Dense Retrieval
论文来源:ACL2022
论文地址:https://arxiv.org/abs/2203.08372
领域:检索,密集检索(Dense Retrieval),初次检索,文档表示
做法简介:用多个embeddings表示一个文档;设置局部损失让embeddings避免坍缩成1个,以改善文档表示
本文大纲
阅读前的碎碎念
接下来详细解释一下论文的一些点,因为本人也是科研小白,所以可能有的东西不是很了解,说错的望各位海涵。
主要思路
这部分主要介绍作者考虑了哪些内容,包括如何输出文档表示、如何训练模型(当然包括数据集的简单介绍)和一些其他的小细节。
初次检索相关
1.检索体系结构
论文中列举了检索的几种模型体系
作者最后选择了Bi-encoder的形式做密集检索,这种方式可以由ANN(近似最近邻)支持,好处是查询很快
2.如何计算查询和文档的相关度
计算评分的方式则是采用相似度函数代替查询和文档的相关性
相似度函数可以取向量相似度、欧氏距离等等
本文考虑了多个评分(可以结合下图看)
其中,个人分数由查询表示和文档每个句子的表示计算,用它们的内积表示;聚合分数取这些相似度中最大的那个作为表示(max-pooler)
小小的总结
总之这部分主要说的是,我们是先用向量表示句子或者查询,然后再通过函数计算相似性的,这很自然。
模型相关
向量表示
1.采用模型输出的哪个部分作为向量表示?
毫无疑问采用了BERT。
但并不是采用[CLS]输出的向量或者mean_pooling,而是采用了全新的特殊标记[VIE],这些标记将添加在文本前,与文本一同输入模型。
这些标记将会随机初始化,为了不影响句子顺序,它们的位置编码将被统一设置成0
最后使用特殊标记的last_hidden_state的输出的作为文本表示
2.查询向量表示
查询只需要用1个向量表示,作者给出的理由是:
1.查询相对文档比较短 2.查询的语义是比较单一的
3.文档向量表示
文档需要用多个向量表示,作者对确认K的数量进行了一些小的实验,分别实验了K=4,6,8,12是否会影响表示效果,最后发现K=8的时候效果最好,而K增大到12以上,表现有微小下降,猜测一个文档可能是没有那么多视图。
训练损失
训练损失是最近经常用的对比学习(请注意,这篇论文选的都是有监督数据集),主要分为全局损失和局部损失(可以看一下相关度那张图上的部分)
总损失
λ,字面意义上来看,它“指导”模型更应该关注哪部分的损失。作者做了一个实验确定λ选多少比较好,最后发现λ=0.01表现比较好
全局损失
这个大概没啥好解释的,就是和“负文档”对比,τ是一个超参数,用于缩放温度,总之就是τ取合适的调优效果就会更好
局部损失
上文说到了这个多向量表示的目的是让文档不同的部分匹配不同的查询,则局部损失是使得查询与现在的这个viewer(也就是其中一个文档表示向量)距离更近,viewer之间离得远一点。
数据集
一共采取了3个数据集,Natural Questions,TriviaQA,SQuAD Open
简略的介绍一下它们的情况。
NQ简介:https://paperswithcode.com/dataset/natural-questions
TQ简介:https://paperswithcode.com/dataset/triviaqa
SQuAD简介:https://paperswithcode.com/dataset/squad
(作者处理了一下数据集 Both NQ and TQA have about 60K training data after processing and SQuAd has 70k. )
以下是全部数据集的大小
NQ | TQ | SQuAD | |
---|---|---|---|
数据集来源 | Wikipedia | Wikipedia/WEB | Wikipedia |
训练集大小 | 307,373 | 950K | 107,785(536 articles) |
测试集大小 | 7,842 | ? | - |
验证集大小 | 7,830 | - | - |
效果
分别评估了TOP 5/TOP 20/TOP 100的准确率
当然后面还有对比查询速度,以及不同实验参数取得的效果,就不赘述了。