BERT 预训练模型问世以来,改变了很多 NLP 任务的习惯。很多 NLP 任务都会直接在 BERT 的基础上做一个 fine-tune,构建一个 baseline 模型,既快捷也使用,但 BERT 在做文本表达任务时也有一些明显的缺点。
既然有缺点,那这么卷的深度学习领域肯定会有解决方法。于是 BERT-flow、BERT-whitening 及 SimCSE 就来了。
最近刚好也在做文本表达类的任务,就把这个任务相关的文章学习总结了一下,欢迎交流学习。
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 encode 句子向量具有的两个明显的问题:1)句子向量具有各向异性;2)向量分布不均匀,低频词稀疏,高频词紧密,且聚集于不同的分布空间。
既然问题已经定义清楚了,那这么卷的 NLP 领域肯定会有解决方法。因此 BERT-flow 还有 Bert-whitening 就出现了,这两篇文章解决的都是问题是一致的,都是想解决句子 embedding 的各向异性及向量的分布不均匀问题。
流式变换BERT-flow
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 采用一种流式可逆变换,记为:
其中 u 就是 BERT 空间向量(observe space),z 即是高斯空间向量(latent space),
则是一个可逆变换,这个变换也是模型需要学出来的。
那模型优化目标的也就是最大化这个 u 的边际概率。
最后,通过无监督的方式 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 这篇文章完整的梳理出了问题脉络,并对这些问题通过实验做出了完整的剖析与实验佐证,读起来很顺畅,推荐大家看语义向量表达的问题时可以从这篇看起。
带白化处理的BERT-whitening
在解决问题的路上,方法总是会朝着简单的方向进行迭代更新。于是 BERT-whitening 带着更简单的变换方法来了。
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 向量空间分布记
,其中均值为
,协方差
,进行白化操作,转换成
,
为单位阵的分布,也就是进行如下表达转换:
所以问题就变成计算 BERT 向量分布的均值
以及协方差
。
假设向量集合为
,怎么求解均值
以及协方差
,下面图是作者苏神的博客你可能不需要 BERT-flow:一个线性变换媲美 BERT-flow
[4]
的推导,基础的数学知识就能看懂,可以去博客看完整推导,很详细,这里就不做详细阐述了。
BERT-whitening 确实在 BERT-flow的基础上,更简单更直接的对原 BERT 向量进行空间分布转换,也达到 BERT-flow 差不多甚至更好的效果,加上作者的完整推导分享,思路也很清晰易懂,同时在 SVD 矩阵分解那一步,可以针对对角阵 Λ 进行一个降维操作,只保留特征值大的前 n 个维度,剔除冗余维度,这无疑在工程上应用节省了内存,也提升了性能。
对比学习的SimCSE
SimCSE: Simple Contrastive Learning of Sentence Embeddings
EMNLP 2021
https://arxiv.org/abs/2104.08821
https://github.com/princeton-nlp/simcse
SimCSE 是陈丹琦组的文章,陈丹琦组的文章总是会带来的不一样的惊喜。这篇文章有点重剑无锋,大巧不工的意思,采用简单的 dropout 方法+对比学习在文本表达上就达到 SOTA 了。
SimCSE 分为无监督与有监督版本,但基本思想上没有什么区别,只是在正负样本数据构造上不同。
无监督版本
上,就是将一个句子输入 encoder 两次,由于 bert encoder 是一个随机 dropout mask encoder,因此输入一个句子两次会得到两个不同的 embedding,产生的这两个 embedding 作为训练中相互对比的正样本,同一个 batch 中其他句子产生的 embedding 则作为负样本,以此来构造一个对比学习的无监督训练。(所以这里的 batch 数量应当尽可能的大一些,防止 batch 内出现与自身文本是相同语义的样本出现作为负样本,减少在 loss 中这种相同语义样本占的比重)。
思路很简单,loss 也容易理解,就是常规对比学习的 loss 设计,max(正样本间的距离),min(负样本间的距离), 加了一个温度因子 t 进行平滑调节。
有监督版本
上,因为有监督数据了就不是重复输入一个文本两次,将自身文本以及正样本 entailment 以及负样本 contradiction 分别输入 encoder,得到对应 embedding,entailment 样本即为正样本,同一 batch 内其他样本的 embedding 作为负样本进行对比学习,loss 上与无监督是一致的,只是数据构造上的区别。
在理解 SimCSE 有效之前,首先得定义一下 alignment 和 uniformity 这两个指标,这两指标 Wang and Isola(2020)提出
[5]
,用来评估对比学习中 embedding 的效果,都是越小越好。
Alignment:
评估的是相似的样本向量间的一致性,也就是说相似样本间有相似的feature,差距应该小。
uniformity:
评估的是向量整体分布的均匀程度,也就是说向量应该均匀分布在球面上,不应该出现 BERT 那种分布不均(高频词分布集中紧凑,低频词稀疏)。
文章中设置不同的 dropout 率做了八组实验,其中 fixed 0.1 是使用同样的 dropout mask 做两次(也就是自己与正样本得到一样的 embedding),这里发现 dropout=0、dropout=fix 0.1 差别很大,按道理来说,自身与自身产生的正样本
与
是一样的 embedding,怎么会差别这么大?
文中对于上述情况,做了一个结果反推现象上的分析,画出了训练过程迭代中 Alignment、uniformity 指标分析图,发现随着迭代进行 4 个方法都可以减少 uniform,也就是分布都会走向均匀分布。但 fixed0.1 和 no dropout 优化不动 alignment,反而增大了。
有些遗憾的是,文章中并没有看到对 dropout=0、dropout=fix 0.1 反差很大的这种情况做出由因及果的理论上的分析,感觉只看到了结果,没有找到合理的解释原因少了点什么,可能是 dropout=0.1 破坏了原有句子的基础 embedding 语义信息,使得效果还比不上 dropout=0。
SimCSE 方法上大道至简,在解决像 BERT 这种 Transformer结构出来的 embedding 的各向异性及分布不均匀问题上,提出了一个更简单易行的方案,在有监督及无监督任务上都达到了 SOTA,证明了通过 dropout 构造的样本进行对比学习有效性可行性。
[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 关注大脑探知、大脑功能和大脑健康。
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:hr@paperweekly.site
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