文本匹配模型实验报告-text2vec
尽管基于BERT的模型在NLP诸多下游任务中取得了成功,直接从BERT导出的句向量表示往往被约束在一个很小的区域内,表现出很高的相似度,因而难以直接用于文本语义匹配。为解决BERT原生句子表示这种“坍缩”现象,Su[21]提出了一种排序Loss的句向量表示模型——CoSENT,
通过在目标领域的监督语料上Fine-tune,使模型生成的句子表示与下游任务的数据分布更加适配。
在句子语义匹配(STS)任务的实验结果显示,同等设置下CoSENT相比此前的Sentence-BERT大幅提升了5%。
1. 背景
句向量表示学习在自然语言处理(NLP)领域占据重要地位,许多NLP任务的成功离不开训练优质的句子表示向量。特别是在文本语义匹配(Semantic Textual Similarity)、文本向量检索(Dense Text Retrieval)等任务上,
模型通过计算两个句子编码后的Embedding在表示空间的相似度来衡量这两个句子语义上的相关程度,从而决定其匹配分数。
尽管基于BERT的模型在诸多NLP任务上取得了不错的性能(通过有监督的Fine-tune),但其自身导出的句向量(不经过Fine-tune,对所有词向量求平均)质量较低,甚至比不上Glove的结果,因而难以反映出两个句子的语义相似度[1][2][3][4]。
我们在研究的过程中进一步分析了BERT导出的句向量所具有的特性,证实了以下两点:
- BERT对所有的句子都倾向于编码到一个较小的空间区域内,这使得大多数的句子对都具有较高的相似度分数,即使是那些语义上完全无关的句子对(如下图所示),我们将此称为BERT句子表示的“坍缩(Collapse)”现象。
左:BERT表示空间的坍缩问题(横坐标是人工标注的相似度分数,纵坐标是模型预测的余弦相似度);右:经过CoSENT方法Fine-tune之后
- BERT句向量表示的坍缩和句子中的高频词有关。具体来说,当通过平均词向量的方式计算句向量时,那些高频词的词向量将会主导句向量,使之难以体现其原本的语义。当计算句向量时去除若干高频词时,坍缩现象可以在一定程度上得到缓解(如下图蓝色曲线所示)。
计算句向量时移除Top-K高频词后的性能变化
学习句向量的方案大致上可以分为无监督和有监督两大类,其中有监督句向量比较主流的方案是Facebook提出的InferSent,
而后的Sentence-BERT进一步在BERT上肯定了它的有效性。然而,不管是InferSent还是Sentence-BERT,它们都存在训练和预测不一致的问题,而如果直接优化预测目标cos值,效果往往特别差。
为了解决句向量方案这种训练与预测不一致的问题,分析了直接优化cos值无效的原因,并参考SimCSE的监督方法,分析了CoSENT的rank loss,该loss可以直接优化两个文本比较的cos值。实验显示,CoSENT在第一轮的收敛效果比Sentence-BERT高35%,最终效果上比Sentence-BERT高5%。
2. 研究现状和相关工作
2.1 句子表征学习
句子表征学习是一个很经典的任务,分为以下三类方法:
- 有监督的句子表征学习方法:早期的工作[5]发现自然语言推理(Natural Language Inference,NLI)任务对语义匹配任务有较大的帮助,训练过程常常融合了两个NLI的数据集SNLI和MNLI,文本表征使用BiLSTM编码器。InferSent模型用了siamese结构,两个句子共用一个encoder,分别得到u和v的文本向量表达,然后用3种计算方式,向量拼接([u,v]),相乘(u * v),相减(|u-v|)(为了保证对称性取绝对值),来帮助后面的全连接层提取向量间的交互信息,最后跟一个3分类的分类器。Sentence-BERT[1]借鉴了InferSent的框架,只是encoder部分替换成了BERT模型。
- 自监督的Sentence-level预训练:有监督数据标注成本高,研究者们开始寻找无监督的训练方式。BERT提出了NSP的任务,可以算作是一种自监督的句子级预训练目标。尽管之后的工作指出NSP相比于MLM其实没有太大帮助。Cross-Thought[7]、CMLM[8]是两种思想类似的预训练目标,他们把一段文章切成多个短句,然后通过相邻句子的编码去恢复当前句子中被Mask的Token。相比于MLM,额外添加了上下文其他句子的编码对Token恢复的帮助,因此更适合句子级别的训练。SLM[9]通过将原本连贯的若干个短句打乱顺序(通过改变Position Id实现),然后通过预测正确的句子顺序进行自监督预训练。
- 无监督的句子表示迁移:预训练模型现已被普遍使用,然而BERT的NSP任务得到的表示表现更不好,大多数同学也没有资源去进行自监督预训练,因此将预训练模型的表示迁移到任务才是更有效的方式。BERT-flow[2]:CMU&字节AI Lab的工作,通过在BERT之上学习一个可逆的Flow变换,可以将BERT表示空间映射到规范化的标准高斯空间,然后在高斯空间进行相似度匹配。BERT-whitening[10]:苏剑林提出对BERT表征进行白化操作(均值变为0,协方差变为单位矩阵)就能在STS上达到媲美BERT-flow的效果。SimCSE[11]:陈丹琦组在2021年4月份公开的工作,他们同样使用基于对比学习的训练框架,使用Dropout的数据增强方法,在维基百科语料上Fine-tune BERT。
2.2 Sentence-BERT模型
当前有监督的句子表征模型Sentence-BERT,表现出在句向量表示和文本匹配任务上SOTA的效果,证明了其有效性。Sentence-BERT的训练过程是把(u, v, |u - v|)拼接起来后接分类层,而预测过程,是跟普通的句向量模型一样,先计算mean pooling后的句向量,然后拿向量算cos得到相似度值。
Sentence-BERT的训练:
Sentence-BERT的预测:
Sentence-BERT模型为啥有效?
我们根据消融实验分析:
- |u - v|的作用,匹配数据集中,正样本对的文本相似度是远大于负样本对的,对于初始的BERT模型,其正样本对|u - v|差值也是小于负样本对|u - v|差值,可以看出正样本对的u - v分布是一个半径较小的球面附近,
而负样本对的u - v分布在一个较大的球面附近,也就是说,初始模型的u - v本身就有聚类倾向,我们只需要强化这种聚类倾向,使正样本对的u - v更小,负样本对的u - v更大。
BERT-flow和BERT-whitening这类BERT后处理模型,就是用无监督方法强化这种聚类倾向的方法。而监督方法的直接做法是u - v后面接一个全连接层的分类器,但交叉熵的分类器是基于内积计算的,它没法区分两个分布在不同球面的类别,所以这里加上绝对值变成|u - v|,将球面变成锥形,此时就可以用分类器来做分类了。 - u, v拼接的作用,从BERT-flow的工作可以知道,BERT句向量具备具备丰富的语义信息,但是句向量所在空间受到词频的影响,具备非平滑,各向异性的特点,这种特点导致未经过微调的“BERT+CLS”句向量模型直接应用在语义相似计算任务上的效果甚至不如简单的GloVe句向量,
而|u - v|只是向量的相对差距,无法明显改善这种各向异性。而在u, v拼接之后接全连接层,利用了全连接层的类别向量是随机初始化的,相当于给了u,v一个随机的优化方向,迫使他们各自“散开”,远离当前的各向异性状态。
3. CoSENT模型介绍
3.1 基本思路
目标:在一个类似BERT的预训练语言模型基础上,监督训练一个句向量表征模型,使模型能够在文本语义匹配任务上表现最好。
其中,可以利用的标注数据是常见的句子对形式,格式是“(句子1,句子2,标签)”,按照训练encoder的思路,两个句子经过encoder后分别得到向量u,v,由于预测阶段是计算的余弦相似度cos(u,v),所以思路是设计基于cos(u, v)的损失函数,让正样本对的相似度尽可能大、负样本对的相似度尽可能小。
如SimCSE的监督方法的损失函数:
- 输入样本是 ( x i , x i + , x i − ) (x^{i}, x^{i+}, x^{i-}) (xi,xi+,xi−),其中 x i + x^{i+} xi+ 是与 x i x^{i} xi 蕴含关系,而 x i − x^{i-} xi− 是与 x i x^{i} xi 矛盾关系
- h i h^{i} hi 是 x i x^{i} xi 的句子embedding
- N N N 是 batch size

文章介绍了BERT模型在文本语义匹配任务中的局限性,特别是其句向量表示的“坍缩”现象。为解决此问题,提出了CoSENT模型,通过排序损失函数优化句子表示,实验显示CoSENT在中英文数据集上均优于Sentence-BERT。此外,文中还探讨了不同BackBone、pooling策略、超参数选择对模型性能的影响。
最低0.47元/天 解锁文章
1212

被折叠的 条评论
为什么被折叠?



