bert中的sep_Bert在文本排序中的经验性分析

最近一直在做文本召回与排序相关的工作,所以积攒了不少相关的论文。今天分享一篇SIGIR2020的论文,题目是:An Analysis of Bert in Document Ranking,文如其名,作者在论文中通过经验性探测手段,比较清晰的分析了bert在做排序时query与document以及attention之间的联系,有些结论在我看来还是很有道理的,并且也能与其他学者的论文工作对应起来,可信度较高。今天就来个忙里偷闲,写一点东西与大家共同学习交流~~

1、背景介绍

bert作排序任务时,通常做法是将用户query与document拼接在一起,通过[SEP]分隔,然后利用Bert的自注意力机制抽取query与对应的相关文档的特征,通过[CLS]得到特征的向量表示,然后接一层全连接层把特征向量映射到一个分数。

根据排序目标不同,又可以分为point wise, pair wise和list wise。point wise只对一个文档作判断,判断是否与query相关,相关得分就高,不相关得分就低。很明显,point wise没有用到任何的文档比较信息。比如有两篇文档,表面看上去比较接近,但其中一个可以回答用户问题,另一个不能回答,如果用point wise的方式巡礼那,大概率两个文档的得分都比较高,模型没有抽象出与query的相关特征,所以很难区分。一种改进方法是引入比较像的负例文档,与相关文档和query构成三元组(query, d+, d-),然后使用triplet loss优化训练目标,使query与d+的距离更近,与d-的距离更远。但是这样的训练方式与我们最终的评测方法仍不一致,我们最终肯定是要从一堆文档中选择一个或几个最好的文档,所以如果能对一批文档同时计算得分然后排序而不是仅对两个作优化的话,效果肯定会更好,这就是list wise的方法,一般采用交叉熵作为损失函数优化网络参数。

背景内容就这么多,可能有点扯远了,废话不多说,直接看正文。

2、论文详解

先说结论:

1) Bert把大量的多余的attention转移到了像[CLS]、[SEP]以及句号(逗号)这样出现频率非常高的token上了,这一点可能会对模型的鲁棒性带来伤害;

2) 前几层的Bert分别抽取query与doc的特征表示,然后在后面几层做深层次的交互,以学习特征之间的相关性;

3) 抽取的doc的特征向量是query无关的,这意味着交互式可能不是必须的,分开进行特征表示也可以取得比较好的效果。

作者是在近几年很火的MS MARCO数据集上做的测试,MARCO提供召回与排序的评测数据。作者直接拿了当时评测榜上SOTA的bert rank模型,采用交互式输入,query与document拼接在一起,通过[SEP]分隔,MRR@10的值为0.334,说明模型本身比较可靠。在可靠的模型上作机理测试自然结果比较可信。

下面论文的分析结果:

1、Multi Head attention Score:

不同的点表示不同Head的attention,线是其均值。

这里有一点差异要说明一下,对比maning组的工作和这篇论文的工作(下图),可以发现两者的图十分接近,不同点在于,两者的[CLS]和[SPE] attention均值正好相反。考虑到maning组花了较大篇幅在讨论[SEP]的结果,因此个人觉得这篇论文可能有印刷错误之处,当然也有可能作者的结果确实是这样。Manning论文中的attention分布图

Anyway,不影响结论,作者想说明的是,在attention总和为1的情况下,这些特殊字符承载了大量多余的attention值。从特征角度理解,doc中往往有一大段的文本特征与query特征是不相关的,这些不相关的特征也必须有一个注意力得分,因此都转移到[CLS],[SEP]等这些相对来说意义不大的token上了。

再来看query token与doc token之间的attention分布,doc token基本上只与doc token发生关系,query token对doc token的表征基本上没有任何贡献;而doc token对query token的表征贡献在前几层都不高,在最后两层非常高,这表明两者的交互大多发生在bert的最后两层,而且是单方面的交互,只有query从doc中抽取相关性特征,而doc基本不从query中获得信息。

2、Attribution与Probing

首先利用一种Integrated Gradients的手段探测输入特征对结果预测的贡献(Attribution)。设置两个对照组,分别将query和doc用padding token替换,这样可以看出每个输入特征对query和doc的依赖信息。作者在验证集上选取了测试结果正确的例子,统计不同的输入特征对模型预测的影响,结果显示,[SEP]及句号对于预测结果基本没有影响,[CLS]在最后两层略有影响,这表明这些token中存储的大量的attention不是query与doc的相关性,是模型冗余的注意力。同样的,另一种探测手段——probing(表征探针,把每一层的不同token的向量表征通过全连接层映射到一个分数,看不同token的表征结果对排序结果的影响。)也辅助说明了这一现象。Attribution和Probing

3、 Mask

作者引入mask去掩掉一些信息,来研究query token与doc token之间的交互作用。设置mask矩阵

表示token j对token i的注意力下面会用到M矩阵作mask。

这里用到两种mask,token mask和attention mask

Token mask在计算attention时将该token掩掉,不参与softmax的计算:

Attention mask对经过softmax后attention矩阵的特定位置作mask,这样多余的注意力就会被转移到目标token上:

然后作者做了四个实验:1)把doc中的句号直接换成逗号;2)把doc中的句号作token mask;3)把doc中的句号与其他token的attention作attention mask;4)对query和doc token之间进行mask(实验结果见下图)。结论如下,1、类似于句号这种看上去毫无意义的字符,由于被模型积攒大量多余attention,因此存储了一些人类无法感知的信息,可能是语法信息,也有可能是其他信息,它使得模型对输入较为敏感,当把句号替换成逗号输入时,模型性能会下降10%,这点会给模型的鲁棒性带来危害;2、doc对query的影响在最后几层十分重要,query与doc的相关性特征极有可能在这里被提取出来作为排序的依据;相反,query对doc的表征影响很小。各种mask的实验结果

3、总结

1、 关于冗余attention的说法,我认为是可信的,并不是在这份数据集上才出现的问题,理应是模型本身的结构导致预训练时就产生了这种结果,具体为什么transformer模型结构会产生这种现象,这个很难说清楚,如果你搞清楚了,恭喜你,你也可以发paper了,现在就缺这种解释机理的人。文中推测可能是因为这种词出现的频率非常高,以至于模型认为它与每个词都有关系,所以就给它赋予了较高的权重。Anyway,这种词虽然对排序结果影响不大,但是对模型的输入却十分严苛,导致模型对于微小变化可能很不敏感也可能十分敏感。比如当你改变输入的句号时,模型性能可能会下降很多;而当你仅仅添加一个“不”,使整个句子极性反转,模型却可能无法察觉。所以说模型的“傻”是有原因的;

2、 关于query与doc之间的相关性特征,我也比较赞同,尤其是前期分别独立表示,到后几层交互融合提取相关性特征。最近有好几篇文章也是通过实验验证了这一结论,像DC-Bert,ColBert等。但是仍存在一点疑问,它们大多都是在MARCO数据集上做的,所以是数据集导致了模型的分布,还是模型本身就是这样运作的,还需要进一步的挖掘一下。如果模型本身就是这样工作的话,那么文本排序模型也可以进行一波提速了。

以上是全部分享,大家感兴趣的可以看原文,欢迎批评指正~

1、An Analysis of BERT in Document Ranking,Jingtao Zhan et al., SIGIR2020.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值