文本表达进击:从BERT-flow到BERT-whitening、SimCSE

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第1张图片

©作者 | 舒鑫印

学校 | 东华大学

研究方向 | NLP文本表达

BERT 预训练模型问世以来,改变了很多 NLP 任务的习惯。很多 NLP 任务都会直接在 BERT 的基础上做一个 fine-tune,构建一个 baseline 模型,既快捷也使用,但 BERT 在做文本表达任务时也有一些明显的缺点。

既然有缺点,那这么卷的深度学习领域肯定会有解决方法。于是 BERT-flow、BERT-whitening 及 SimCSE 就来了。

最近刚好也在做文本表达类的任务,就把这个任务相关的文章学习总结了一下,欢迎交流学习。

46bd6da464294ad0b9c9ff3f728ad9bd.png


BERT存在的两个问题

1.1 BERT encode出来的向量表达具有各向异性

什么叫各向异性?举个例子,一些电阻原件,正接是良导体,反接是绝缘体或者电阻很大,沿不同方向差异很大。在 BERT 出来的向量中表现为,用不同的方式去衡量它,他表现出不同的语义,差别很大,也就是不能完整的衡量出 BERT 向量中全部语义信息。

在 ICLR 里有两篇文章(ICLR 2019 文章 [1]、 ICLR 2020 [2])也对这种现象进行了一个研究,表面 Transform 模型出来的向量表达(如 BERT、GPT2)就是会产生各向异性,且也给出了各向异性的表现状态,就是向量会不均匀分布,且充斥在一个狭窄的锥形空间下。

这种性质也限制了句子向量的语义表达能力,因此当采用计算 BERT encode 句子相似度,采用 cos 或 dot 是无法很好的衡量出两个句子的相似度的,因为 BERT 向量不是基于一个标准正交基得到的。

1.2 分布不均匀,低频词分布稀疏,高频词分布紧密

也就是高频词会集中在头部,离原点近,低频词会集中在尾部,离远点远高频词与低频词分布在不同的区域,那高频词与低频词之间的相识度也就没法计算了。这也反映出来的就是明显的低频词没有得到一个很好的训练。同时,高频词频次高,也会主宰句子表达。

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第2张图片

小结

以上是 BERT encode 句子向量具有的两个明显的问题:1)句子向量具有各向异性;2)向量分布不均匀,低频词稀疏,高频词紧密,且聚集于不同的分布空间。

既然问题已经定义清楚了,那这么卷的 NLP 领域肯定会有解决方法。因此 BERT-flow 还有 Bert-whitening 就出现了,这两篇文章解决的都是问题是一致的,都是想解决句子 embedding 的各向异性及向量的分布不均匀问题。

a33603af8ab90da2b27aa88eac2149e4.png


流式变换BERT-flow

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第3张图片

论文标题:

On the Sentence Embeddings from Pre-trained Language Models

收录会议:

EMNLP 2020

论文地址:

https://arxiv.org/abs/2011.05864

代码地址:

https://github.com/bohanli/BERT-flow

BERT-flow 在文中详细总结并分析了以上两个问题之后,思想也比较直接,既然 BERT 出来的 embedding 向量存在各向异性,进而也产生了分布不均匀问题,那我就采用一个变换,将 BERT encode 的句子表达转换到一个各向同性且分布较均匀的空间。而标准的高斯分布刚好是一个各向同性的空间,且是一个凸函数,语义分布也更平滑均匀。

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第4张图片

于是,变换就来了。BERT-flow 采用一种流式可逆变换,记为:

d8b6f77d78da51776e89849cf6883062.png

其中 u 就是 BERT 空间向量(observe space),z 即是高斯空间向量(latent space), 则是一个可逆变换,这个变换也是模型需要学出来的。

根据变元定理,观测空间的 u 的概率密度函数为:

58fc9f524089be97d184c5836cd99fb8.png

那模型优化目标的也就是最大化这个 u 的边际概率。

