你可能不需要BERT-flow:一个线性变换媲美BERT-flow
By 苏剑林 | 2021-01-11 | 201602位读者 |BERT-flow来自论文《On the Sentence Embeddings from Pre-trained Language Models》,中了EMNLP 2020,主要是用flow模型校正了BERT出来的句向量的分布,从而使得计算出来的cos相似度更为合理一些。由于笔者定时刷Arixv的习惯,早在它放到Arxiv时笔者就看到了它,但并没有什么兴趣,想不到前段时间小火了一把,短时间内公众号、知乎等地出现了不少的解读,相信读者们多多少少都被它刷屏了一下。
从实验结果来看,BERT-flow确实是达到了一个新SOTA,但对于这一结果,笔者的第一感觉是:不大对劲!当然,不是说结果有问题,而是根据笔者的理解,flow模型不大可能发挥关键作用。带着这个直觉,笔者做了一些分析,果不其然,笔者发现尽管BERT-flow的思路没有问题,但只要一个线性变换就可以达到相近的效果,flow模型并不是十分关键。
余弦相似度的假设 #
一般来说,我们语义相似度比较或检索,都是给每个句子算出一个句向量来,然后算它们的夹角余弦来比较或者排序。那么,我们有没有思考过这样的一个问题:余弦相似度对所输入的向量提出了什么假设呢?或者说,满足什么条件的向量用余弦相似度做比较效果会更好呢?
我们知道,两个向量$\boldsymbol{x},\boldsymbol{y}$的内积的几何意义就是“各自的模长乘以它们的夹角余弦”,所以余弦相似度就是两个向量的内积并除以各自的模长,对应的坐标计算公式是
\begin{equation}\cos(\boldsymbol{x},\boldsymbol{y}) = \frac{\sum\limits_{i=1}^d x_i y_i}{\sqrt{\sum\limits_{i=1}^d x_i^2} \sqrt{\sum\limits_{i=1}^d y_i^2}}\label{eq:cos}\end{equation}
然而,别忘了一件事情,上述等号只在“标准正交基”下成立。换句话说,向量的“夹角余弦”本身是具有鲜明的几何意义的,但上式右端只是坐标的运算,坐标依赖于所选取的坐标基,基底不同,内积对应的坐标公式就不一样,从而余弦值的坐标公式也不一样。
因此,假定BERT句向量已经包含了足够的语义(比如可以重构出原句子),那么如果它用公式$\eqref{eq:cos}$算余弦值来比较句子相似度时表现不好,那么原因可能就是此时的句向量所属的坐标系并非标准正交基。那么,我们怎么知道它具体用了哪种基底呢?原则上没法知道,但是我们可以去猜。猜测的依据是我们在给向量集合选择基底时,会尽量地平均地用好每一个基向量,从统计学的角度看,这就体现为每个分量的使用都是独立的、均匀的,如果这组基是标准正交基,那么对应的向量集应该表现出“各向同性”来。
当然,这不算是什么推导,只是一个启发式引导,它告诉我们如果一个向量的集合满足各向同性,那么我们可以认为它源于标准正交基,此时可以考虑用式$\eqref{eq:cos}$算相似度;反之,如果它并不满足各向同性,那么可以想办法让它变得更加各向同性一些,然后再用式$\eqref{eq:cos}$算相似度,而BERT-flow正是想到了“flow模型”这个办法。
flow模型的碎碎念 #
依笔者来看,flow模型真的是一种让人觉得一言难尽的模型了,关于它的碎碎念又可以写上几页纸,这里尽量长话短说。2018年中,OpenAI发布了Glow模型,效果看起来很不错,这吸引了笔者进一步去学习flow模型,甚至还去复现了一把Glow模型,相关工作记录在《细水长flow之NICE:流模型的基本概念与实现》和《细水长flow之RealNVP与Glow:流模型的传承与升华》中,如果还不了解flow模型的,欢迎去看看这两篇博客。简单来说,flow模型是一个向量变换模型,它可以将输入数据的分布转化为标准正态分布,而显然标准正态分布是各向同性的,所以BERT-flow就选择了flow模型。
那么flow模型有什么毛病吗?其实之前在文章《细水长flow之可逆ResNet:极致的暴力美学》就已经吐槽过了,这里重复一下:
(flow模型)通过比较巧妙的设计,使得模型每一层的逆变换比较简单,而且雅可比矩阵是一个三角阵,从而雅可比行列式很容易计算。这样的模型在理论上很优雅漂亮,但是有一个很严重的问题:由于必须保证逆变换简单和雅可比行列式容易计算,那么每一层的非线性变换能力都很弱。事实上像Glow这样的模型,每一层只有一半的变量被变换,所以为了保证充分的拟合能力,模型就必须堆得非常深(比如256的人脸生成,Glow模型堆了大概600个卷积层,两亿参数量),计算量非常大。
看到这里,读者就能理解为什么笔者开头说看到BERT-flow的第一感觉就是“不对劲”了。上述吐槽告诉我们,flow模型其实是很弱的;然后BERT-flow里边所用的flow模型是多大呢?是一个level=2、depth=3的Glow模型,这两个参数大家可能没什么概念,反正就是很小,以至于整个模型并没有增加什么计算量。所以,笔者的“不对劲”直觉就是:
flow模型本身很弱,BERT-flow里边使用的flow模型更弱,所以flow模型不大可能在BERT-flow中发挥至关重要的作用。反过来想,那就是也许我们可以找到更简单直接的方法达到BERT-flow的效果。
标准化协方差矩阵 #
经过探索,笔者还真找到了这样的方法,正如本文标题所说,它只是一个线性变换。
其实思想很简单,我们知道标准正态分布的均值为0、协方差矩阵为单位阵,那么我们不妨将句向量的均值变换为0、协方差矩阵变换为单位阵试试看?假设(行)向量集合为$\{\boldsymbol{x}_i\}_{i=1}^N$,我们执行变换
\begin{equation}\tilde{\boldsymbol{x}}_i = (\boldsymbol{x}_i - \boldsymbol{\mu})\boldsymbol{W}
\end{equation}
使得$\{\tilde{\boldsymbol{x}}_i\}_{i=1}^N$的均值为0、协方差矩阵为单位阵。了解传统数据挖掘的读者可能知道,这实际上就相当于传统数据挖掘中的白化操作(Whitening),所以该方法笔者称之为BERT-whitening。
均值为0很简单,让$\boldsymbol{\mu}=\frac{1}{N}\sum\limits_{i=1}^N \boldsymbol{x}_i$即可,有点难度的是$\boldsymbol{W}$矩阵的求解。将原始数据的协方差矩阵记为
\begin{equation}\boldsymbol{\Sigma}=\frac{1}{N}\sum\limits_{i=1}^N (\boldsymbol{x}_i - \boldsymbol{\mu})^{\top}(\boldsymbol{x}_i - \boldsymbol{\mu})=\left(\frac{1}{N}\sum\limits_{i=1}^N \boldsymbol{x}_i^{\top}\boldsymbol{x}_i\right) - \boldsymbol{\mu}^{\top}\boldsymbol{\mu}\end{equation}
那么不难得到变换后的数据协方差矩阵为$\tilde{\boldsymbol{\Sigma}}=\boldsymbol{W}^{\top}\boldsymbol{\Sigma}\boldsymbol{W}$,所以我们实际上要解方程
\begin{equation}\boldsymbol{W}^{\top}\boldsymbol{\Sigma}\boldsymbol{W}=\boldsymbol{I}\quad\Rightarrow \quad \boldsymbol{\Sigma} = \left(\boldsymbol{W}^{\top}\right)^{-1}\boldsymbol{W}^{-1} = \left(\boldsymbol{W}^{-1}\right)^{\top}\boldsymbol{W}^{-1}\end{equation}
我们知道协方差矩阵$\boldsymbol{\Sigma}$是一个半正定对称矩阵,且数据够多时它通常都是正定的,具有如下形式的SVD分解
\begin{equation}\boldsymbol{\Sigma} = \boldsymbol{U}\boldsymbol{\Lambda}\boldsymbol{U}^{\top}\end{equation}
其中$\boldsymbol{U}$是一个正交矩阵,而$\boldsymbol{\Lambda}$是一个对角阵,并且对角线元素都是正的,因此直接让$\boldsymbol{W}^{-1}=\sqrt{\boldsymbol{\Lambda}}\boldsymbol{U}^{\top}$就可以完成求解:
\begin{equation}\boldsymbol{W} = \boldsymbol{U}\sqrt{\boldsymbol{\Lambda}^{-1}}\end{equation}
Numpy的参考代码为:
def compute_kernel_bias(vecs):
"""计算kernel和bias
vecs.shape = [num_samples, embedding_size],
最后的变换:y = (x + bias).dot(kernel)
"""
mu = vecs.mean(axis=0, keepdims=True)
cov = np.cov(vecs.T)
u, s, vh = np.linalg.svd(cov)
W = np.dot(u, np.diag(1 / np.sqrt(s)))
return W, -mu
可能会有人问答大语料怎么办的问题。首先,上述算法只需要知道全体句向量的均值向量$\boldsymbol{\mu}\in\mathbb{R}^{d}$和协方差矩阵$\boldsymbol{\Sigma}\in\mathbb{R}^{d\times d}$($d$是词向量维度),$\boldsymbol{\mu}$是全体句向量$\boldsymbol{x}_i$的均值,均值是可以递归计算的:
\begin{equation}\boldsymbol{\mu}_{n+1} = \frac{n}{n+1}\boldsymbol{\mu}_{n} + \frac{1}{n+1}\boldsymbol{x}_{n+1}\end{equation}
同理,协方差矩阵$\boldsymbol{\Sigma}$也只不过是全体$\boldsymbol{x}_i^{\top}\boldsymbol{x}_i$的均值再减去$\boldsymbol{\mu}^{\top}\boldsymbol{\mu}$,自然也是可以递归计算的:
\begin{equation}\boldsymbol{\Sigma}_{n+1} = \frac{n}{n+1}\left(\boldsymbol{\Sigma}_{n}+\boldsymbol{\mu}_{n}^{\top}\boldsymbol{\mu}_{n}\right) + \frac{1}{n+1}\boldsymbol{x}_{n+1}^{\top}\boldsymbol{x}_{n+1}-\boldsymbol{\mu}_{n+1}^{\top}\boldsymbol{\mu}_{n+1}\end{equation}
既然可以递归,那么就意味着我们是可以在有限内存下计算$\boldsymbol{\mu},\boldsymbol{\Sigma}$的,因此对于大语料来说BERT-whitening也不成问题的。
相比于BERT-flow #
现在,我们就可以测试一下上述BERT-whitening的效果了。为了跟BERT-flow对比,笔者用bert4keras在STS-B任务上进行了测试,参考脚本在:
效果比较如下:
\begin{array}{l|c}
\hline
& \,\,\text{STS-B}\,\, \\
\hline
\text{BERT}_{\text{base}}\text{-last2avg}\,(\text{论文结果}) & 59.04 \\
\text{BERT}_{\text{base}}\text{-flow}\,(\text{target, 论文结果}) & 70.72 \\
\text{BERT}_{\text{base}}\text{-last2avg}\,(\text{个人复现}) & 59.04 \\
\text{BERT}_{\text{base}}\text{-whitening}\,(\text{target, 个人实现}) & 71.20 \\
\hline
\text{BERT}_{\text{large}}\text{-last2avg}\,(\text{论文结果}) & 59.56 \\
\text{BERT}_{\text{large}}\text{-flow}\,(\text{target, 论文结果}) & 72.26 \\
\text{BERT}_{\text{large}}\text{-last2avg}\,(\text{个人复现}) & 59.59 \\
\text{BERT}_{\text{large}}\text{-whitening}\,(\text{target, 个人实现}) & 71.98 \\
\hline
\end{array}
可以看到,简单的BERT-whitening确实能取得跟BERT-flow媲美的结果。除了STS-B之外,笔者的同事在中文业务数据内做了类似的比较,结果都表明BERT-flow带来的提升跟BERT-whitening是相近的,这表明,flow模型的引入可能没那么必要了,因为flow模型的层并非常见的层,它需要专门的实现,并且训练起来也有一定的工作量,而BERT-whitening的实现很简单,就一个线性变换,可以轻松套到任意的句向量模型中。(当然,非要辩的话,也可以说whitening是用线性变换实现的flow模型...)
注:这里顺便补充一句,BERT-flow论文里边说的last2avg,本来含义是最后两层输出的平均向量,但它的代码实际上是“第一层+最后一层”输出的平均向量,相关讨论参考ISSUE。
降维效果还能更好 #
现在我们知道BERT-whitening的变换矩阵$\boldsymbol{W} = \boldsymbol{U}\sqrt{\boldsymbol{\Lambda}^{-1}}$可以将数据的协方差矩阵变换成单位阵,如果我们不考虑$\sqrt{\boldsymbol{\Lambda}^{-1}}$,直接用$\boldsymbol{U}$来变换,结果如何呢?不难得出,如果只用$\boldsymbol{U}$来变换,那么数据的协方差矩阵就变成了$\boldsymbol{\Lambda}$,它是个对角阵。
前面说了,$\boldsymbol{U}$是一个正交矩阵,它相当于只是旋转了一下整体数据,不改变样本之间的相对位置,换句话说它是完全“保真”的变换。而$\boldsymbol{\Lambda}$的每个对角线元素,则衡量了它所在的那一维数据的变化幅度。如果它的值很小,说明这一维特征的变化很小,接近一个常数,那么就意味着原来句向量所在可能只是一个更低维的空间,我们就可以去掉这一维特征,在降维的同时还可以使得余弦相似度的结果更为合理。
事实上,SVD出来的对角矩阵$\boldsymbol{\Lambda}$已经从大到小排好序了,所以我们只需要保留前面若干维,就可以到达这个降维效果。熟悉线性代数的读者应该清楚,这个操作其实就是PCA!而代码只需要修改一行:
def compute_kernel_bias(vecs, n_components=256):
"""计算kernel和bias
vecs.shape = [num_samples, embedding_size],
最后的变换:y = (x + bias).dot(kernel)
"""
mu = vecs.mean(axis=0, keepdims=True)
cov = np.cov(vecs.T)
u, s, vh = np.linalg.svd(cov)
W = np.dot(u, np.diag(1 / np.sqrt(s)))
return W[:, :n_components], -mu
效果如下:
\begin{array}{l|c}
\hline
& \,\,\text{STS-B}\,\, \\
\hline
\text{BERT}_{\text{base}}\text{-last2avg}\,(\text{论文结果}) & 59.04 \\
\text{BERT}_{\text{base}}\text{-flow}\,(\text{target, 论文结果}) & 70.72 \\
\text{BERT}_{\text{base}}\text{-last2avg}\,(\text{个人复现}) & 59.04 \\
\text{BERT}_{\text{base}}\text{-whitening}\,(\text{target, 个人实现}) & 71.20 \\
\text{BERT}_{\text{base}}\text{-whitening-256}\,(\text{target, 个人实现}) & 71.42 \\
\hline
\text{BERT}_{\text{large}}\text{-last2avg}\,(\text{论文结果}) & 59.56 \\
\text{BERT}_{\text{large}}\text{-flow}\,(\text{target, 论文结果}) & 72.26 \\
\text{BERT}_{\text{large}}\text{-last2avg}\,(\text{个人复现}) & 59.59 \\
\text{BERT}_{\text{large}}\text{-whitening}\,(\text{target, 个人实现}) & 71.98 \\
\text{BERT}_{\text{large}}\text{-whitening-384}\,(\text{target, 个人实现}) & 72.66 \\
\hline
\end{array}
从上表可以看出,我们将base版本的768维只保留前256维,那么效果还有所提升,并且由于降维了,向量检索速度肯定也能大大加快;类似地,将large版的1024维只保留前384维,那么降维的同时也提升了效果。这个结果表明,无监督训练出来的句向量其实是“通用型”的,对于特定领域内的应用,里边有很多特征是冗余的,剔除这些冗余特征,往往能达到提速又提效的效果。
相比之下,flow模型是可逆的、不降维的,这在某些场景下是好处,但在不少场景下也是缺点,因为它无法剔除冗余维度,限制了性能,比如GAN的研究表明,通过一个256维的高斯向量就可以随机生成$1024\times 1024$的人脸图,这表明这些人脸图其实只是构成了一个相当低维的流形,但是如果用flow模型来做,因为要保证可逆性,就得强行用$1024\times 1024\times 3$那么多维的高斯向量来随机生成,计算成本大大增加,而且效果还上不去。
(注:后续实验结果,请看《无监督语义相似度哪家强?我们做了个比较全面的评测》。)
所以最终结论就是 #
所以,目前的结果就是:笔者的若干实验表明,通过简单的线性变换(BERT-whitening)操作,效果基本上能媲美BERT-flow模型,这表明往句向量模型里边引入flow模型可能并非那么关键,它对分布的校正可能仅仅是浅层的,而通过线性变换直接校正句向量的协方差矩阵就能达到相近的效果。同时,BERT-whitening还支持降维操作,能达到提速又提效的效果。
转载到请包括本文地址:https://spaces.ac.cn/archives/8069
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Jan. 11, 2021). 《你可能不需要BERT-flow:一个线性变换媲美BERT-flow 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/8069
@online{kexuefm-8069,
title={你可能不需要BERT-flow:一个线性变换媲美BERT-flow},
author={苏剑林},
year={2021},
month={Jan},
url={\url{https://spaces.ac.cn/archives/8069}},
}
January 11th, 2021
读完整个文章,感觉就一个字:“妙”啊!膜拜苏哥的分析能力。
不痛不痒的一个点:"余弦相似度的假设"段落中的“各自的模长常以它们的夹角余弦” 常以->乘以?
谢谢指出,已经修正。
January 11th, 2021
FFJORD基本上可以用任意函数了
神经常微分方程可以跳过可逆和雅克比行列式的限制,直接用MLP啥的
神经ODE借助动力系统的可逆性来保证函数的可逆,在它那里同样有逆函数和雅可比行列式的存在,只不过可以用积分的形式显式写出来。不过引入ODE_Solver的方式我个人不大喜欢~
看了一下就这个FFJORD最简单好用了,刚准备试一下用这个做bert-flow
hank你好,关于FFJORD这部分,可以详细说下么?是指用FFJORD来计算协方差?还是?
FFJORD 是一个标准化流 代替 glow,不一定有用。tensorflow_probability有官方教程,可以用任意的DNN来实现,激活函数不能用relu这种不光滑的,可以试一下tanh、gelu、swish
January 11th, 2021
为什么说“上述等号只在“标准正交基”下成立”呢?$$A * B = ||A|| * ||B|| * cos(\theta)$$,这个等式不依赖于标准正交基吧,有没有什么参考来源呢。
我用标准的记号重述一下:$\langle \boldsymbol{x},\boldsymbol{y}\rangle=\Vert \boldsymbol{x}\Vert\cdot\Vert \boldsymbol{y}\Vert\cdot\cos(\boldsymbol{x},\boldsymbol{y})$是不依赖于坐标系的,甚至可以认为它就是内积的定义。但是
$$\langle \boldsymbol{x},\boldsymbol{y}\rangle=\sum_{i=1}^d x_i y_i,\quad \Vert \boldsymbol{x}\Vert = \sqrt{\sum_{i=1}^d x_i^2},\quad \Vert \boldsymbol{y}\Vert = \sqrt{\sum_{i=1}^d y_i^2}$$只在标准正交基下成立。
你要区分什么是几何对象,什么是坐标运算。几何对象不依赖于坐标系,但是坐标运算依赖于坐标系。
以二维空间来看,假设$x=x_1e_1+x_2e_2$,$y=y_1e_1+y_2e_2$,那么 $\left \langle x,y\right \rangle= x_1y_1\left \langle e_1,e_1\right \rangle+ x_1y_2\left \langle e_1,e_2\right \rangle+x_2y_1\left \langle e_2,e_1\right \rangle+x_2y_2\left \langle e_2,e_2\right \rangle$,当且仅当,$e_1,e_2$为标准正交基时,$\left\langle e_i,e_j \right\rangle = 0 ~if~ i\neq j ~else~ 1$.此时,$\left \langle x,y \right \rangle = x_1y_1+x_2y_2$.
是这样,感谢帮忙解答。
明白了,多谢
January 11th, 2021
苏神强啊,感觉茅塞顿开
不过苏神,这里是不是笔误呢:“有点难度的是x矩阵的求解”,应该是“有点难度的是W矩阵的求解”
嗯嗯,是的,改过来了,谢谢~
emmm,苏神,我有个问题,基于compute_kernel_bias(vecs)这种线性变换的方法,那这样W的计算是和样本的vecs有关系的,那参与计算W的样本个数怎么定呢,是选用全体训练集的向量吗,还是训练集+测试集的向量呢?苏神你在与Bert-flow对比的时候是怎么选的vecs呢?
这个问题在BERT-flow中同样存在,按照BERT-flow论文的说法,它是用训练集、验证集、测试集一起训练的。我在测试BERT-whitening的时候,对比过“只用训练集”以及“训练集+测试集”两种方案,差别只有千分之几,可以忽略。
实际应用的时候,用你所能找到的数据去算就行,理论上越多越好,跟测试集的领域越一致越好。为了保证协方差矩阵的可逆性,样本个数必须大于hidden_size(比如BERT base,那么至少需要769个样本)。
想法一致,感谢苏神解答!
January 11th, 2021
苏神,请教2个问题。
(1)利用LCQMC数据,bert-base,跑了下这个demo,测试集准确率55.6%,但是STS-B的测试结果和你博客中的结果差不多,都在71%左右。中文数据和英文数据为什么差了这么多?(只改了数据集和模型)
(2)demo中主要做了两步:last2avg和线性变换。最后计算的相关系数,这个指标相比余弦相似度,对于clue_data或者glue_data,有什么更深层次的区别?
首先回答第二个问题,不过其实我搞不清楚你第二个问题想问什么,我猜测你可能是想问评测指标的问题。一般来说,像LCQMC数据,它是一个二分类问题,因此我们可以算准确率,但是STS-B里边的标签不是0/1,而是浮点数形式的打分,因此原论文算了预测相似度与人工打分之间的相关系数作为评测指标。
对于第一个问题,为此我也去测试了一下LCQMC的效果,发现结果是“训练集的相关系数:0.6565083460008003,测试集的相关系数:0.5562550311490603“,应该跟你说的一致,但是要注意这个指标是相关系数,不是准确率。如果以0.6为阈值的话,那么训练集的准确率大概是0.8068、测试集的准确率大概是0.732,测试集效果确实差点。不过要注意的是这里所说的训练集、测试集只是原始数据集的一种划分,事实上结果都是无监督得来的,并不是说训练集就参与训练了。因此训练集与测试集的差异只能说明两者的分布有所不同。
至于你问我“中文数据和英文数据为什么差了这么多”,不同的任务、不同的数据集、不同的语种,难度都有不一样,这有什么稀奇的?
感谢解答,确实是空间分布不同,后面我又做了个实验验证了。另外我补了3个实验:
(1)bert-base(不加线性变换)在LCQMC上的效果。结果:比加了线性变换的效果还好,阈值设为0.9,测试集的准确率可以达到0.679。
(2)bert-base微调LCQMC,准确率还能达到90%。
(3)bert-flow源码微调了LCQMC,阈值设为0.9,准确率0.755。
这3个实验做完,就在想中文文本向量化后,再进行线性变换是否具有工业价值?还是说线性变换这个操作只是适用于部分语义空间? 期待苏神解析下更深层次的原理分析
我建议你需要检验一下你的实验代码和结果,你说得我有点莫名其妙了。
(1)我刚才说如果以0.6为阈值的话,BERT-whitening在测试集的准确率有0.732了,然后你告诉我0.679比0.732还要好?这是什么逻辑?
(2)据我所知,有监督情况下,LCQMC的测试集准确率最多只做到0.88左右(参考 https://github.com/ymcui/Chinese-BERT-wwm ),你说你做到0.9,我是不大相信的;
(3)你说BERT-flow可以做到0.755,相比0.732倒是没差别多大,BERT-whitening以0.7为阈值在测试集还能达到0.744,问题是你说BERT-flow要用0.9的阈值似乎有点不正常...按道理,变换到接近高斯分布后,并不需要那么高的阈值才对。
个人感觉...你可能需要看一下你的实验是直接将pair作为输入,还是分别encode再计算相似度
LCQMC和stsb差太多了,stsb label是0-5,浮点数,相似度量化更精确,算出的相关系数值自然就高。LCQMC算出的低不一定能说明在中文上表征能力不好。另外我用chinese-robert-base-wwm-ext在LCQMC上跑出来是0.688
感觉反馈实验结果哈。
January 13th, 2021
气死原作者了
January 13th, 2021
苏神牛逼
January 13th, 2021
这篇是中的EMNLP啦,不是ACL2020
谢谢指出,可能弄混淆了,已修正。
January 19th, 2021
那这种方式虽然会增强句向量的表示,但会对序列标注(如NER)之类的任务产生影响吗?如果能产生影响,那么是积极的还是消极的呢?
BERT-flow和BERT-whitenning,都是在有了句向量的前提下,对句向量进行校正而已呀,跟序列标注任务没有直接关系呀。
January 19th, 2021
苏神牛批!为大佬疯狂打call!