Zhang S, Liang Y, Gong M, et al. Multi-View Document Representation Learning for Open-Domain Dense Retrieval[C]//Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers). 2022: 5990-6000.
摘要导读
密集检索(dense retrieval)在大规模文档集合的第一阶段检索中取得了令人瞩目的进步,这种检索是建立在双编码器架构(bi-encoder)上,以生成查询(q)和文档(d)的单一向量表示。 但是,一个文档通常可以回答来自不同视图的多个潜在查询。 因此文档的单个向量表示很难与多视图查询匹配,并且面临语义不匹配问题。 本文提出了一种多视图文档表示学习框架,旨在生成多视图嵌入来表示文档并强制它们与不同的查询保持一致。首先,本文提出了一种通过viewer生成多个嵌入的简单而有效的方法。 其次,为了防止多视图嵌入崩溃到同一个,进一步提出了一种具有annealed temperature的全局-局部损失,以鼓励多个viewer更好地与不同的潜在查询保持一致。
现有方法
论文中介绍了多种现有的方法用于比较说明- 依托于PLM并且最早出现的模型应该是cross-encoder,其主要的做法是将给定的查询和所有的文本都进行拼接,得出[CLS]位相应的score,然后对其进行排序,找到最能匹配查询的文本。在实际的应用中,这种方式的性能相对较高,但是其算法的复杂度与文本集合的大小成正比,因此不太适用于大规模的检索任务。
- bi-encoder则是为每个查询和文档都生成基于BERT的唯一表示,然后利用相似性度量方式给出匹配的score。对score进行排序得出检索对应的文档。
- colBERT是通过对query的每个token embedding都与doc中每个token做相似性评估,为query的每个token选到最大的score,然后把query的每个token得到的最大score相加,得到当前query和doc的匹配得分。这里并不需要考虑文档长度对得分的影响,因为最终的得分是由query的长度决定的。给定query,文档得分sum的个数是确定的。
- polyEncoder在query部分考虑了每个token的输出,用pooling技术得到query的embedding。在doc中则是采用了压缩器并生成了候选的doc嵌入表示,引入attention机制得出文档的最终表示,与query表示计算相似度score。由此找出最匹配的文档。
方法浅析
- 基础架构Bi-Encoder
得分计算方式: 其中sim为相似度计算函数,这里使用的是内积;和分别为query和doc经BERT之后,[CLS]token的嵌入表示。为了增加query和匹配文档的相似性,使其远离非匹配文档,在fine-tune时引入了传统的对比损失: 是影响优化的超参数。 - 改进架构 Multi-Viewer Based Architecture
其基础架构和Bi-Encoder一致,只不过添加了多个view的文本表示。
相比于BERT的[CLS]覆盖的是文档的全部信息,本文提出的模型关注的是每个句子中涵盖的精细的信息。因此本文添加了多个viewer token -- 来代替原始的句子表示。具体来说, 在文档的开头添加了不同的,并对其进行随机初始化,定义其position id为0,使得文档的position embedding不发生改变。然后,使用dual encoder对query和doc进行编码: 其中,○代表拼接操作,和是BERT中的特殊字符。并且文中说明是使用最后一层的输出作为query和doc的表示。分别记为:以及。因为query通常比doc短很多,因此本文只为其设置了一个。当然,笔者认为设置几个除了在计算score时计算量大一点,好像也没啥影响。
query只对应一个token的score计算很直观,即分别计算和之间的相似性,最终的得分表示为:
这里给出在BERT中添加special tokens的方式:
special_tokens_dict = {'vie_token': '<VIE>'}
num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)
print('We have added', num_added_toks, 'tokens')
model.resize_token_embeddings(len(tokenizer))
print(tokenizer.vie_token)
更多细节可以移步这里。
- 全局-局部损失
为了训练上述的多视图结构,本文引入了Global-Local loss作为优化目标: 具体来说,全局损失考虑的是文档级别的损失,即与query对应的正例样本和其余负例样本之间相似性;局部损失,则考虑的是当前文档中,maxscore对应与多视图token表示之间的相似性。
因此,全局采用的是前序提到的文档对比学习损失:
局部损失可以坐看一个logits多分类损失: 为了进一步鼓励更多不同的viewer被激活,作者采用退火温度,逐步调整viewer的 softmax 分布的清晰度。
是控制退火的超参数,是迭代次数,并且在每个迭代中都进行改变。在实验中,和使用了相同的。在训练的开始阶段(使用较大的),softmax 值倾向于在viewers中均匀分布,以使每个viewer都可以公平地被选择并从训练数据中获取梯度。 随着训练过程的进行,会降低以使优化更加稳定。
实验部分没有细看。反正效果很不错。整体来说,doc对应multi-viewer的思路很新颖,至少让我耳目一新。这也是为啥大佬能中ACL的原因吧。
网友评论