9942a11f0ffc148972d66c0c58d58c4a.png

最后,通过无监督的方式 maximize 这个优化目标,得到可逆的映射变换 f,这其实就是在 Bert pre-train model 后接了一个 flow 变换的模型,让其继续 pre-train,学出 flow 变换,从而完成向量空间的 transform。

小结

BERT-flow 完整分析了BERT 句子 embedding 里存在的向量各向异性及分布不均匀问题,并列出了完整的实验结果佐证了这一现象。同时提出了一种 flow 变换,将各向异性的 BERT 向量转换到一个标准的高斯分布空间,从而有效的提升了无监督领域的文本表达效果(另外 BERT-flow 还提了个小技巧,采用 BERT 输出的 first-layer+last-layer 平均会更好,这点原文 avg-last-2layer 可能有误,GitHub issue [3] 有讨论)。

虽然这种 BERT-flow 方法站在现在的角度看还是复杂了些,但 BERT-flow 这篇文章完整的梳理出了问题脉络,并对这些问题通过实验做出了完整的剖析与实验佐证,读起来很顺畅,推荐大家看语义向量表达的问题时可以从这篇看起。

6c9f631f3dba32b647f0d78c39b747ef.png


带白化处理的BERT-whitening

在解决问题的路上,方法总是会朝着简单的方向进行迭代更新。于是 BERT-whitening 带着更简单的变换方法来了。

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第5张图片

论文标题:

Whitening Sentence Representations for Better Semantics and Faster Retrieval

论文地址:

https://arxiv.org/abs/2103.15316

代码地址:

https://github.com/bojone/BERT-whitening

既然是要做一个向量的转换,那有没有简单一点的方法,直接校正句向量?BERT-whitening 提出通过一个白化的操作直接校正局向量的协方差矩阵,简单粗暴,也达到了与 BERT-flow 差不多的效果。

方法很简单,思路也很直接,就是将现存的 BERT 向量空间分布记 ,其中均值为 ,协方差 ,进行白化操作,转换成 , 为单位阵的分布,也就是进行如下表达转换:

4132d1d7cf6966987dca7d934a5f1164.png

所以问题就变成计算 BERT 向量分布的均值 以及协方差 。

假设向量集合为 ,怎么求解均值 以及协方差 ,下面图是作者苏神的博客你可能不需要 BERT-flow:一个线性变换媲美 BERT-flow [4] 的推导,基础的数学知识就能看懂,可以去博客看完整推导,很详细,这里就不做详细阐述了。

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第6张图片

小结

BERT-whitening 确实在 BERT-flow的基础上,更简单更直接的对原 BERT 向量进行空间分布转换,也达到 BERT-flow 差不多甚至更好的效果,加上作者的完整推导分享,思路也很清晰易懂,同时在 SVD 矩阵分解那一步,可以针对对角阵 Λ 进行一个降维操作,只保留特征值大的前 n 个维度,剔除冗余维度,这无疑在工程上应用节省了内存,也提升了性能。

3521156ed47a939beebd15a5f2c67d9e.png


对比学习的SimCSE

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第7张图片

论文标题:

SimCSE: Simple Contrastive Learning of Sentence Embeddings

收录会议:

EMNLP 2021

论文地址:

https://arxiv.org/abs/2104.08821

代码地址:

https://github.com/princeton-nlp/simcse

SimCSE 是陈丹琦组的文章,陈丹琦组的文章总是会带来的不一样的惊喜。这篇文章有点重剑无锋,大巧不工的意思,采用简单的 dropout 方法+对比学习在文本表达上就达到 SOTA 了。

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第8张图片

SimCSE 分为无监督与有监督版本,但基本思想上没有什么区别,只是在正负样本数据构造上不同。

