本文参考自 BERT-flow: Sentence-BERT + Normalizing flows ,部分有修改。
概述
BERT-flow 来自论文《 On the Sentence Embeddings from Pre-trained Language Models 》,中了EMNLP2020,主要是用了flow 模型校正了BRET出来的句向量的分布,从而使得计算出来的cos相似度更为合理一些。从实验结果来看,BERT-flow达到了一个新SOTA。
论文主要探讨了两个问题:
- 为何未经过微调的BERT在文本相似度计算任务上效果并不好,甚至比不上Glove?因为BERT训练出的句向量包含的语言信息太少,还是句向量种语义信息难以被直接利用。
- 如果BERT句向量已经包含了足够多的语义信息,我们如何在无监督的情况下充分利用其中的语义信息。
基于上述问题,论文首先分析了BERT句向量分布的性质,在理论上验证BERT确实提取到了足够的语义信息,只是这些信息无法通过简单的cosine直接利用,之后论文再针对这个问题提出了解决方案:BERT-flow模型,将BERT的输出空间由一个锥形可逆地映射为标准的 高斯分布空间 。
Introduction
预训练语言模型在很多NLP任务上取得了很好的效果,但是令人疑惑的是未经微调的BERT训练出来的句向量在语义相似度计算上表现很糟。分析显示,BERT训练的句向量应该能够反映句子间的语义相似度,而实验结果却与此相悖。Gao等人(2019)发现语言建模的性能因为其训练出的词嵌入空间分布特性而受到影响,作者猜测BERT训练的句向量也是因为类似的原因。
经过进一步研究,作者发现BERT句向量空间在语义上是非平滑的,甚至在空间中的某些地方并不能表征语义,这也导致了其中蕴含的语义信息不能通过简单的点积或余弦相似度直接利用。
针对以上问题,作者提出了自己的观点,即通过规范化(normalizing flows)将BERT句向量分布可逆的映射为平滑的、各向同性的高斯分布(各向同性的高斯分布(球形高斯分布)指的是各个方向方差一样的多维高斯分布)
Understanding the Sentence Embedding Space of BERT
BERT句向量一般有两种获取方式:取最好一两层embedding的平均值或直接用[CLS]对应的embedding,这里面默认指前者。
语义相似度和BERT预训练目标的联系
对一个句子\(x_{x:T}=(x_1,x_2,…,x_T)\),语言模型以自回归的方式对其联合概率进行因式分解,即
\[log p(x_{1:T})=\sum_{t=1}^Tlog p(x_t \mid c_t)\]
而BERT使用的MLM (掩码语言模型),则是:
\[p(\overline x \mid \hat x) \sum_{t=1}^Tm_t p(x_t\mid c_t)\]
其中,\(\hat x\)表示掩码后的句子,\(\overline x\)表示被掩码的单词,当\(x_t\)被掩码时\(m_t=1\),否则\(m_x=0\)(仅被预测掩码的单词)。LM和MLM都可看作是预测给定上下文\(c\)时,单词$x$的条件概率:
\[p(x\mid c)= \frac{h_c^Tw_x}{\sum_x’ h^T_c w’_x}\]
根据(Breaking the softmax bottleneck: A high-rank rnn language model.)论文有如下近似:
\[h_c^Tw_x \approx log p^*(x\mid c)+\lambda_c\\ =PMI(x,c)+logp(x)+\lambda_c\]
其中,\(PMI(x,c)=log\frac{p(x,c)}{p(x)p(c)}\)表示\(x\)和\(c\)的点互式信息,PMI是共现关系(Cooccurrence)的一种近似度量。PMI越大,共现概率越大,在某种意义上“语义”这个概念的数学表达对应的就是某种能够反映共现关系的统计量,因此统计意义上的共现也暗示了二者语义和语境上的接近。
再次考虑:\(p(x\mid c) = \frac{exp(h^T_cw_x)}{\sum_x’exp(h^T_cw_x’)}\),不难看出,语言模型的目标最大化token和上下文的共现概率。给定两个人下文$c$和$c’$,如果它们与同一个词$w$有共现关系,那幺$c$和$c’$应该也有相似的语义,因此向目标优化的过程中,$c$和$w$共现会使$h_c$各$x_w$逐渐接近,而$c$和$c’$间的距离也会逐渐被拉近。简单来说,语言模型的训练过程就是不断调整每个句子在空间中位置的过程。更高层次的上下文与上下文间的共现关系也会在预训练过程中得到推理和传播,而上下文embedding之间的隐含交互作用也会由高阶的共现关系产生。
由以上分析,可以发现BERT的训练目标与语义相似度计算的目标近似,所以BERT训练出来的句向量应该包含了语义相似度信息。
然后再考虑为什幺BERT句向量表现出来的语义相似度计算效果不佳:
我们以词向量作为探讨对象,因为词向量和句向量共享相同的embedding space,因此句向量表现出来的性质,在词向量上也是相同的。
Gao et al.(2019)和 Wang et al .(2020)指出:语言建模时,最大化以下公式,通常会产生一个各向异性的词嵌入空间。
\[p(x\mid c) = \frac{exp(h^T_cw_x)}{\sum x’exp(h^T_cw_x’)}\]
各向异性是指单词嵌入在向量空间中占据一个狭窄的圆锥体。
假设1:BERT句向量的空间分布不均匀,受词频的影响。因为词向量在训练的过程中起到连接上下文的作用,词向量分布受到了词频的影响,导致了上下文句向量包含的语义信息也受到了破坏。
假设2:BERT句向量空间是各向异性的,高频词分布较密集且整体上更靠近原点,低频词分布比较稀疏且整体分布离原点相对较远。因为低频词的词向量分布较稀疏,因此他们周围存在较多的“空洞”,所谓的”空洞”即几乎不能表征语义或者说在进行语义表征时,该部分空间没有被使用到是 语义不明确的 。
由以上发现,可以大胆猜测,BERT计算句向量相似度存在问题的原因:
- 句向量是对句子中词的词向量取平均池化得到的,是保凸性运算,而BERT词向量空间存在”空洞”,即BERT句向量空间在某种程度上说是 语义不平滑 的。BERT词向量空间存在”空洞”,当句向量落到这些”空洞”时,语义的不确定性就影响了相似度。
- 因为高词频的词和低频词的空间分布特性,导致了相似度计算时,相似度 过高或过低 的问题。在 句子级 :如果两个句子都是高频词组成,那幺它们存在共现词时,相似度可能会很高,而如果都是由低频词组成时,得到的相似度则可能会相对较低;在 单词级 :假设两个词在语义上是等价的,但是它们的词频差异导致了它们在空间上的距离偏差,这时词向量的距离就不能很好的表征语义相关度。
BERT-flow
为了解决BERT句向量分布不平滑问题,可以利用标准化流将BERT句向量分布变换为一个光滑的、各向同性的 标准高斯分布 。如下图所示:
为什幺这样的一个变换可以解决问题?首先,标准高斯分布是各向同性的,在传统的词嵌入方法中,研究表明词向量矩阵的前面几个奇异值通常和高频词高度相关,通过将嵌入分布变换到各向同性的分布上,奇异值就可以被压缩。另外,标准高斯分布是凸的,或者说是没有”空洞”,因此语义分布更为光滑。
Flow-based Generative Model
基于流的生成模型建立了从潜在空间\(\mathcal{Z}\)到观测空间的\(\mu\)的可逆转换,变换过程如下
简单理解,就是将服从高斯分布的随机变量\(z\)映射到BERT编码的\(\mu\),则反函数\(f^-1\)就能把\(\mu\)映射到高斯分布上。在训练过程中保持BERT 的参数不变,只优化标准流的参数,优化目标为最大化从高斯分布中产生BERT 表示的概率。
实验结果
首先在STS数据集上和NLI数据集上以无监督方式训练流模型,整个训练过程中预训练BERT部分的参数是不变的,实验结果相对于BERT有显着提高。
在实际应用场景下,在目标数据集上训练模型通常是更好的选择。
再跟SBERT比较,为了和SBERT对比,作者首先以SBERT的训练方式在相同的数据集上微调了BERT部分,然后再无监督地微调flow部分。这实际上等价于在SBERT后面加了个flow,区别在于BERT-flow利用了目标数据集来无监督训练flow,而SBERT并没有以任何方式利用目标数据集,所以BERT-flow 好也是好的理所当然的。实验结果如下:
语义相似度VS词汇相似度
作者进一步讨论了文本的语义相似度和词汇相似度的关系,作者将编辑距离作为文本词汇相似度的度量,然后分别计算了人类标注的语义相似度、BERT语义相似度、BERT-flow语义相似度和词汇相似度的Spearman的相关系数\(\rho\)。
我们可以发现真实的语义相似度和词汇相似度的相关性很弱(\(\rho=-24.61\)),因为我们知道一个词的变动就可能使得文本的语义完全相反(比如加入一个否定词),而BERT 计算的语义相似度和词汇相似度表现出了较强的相关性(\(\rho=-50.49\)),尤其是当编辑距离小于4的时候(green)相关性非常强,这会导致BERT可能难以区分like和dislike的语义差别。而引入flow后,可以发现上述情况有明显的改善,尤其是当编辑距离小于4的时候改善很明显, 这表明BERT-flow计算的相似度更接近于真实的语义相似度,而不是词汇相似度 。
Be First to Comment