无监督版本上,就是将一个句子输入 encoder 两次,由于 bert encoder 是一个随机 dropout mask encoder,因此输入一个句子两次会得到两个不同的  embedding,产生的这两个 embedding 作为训练中相互对比的正样本,同一个 batch 中其他句子产生的 embedding 则作为负样本,以此来构造一个对比学习的无监督训练。(所以这里的 batch 数量应当尽可能的大一些,防止 batch 内出现与自身文本是相同语义的样本出现作为负样本,减少在 loss 中这种相同语义样本占的比重)。

思路很简单,loss 也容易理解,就是常规对比学习的 loss 设计,max(正样本间的距离),min(负样本间的距离), 加了一个温度因子 t 进行平滑调节。

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第9张图片

有监督版本上,因为有监督数据了就不是重复输入一个文本两次,将自身文本以及正样本 entailment 以及负样本 contradiction 分别输入 encoder,得到对应 embedding,entailment 样本即为正样本,同一 batch 内其他样本的 embedding 作为负样本进行对比学习,loss 上与无监督是一致的,只是数据构造上的区别。

另外,文中也分析了这种方式为什么有效?

在理解 SimCSE 有效之前,首先得定义一下 alignment 和 uniformity 这两个指标,这两指标 Wang and Isola(2020)提出 [5],用来评估对比学习中 embedding 的效果,都是越小越好。

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第10张图片

Alignment:评估的是相似的样本向量间的一致性,也就是说相似样本间有相似的feature,差距应该小。

c0cc065d5c80971a1dbf73988ad8128f.png

uniformity:评估的是向量整体分布的均匀程度,也就是说向量应该均匀分布在球面上,不应该出现 BERT 那种分布不均(高频词分布集中紧凑,低频词稀疏)。

3a250157b09b8a94d27b87ba065b661b.png

文章中设置不同的 dropout 率做了八组实验,其中 fixed 0.1 是使用同样的 dropout mask 做两次(也就是自己与正样本得到一样的 embedding),这里发现 dropout=0、dropout=fix 0.1 差别很大,按道理来说,自身与自身产生的正样本 与 是一样的 embedding,怎么会差别这么大?

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第11张图片

文中对于上述情况,做了一个结果反推现象上的分析,画出了训练过程迭代中 Alignment、uniformity 指标分析图,发现随着迭代进行 4 个方法都可以减少 uniform,也就是分布都会走向均匀分布。但 fixed0.1 和 no dropout 优化不动 alignment,反而增大了。

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第12张图片

有些遗憾的是,文章中并没有看到对 dropout=0、dropout=fix 0.1 反差很大的这种情况做出由因及果的理论上的分析,感觉只看到了结果,没有找到合理的解释原因少了点什么,可能是 dropout=0.1 破坏了原有句子的基础 embedding 语义信息,使得效果还比不上 dropout=0。

小结

SimCSE 方法上大道至简,在解决像 BERT 这种 Transformer结构出来的 embedding 的各向异性及分布不均匀问题上,提出了一个更简单易行的方案,在有监督及无监督任务上都达到了 SOTA,证明了通过 dropout 构造的样本进行对比学习有效性可行性。

outside_default.png

参考文献

outside_default.png

[1] https://arxiv.org/abs/1907.12009

[2] https://openreview.net/forum?id=ByxY8CNtvr

[3] https://github.com/bohanli/BERT-flow/issues/11

[4] https://spaces.ac.cn/archives/8069

[5] http://proceedings.mlr.press/v119/wang20k/wang20k.pdf

特别鸣谢

感谢 TCCI 天桥脑科学研究院对于 PaperWeekly 的支持。TCCI 关注大脑探知、大脑功能和大脑健康。

更多阅读

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第13张图片

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第14张图片

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第15张图片

653c7ae5754709cbf20d408ad1928005.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

 投稿通道:

• 投稿邮箱:[email protected] 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

文本表达进击:从BERT-flow到BERT-whitening、SimCSE_第16张图片

△长按添加PaperWeekly小编

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

6ab4713fe3d93db1fd2039a4fc88deba.png

你可能感兴趣的:(机器学习,人工智能,深度学习,算法,计算机视觉)