无监督语义相似度哪家强?我们做了个比较全面的评测
By 苏剑林 | 2021-04-11 | 145603位读者 |一月份的时候,笔者写了《你可能不需要BERT-flow:一个线性变换媲美BERT-flow》,指出无监督语义相似度的SOTA模型BERT-flow其实可以通过一个简单的线性变换(白化操作,BERT-whitening)达到。随后,我们进一步完善了实验结果,写成了论文《Whitening Sentence Representations for Better Semantics and Faster Retrieval》。这篇博客将对这篇论文的内容做一个基本的梳理,并在5个中文语义相似度任务上进行了补充评测,包含了600多个实验结果。
方法概要 #
BERT-whitening的思路很简单,就是在得到每个句子的句向量$\{x_i\}_{i=1}^N$后,对这些矩阵进行一个白化(也就是PCA),使得每个维度的均值为0、协方差矩阵为单位阵,然后保留$k$个主成分,流程如下图:
当然,理论上来说,我们也可以将BERT-whitening看成是BERT-flow的最简单实现,而之前的博客中已经指出,就是这样简单的实现足以媲美一般的BERT-flow模型,有时候甚至更好。同时,BERT-whitening在变换的同时还对特征重要性进行了排序,因此我们可以对句向量进行降维来提高检索速度。实验结果显示,在多数任务中,降维不但不会带来效果上的下降,反而会带来效果上的提升。
英文任务 #
首先介绍BERT-whitening在英文任务上的测试结果,主要包含三个图表,基本上实现了与BERT-flow进行了严格对照。
纯无监督 #
首先,第一个表格介绍的是在完全无监督的情况下,直接使用预训练的BERT抽取句向量的结果。在BERT-flow的论文中,我们已经确实,如果不加任何后处理手段,那么基于BERT抽取句向量的最好Pooling方法是BERT的第一层与最后一层的所有token向量的平均,即fisrt-larst-avg(BERT-flow论文误认为是最后两层的平均,记为了last2avg,实际上是第一层与最后一层)。所以后面的结果,都是以fisrt-larst-avg为基准来加flow或者whitening。
NLI监督 #
然后,第二个表格介绍的是基于NLI数据集微调后的Sentence-BERT模型(SBERT)抽取句向量的结果,在此情况下同样是fisrt-larst-avg最好,所以flow和whitening的基准都是fisrt-larst-avg出来的句向量。NLI数据集是自然语言推理数据集,跟语义相似度类似但不等价,它可以作为语义相似度任务的有监督预训练,但由于没有直接用到语义相似度数据,因此相对于语义相似度任务来说依然属于无监督的。
维度-效果 #
在这两个表格中,加粗的是最优结果;绿色箭头$\color{green}{\uparrow}$意味着BERT-whitening的结果优于同样情况下的BERT-flow模型,而红色箭头$\color{red}{\downarrow}$则相反,也就是说,绿色箭头越多意味着BERT-whitening的效果也好;whitening后面接的数字256、384指的是降维后保留的维度。所以,从这两个表格可以看出,BERT-whitening总体而言优于BERT-flow,实现了大多数任务的SOTA,并且多数情况下,降维还能进一步提升效果。
为了进一步确认降维所带来的效果,我们绘制了如下的保留维度与效果关系图:
上图演示了各个模型在各个任务上经过whitening之后,保留的维度与评测指标的变化曲线。可以看到,对于每个任务来说,最优效果都不是在全部维度取到,这意味着降维都可以带来一定的效果提升,并且可以看到,不少任务甚至可以降维到原来的1/8甚至更多而保持效果不减甚至增加,这充分显示了BERT-whitening的工程价值,因为降维意味着我们能大大加快检索速度。
中文任务 #
秉承着“没有在中文测试过的模型是没有灵魂的”的理念,笔者整理了一些中文语义相似度数据集,结合不同的中文预训练模型、Pooling方式以及whitening与否进行了评测,结果汇总于此,供大家对比。
评测情况 #
本次评测涉及到11个模型、5个数据集、4种Pooling方式,每种组合比较“不whitening”、“whitening”、“whitening且降维”3种后处理方式的效果,所以共有将近
$$11\times 5\times 4\times 3 = 660$$
个实验结果,算是比较全面了。说“将近”是因为某些Pooling方式在某些模型不可用,所以离660还差一点。由于BERT-flow计算成本明显大于BERT-whitening,因此我们没有复现对比BERT-flow的效果,但是从英文任务上可以看出,BERT-whitening和BERT-flow的效果通常是接近的,并且BERT-whitening通常还优于BERT-flow,因为whitening的效果应该是有代表性的了。
评测指标跟前述英文任务一样,都是用spearman相关系数,这是一个类似AUC的排序指标,只依赖于预测分数的顺序,并且不依赖于阈值,所以用来评测效果是比较适合的。之所以没有用大家更熟悉的准确率(accuracy)指标,一是因为准确率依赖于具体的阈值,二是因为STS-B数据集的标签是1~5的数字,并不是0/1标签,要算准确率也无从算起,因此统一用spearman相关系数了。如果读者非要从准确率角度理解,那么大概可以认为“accuracy ≈ 0.5 + spearman / 2”吧。
其中11个模型如下:
BERT:Google开源的中文BERT base版,链接;
RoBERTa:哈工大开源的roberta_wwm_ext的base版,链接;
NEZHA:华为开源的相对位置编码的BERT base版(wwm),链接;
WoBERT:以词为单位的BERT,这里用的是Plus版,链接;
RoFormer:加入了新型位置编码的BERT,链接;
BERTlarge:腾讯UER开源的BERT large版本,链接;
RoBERTalarge:哈工大开源的roberta_wwm_ext的large版,链接;
NEZHA-large:华为开源的相对位置编码的BERT large版(wwm),链接;
SimBERT:经过相似句训练的BERT base版,链接;
SimBERTsmall:经过相似句训练的BERT small版,链接;
SimBERTtiny:经过相似句训练的BERT tiny版,链接。
5个任务如下:
ATEC:ATEC语义相似度学习赛数据集,金融领域客服场景,原比赛链接已经失效,当前数据来自链接;
BQ:哈工大BQ Corpus数据集,银行金融领域的问题匹配,详情可看链接;
LCQMC:哈工大LCQMC数据集,覆盖多个领域的问题匹配,详情可看链接;
PAWSX:谷歌发布的数据集(链接),数据集里包含了多语种的释义对和非释义对,即识别一对句子是否具有相同的释义(含义),特点是具有高度重叠词汇,对无监督方法来说算是比较难的任务,这里只保留了中文部分;
STS-B:计算两句话之间的相关性,原数据集为英文版,通过翻译加部分人工修正的方法生成中文版,来源链接。
4种Pooling方式如下:
P1:把encoder的最后一层的[CLS]向量拿出来;
P2:把Pooler(BERT用来做NSP任务)对应的向量拿出来,跟P1的区别是多了个线性变换;
P3:把encoder的最后一层的所有向量取平均;
P4:把encoder的第一层与最后一层的所有向量取平均。
结果汇总 #
所有的实验结果汇总在如下三个表格中。其中表格中的每个元素是$a / b / c$的形式,代表该任务在该模型下“不加whitening”的得分为$a$、“加whitening”的得分为$b$、“加whitening并适当降维”的得分为$c$;如果$b\geq a$,那么$b$显示为绿色,否则显示为红色;如果$c\geq a$,那么$c$显示为绿色,否则显示为红色;所谓“适当降维”,对于base版本的模型是降到256维,对于large版本的模型是降到384维,对于tiny和small版则降到128维。
第一个表格是11个模型中的6个base版模型的对比,其中WoBERT和RoFormer没有NSP任务,所以没有P2的权重,测不了P2:
$$\small{\begin{array}{l|ccccc}
\hline
& \text{ATEC} & \text{BQ} & \text{LCQMC} & \text{PAWSX} & \text{STS-B} \\
\hline
\text{BERT-P1} & 16.59 / \color{green}{20.61} / \color{green}{25.58} & 29.35 / \color{red}{25.76} / \color{green}{34.66} & 41.71 / \color{green}{48.92} / \color{green}{49.18} & 15.15 / \color{green}{17.03} / \color{green}{15.98} & 34.65 / \color{green}{61.19} / \color{green}{60.07} \\
\text{BERT-P2} & 9.46 / \color{green}{22.16} / \color{green}{25.13} & 16.97 / \color{green}{18.97} / \color{green}{33.99} & 28.42 / \color{green}{49.61} / \color{green}{49.59} & 13.93 / \color{green}{16.08} / \color{green}{16.19} & 21.66 / \color{green}{60.75} / \color{green}{60.13} \\
\text{BERT-P3} & 20.79 / \color{red}{18.27} / \color{green}{28.98} & 33.08 / \color{red}{22.58} / \color{green}{38.62} & 59.22 / \color{green}{60.12} / \color{green}{62.00} & 16.68 / \color{green}{18.37} / \color{green}{17.38} & 57.48 / \color{green}{63.97} / \color{green}{68.27} \\
\text{BERT-P4} & 24.51 / \color{green}{27.00} / \color{green}{27.91} & 38.81 / \color{red}{32.29} / \color{red}{37.67} & 64.75 / \color{green}{64.75} / \color{green}{65.65} & 15.12 / \color{green}{17.80} / \color{green}{15.34} & 61.66 / \color{green}{69.45} / \color{green}{69.37} \\
\hline
\text{RoBERTa-P1} & 24.61 / \color{green}{29.59} / \color{green}{29.49} & 40.54 / \color{red}{28.95} / \color{red}{38.35} & 70.55 / \color{green}{70.82} / \color{red}{68.84} & 16.23 / \color{green}{17.99} / \color{green}{16.87} & 66.91 / \color{green}{69.19} / \color{green}{71.16} \\
\text{RoBERTa-P2} & 20.61 / \color{green}{28.91} / \color{green}{29.49} & 31.14 / \color{red}{27.48} / \color{green}{38.46} & 65.43 / \color{green}{70.62} / \color{green}{68.76} & 15.71 / \color{green}{17.30} / \color{green}{17.01} & 59.50 / \color{green}{70.77} / \color{green}{71.16} \\
\text{RoBERTa-P3} & 26.94 / \color{green}{29.94} / \color{green}{30.57} & 40.71 / \color{red}{30.95} / \color{red}{39.89} & 66.80 / \color{green}{68.00} / \color{green}{67.30} & 16.08 / \color{green}{19.01} / \color{green}{16.79} & 61.67 / \color{green}{66.19} / \color{green}{69.36} \\
\text{RoBERTa-P4} & 27.94 / \color{green}{28.33} / \color{green}{29.06} & 43.09 / \color{red}{33.49} / \color{red}{38.83} & 68.43 / \color{red}{67.86} / \color{red}{68.36} & 15.02 / \color{green}{17.91} / \color{green}{15.26} & 64.09 / \color{green}{69.74} / \color{green}{70.09} \\
\hline
\text{NEZHA-P1} & 17.39 / \color{green}{18.83} / \color{green}{24.97} & 29.63 / \color{red}{21.94} / \color{green}{33.65} & 40.60 / \color{green}{50.52} / \color{green}{46.57} & 14.90 / \color{green}{18.15} / \color{green}{16.69} & 35.84 / \color{green}{60.84} / \color{green}{58.98} \\
\text{NEZHA-P2} & 10.96 / \color{green}{23.08} / \color{green}{24.21} & 17.38 / \color{green}{28.81} / \color{green}{32.21} & 22.66 / \color{green}{49.12} / \color{green}{47.03} & 13.45 / \color{green}{18.05} / \color{green}{17.15} & 21.16 / \color{green}{60.11} / \color{green}{58.68} \\
\text{NEZHA-P3} & 23.70 / \color{red}{21.93} / \color{green}{28.65} & 35.44 / \color{red}{22.44} / \color{green}{37.95} & 60.94 / \color{green}{62.10} / \color{green}{62.50} & 18.35 / \color{green}{21.72} / \color{green}{18.78} & 60.35 / \color{green}{68.57} / \color{green}{68.97} \\
\text{NEZHA-P4} & 27.72 / \color{red}{25.31} / \color{red}{26.18} & 44.18 / \color{red}{31.47} / \color{red}{36.02} & 65.16 / \color{green}{66.68} / \color{green}{66.54} & 13.98 / \color{green}{16.66} / \color{green}{14.02} & 61.94 / \color{green}{69.55} / \color{green}{69.14} \\
\hline
\text{WoBERT-P1} & 23.88 / \color{red}{22.45} / \color{green}{27.88} & 43.08 / \color{red}{32.52} / \color{red}{37.54} & 68.56 / \color{red}{67.89} / \color{red}{65.80} & 18.15 / \color{green}{19.92} / \color{green}{18.73} & 64.12 / \color{green}{66.53} / \color{green}{69.03} \\
\text{WoBERT-P2} & \text{-} & \text{-} & \text{-} & \text{-} & \text{-} \\
\text{WoBERT-P3} & 24.62 / \color{red}{22.74} / \color{green}{29.01} & 40.64 / \color{red}{28.12} / \color{red}{38.82} & 64.89 / \color{green}{65.22} / \color{green}{65.14} & 16.83 / \color{green}{20.56} / \color{green}{17.87} & 59.43 / \color{green}{66.57} / \color{green}{67.76} \\
\text{WoBERT-P4} & 25.97 / \color{green}{27.24} / \color{green}{28.38} & 42.37 / \color{red}{32.34} / \color{red}{38.06} & 66.53 / \color{red}{65.62} / \color{red}{66.36} & 15.54 / \color{green}{18.85} / \color{green}{15.98} & 61.37 / \color{green}{68.11} / \color{green}{68.42} \\
\hline
\text{RoFormer-P1} & 24.29 / \color{green}{26.04} / \color{green}{28.20} & 41.91 / \color{red}{28.13} / \color{red}{38.21} & 64.87 / \color{red}{60.92} / \color{red}{60.83} & 20.15 / \color{green}{23.08} / \color{green}{21.30} & 59.91 / \color{green}{66.96} / \color{green}{66.86} \\
\text{RoFormer-P2} & \text{-} & \text{-} & \text{-} & \text{-} & \text{-} \\
\text{RoFormer-P3} & 24.09 / \color{green}{28.51} / \color{green}{29.37} & 39.09 / \color{red}{34.92} / \color{red}{39.05} & 63.55 / \color{green}{63.85} / \color{green}{63.58} & 16.53 / \color{green}{18.43} / \color{green}{17.52} & 58.98 / \color{red}{55.30} / \color{green}{67.32} \\
\text{RoFormer-P4} & 25.92 / \color{green}{27.38} / \color{green}{28.37} & 41.75 / \color{red}{32.36} / \color{red}{38.05} & 66.18 / \color{red}{65.45} / \color{red}{65.63} & 15.30 / \color{green}{18.36} / \color{green}{15.69} & 61.40 / \color{green}{68.02} / \color{green}{68.27} \\
\hline
\text{SimBERT-P1} & 38.50 / \color{red}{23.64} / \color{red}{30.79} & 48.54 / \color{red}{31.78} / \color{red}{40.01} & 76.23 / \color{red}{75.05} / \color{red}{74.50} & 15.10 / \color{green}{18.49} / \color{green}{15.64} & 74.14 / \color{red}{73.37} / \color{green}{75.29} \\
\text{SimBERT-P2} & 38.93 / \color{red}{27.06} / \color{red}{30.79} & 49.93 / \color{red}{35.38} / \color{red}{40.14} & 75.56 / \color{red}{73.45} / \color{red}{74.39} & 14.52 / \color{green}{18.51} / \color{green}{15.74} & 73.18 / \color{green}{73.43} / \color{green}{75.12} \\
\text{SimBERT-P3} & 36.50 / \color{red}{31.32} / \color{red}{31.24} & 45.78 / \color{red}{29.17} / \color{red}{40.98} & 74.42 / \color{red}{73.79} / \color{red}{73.43} & 15.33 / \color{green}{18.39} / \color{green}{15.87} & 67.31 / \color{green}{70.70} / \color{green}{72.00} \\
\text{SimBERT-P4} & 33.53 / \color{red}{29.04} / \color{red}{28.78} & 45.28 / \color{red}{34.70} / \color{red}{39.00} & 73.20 / \color{red}{71.22} / \color{red}{72.09} & 14.16 / \color{green}{17.32} / \color{green}{14.39} & 66.98 / \color{green}{70.55} / \color{green}{71.43} \\
\hline
\end{array}}$$
第二个表格则是3个large版模型的对比:
$$\small{\begin{array}{l|ccccc}
\hline
& \text{ATEC} & \text{BQ} & \text{LCQMC} & \text{PAWSX} & \text{STS-B} \\
\hline
\text{BERT}_{\text{large}}\text{-P1} & 13.15 / \color{green}{22.42} / \color{green}{24.32} & 19.81 / \color{red}{17.61} / \color{green}{31.09} & 23.45 / \color{green}{44.31} / \color{green}{41.32} & 16.88 / \color{green}{19.37} / \color{green}{19.87} & 25.93 / \color{green}{52.70} / \color{green}{56.74} \\
\text{BERT}_{\text{large}}\text{-P2} & 8.16 / \color{green}{16.57} / \color{green}{24.34} & 9.43 / \color{green}{18.23} / \color{green}{30.91} & 16.66 / \color{green}{39.50} / \color{green}{41.40} & 14.72 / \color{green}{20.00} / \color{green}{19.92} & 15.82 / \color{green}{56.79} / \color{green}{56.73} \\
\text{BERT}_{\text{large}}\text{-P3} & 24.31 / \color{red}{18.25} / \color{green}{30.24} & 35.87 / \color{red}{32.56} / \color{green}{37.51} & 59.29 / \color{green}{65.06} / \color{green}{63.78} & 16.94 / \color{green}{20.01} / \color{green}{18.62} & 60.22 / \color{green}{68.07} / \color{green}{68.87} \\
\text{BERT}_{\text{large}}\text{-P4} & 25.62 / \color{green}{27.64} / \color{green}{28.15} & 38.45 / \color{red}{31.30} / \color{red}{36.47} & 65.43 / \color{green}{66.54} / \color{green}{67.02} & 15.33 / \color{green}{19.06} / \color{green}{15.95} & 62.02 / \color{green}{69.74} / \color{green}{69.99} \\
\hline
\text{RoBERTa}_{\text{large}}\text{-P1} & 19.32 / \color{red}{15.90} / \color{green}{29.32} & 34.21 / \color{red}{23.16} / \color{green}{37.11} & 64.89 / \color{green}{67.05} / \color{green}{66.49} & 17.78 / \color{green}{20.66} / \color{green}{19.73} & 60.16 / \color{green}{69.46} / \color{green}{70.44} \\
\text{RoBERTa}_{\text{large}}\text{-P2} & 19.32 / \color{green}{22.16} / \color{green}{29.23} & 34.33 / \color{red}{33.22} / \color{green}{37.10} & 65.00 / \color{green}{67.12} / \color{green}{66.50} & 17.77 / \color{green}{18.90} / \color{green}{19.79} & 60.09 / \color{green}{61.35} / \color{green}{70.32} \\
\text{RoBERTa}_{\text{large}}\text{-P3} & 24.83 / \color{red}{21.05} / \color{green}{30.85} & 39.23 / \color{red}{26.85} / \color{red}{38.39} & 66.86 / \color{green}{68.62} / \color{green}{67.25} & 17.67 / \color{green}{20.06} / \color{green}{19.09} & 62.98 / \color{red}{55.75} / \color{green}{69.72} \\
\text{RoBERTa}_{\text{large}}\text{-P4} & 25.69 / \color{green}{28.19} / \color{green}{28.39} & 40.18 / \color{red}{32.06} / \color{red}{36.91} & 68.58 / \color{green}{68.74} / \color{green}{68.71} & 16.01 / \color{green}{19.87} / \color{green}{16.50} & 63.75 / \color{green}{70.08} / \color{green}{70.39} \\
\hline
\text{NEZHA}_{\text{large}}\text{-P1} & 18.91 / \color{green}{24.98} / \color{green}{25.68} & 30.39 / \color{red}{29.30} / \color{green}{33.29} & 41.68 / \color{green}{52.42} / \color{green}{49.80} & 18.89 / \color{green}{23.31} / \color{green}{21.74} & 39.04 / \color{green}{60.36} / \color{green}{61.13} \\
\text{NEZHA}_{\text{large}}\text{-P2} & 7.92 / \color{green}{21.60} / \color{green}{25.33} & 12.03 / \color{green}{24.63} / \color{green}{33.22} & 12.33 / \color{green}{52.40} / \color{green}{49.68} & 16.26 / \color{green}{23.11} / \color{green}{21.95} & 16.59 / \color{green}{57.70} / \color{green}{60.82} \\
\text{NEZHA}_{\text{large}}\text{-P3} & 22.74 / \color{green}{25.63} / \color{green}{27.48} & 36.48 / \color{red}{22.33} / \color{red}{35.47} & 59.65 / \color{green}{59.90} / \color{green}{59.94} & 18.09 / \color{green}{23.12} / \color{green}{19.71} & 59.66 / \color{green}{67.80} / \color{green}{68.55} \\
\text{NEZHA}_{\text{large}}\text{-P4} & 27.45 / \color{red}{24.83} / \color{red}{24.90} & 44.33 / \color{red}{29.73} / \color{red}{34.05} & 66.19 / \color{green}{66.89} / \color{green}{67.88} & 13.74 / \color{green}{16.66} / \color{green}{13.95} & 62.91 / \color{green}{69.87} / \color{green}{69.71} \\
\hline
\end{array}}$$
第三个表格则是不同大小的SimBERT模型之间的对比:
$$\small{\begin{array}{l|ccccc}
\hline
& \text{ATEC} & \text{BQ} & \text{LCQMC} & \text{PAWSX} & \text{STS-B} \\
\hline
\text{SimBERT}\text{-P1} & 38.50 / \color{red}{23.64} / \color{red}{30.79} & 48.54 / \color{red}{31.78} / \color{red}{40.01} & 76.23 / \color{red}{75.05} / \color{red}{74.50} & 15.10 / \color{green}{18.49} / \color{green}{15.64} & 74.14 / \color{red}{73.37} / \color{green}{75.29} \\
\text{SimBERT}\text{-P2} & 38.93 / \color{red}{27.06} / \color{red}{30.79} & 49.93 / \color{red}{35.38} / \color{red}{40.14} & 75.56 / \color{red}{73.45} / \color{red}{74.39} & 14.52 / \color{green}{18.51} / \color{green}{15.74} & 73.18 / \color{green}{73.43} / \color{green}{75.12} \\
\text{SimBERT}\text{-P3} & 36.50 / \color{red}{31.32} / \color{red}{31.24} & 45.78 / \color{red}{29.17} / \color{red}{40.98} & 74.42 / \color{red}{73.79} / \color{red}{73.43} & 15.33 / \color{green}{18.39} / \color{green}{15.87} & 67.31 / \color{green}{70.70} / \color{green}{72.00} \\
\text{SimBERT}\text{-P4} & 33.53 / \color{red}{29.04} / \color{red}{28.78} & 45.28 / \color{red}{34.70} / \color{red}{39.00} & 73.20 / \color{red}{71.22} / \color{red}{72.09} & 14.16 / \color{green}{17.32} / \color{green}{14.39} & 66.98 / \color{green}{70.55} / \color{green}{71.43} \\
\hline
\text{SimBERT}_{\text{small}}\text{-P1} & 30.68 / \color{red}{27.56} / \color{red}{29.07} & 43.41 / \color{red}{30.89} / \color{red}{39.78} & 74.73 / \color{red}{73.21} / \color{red}{73.50} & 15.89 / \color{green}{17.96} / \color{green}{16.75} & 70.54 / \color{green}{71.39} / \color{green}{72.14} \\
\text{SimBERT}_{\text{small}}\text{-P2} & 31.00 / \color{red}{29.14} / \color{red}{29.11} & 43.76 / \color{red}{36.86} / \color{red}{39.84} & 74.21 / \color{red}{73.14} / \color{red}{73.67} & 16.17 / \color{green}{18.12} / \color{green}{16.81} & 70.10 / \color{green}{71.40} / \color{green}{72.28} \\
\text{SimBERT}_{\text{small}}\text{-P3} & 30.03 / \color{red}{21.24} / \color{red}{29.30} & 43.72 / \color{red}{31.69} / \color{red}{40.81} & 72.12 / \color{red}{70.27} / \color{red}{70.52} & 16.93 / \color{green}{21.68} / \color{green}{18.75} & 66.55 / \color{red}{66.11} / \color{green}{69.19} \\
\text{SimBERT}_{\text{small}}\text{-P4} & 29.52 / \color{red}{28.41} / \color{red}{28.57} & 43.52 / \color{red}{36.56} / \color{red}{40.49} & 70.33 / \color{red}{68.75} / \color{red}{69.01} & 15.39 / \color{green}{21.57} / \color{green}{16.34} & 64.73 / \color{green}{68.12} / \color{green}{68.24} \\
\hline
\text{SimBERT}_{\text{tiny}}\text{-P1} & 30.51 / \color{red}{24.67} / \color{red}{27.98} & 44.25 / \color{red}{31.75} / \color{red}{39.42} & 74.27 / \color{red}{72.25} / \color{red}{73.24} & 16.01 / \color{green}{18.07} / \color{green}{17.07} & 70.11 / \color{red}{66.39} / \color{green}{71.92} \\
\text{SimBERT}_{\text{tiny}}\text{-P2} & 30.01 / \color{red}{27.66} / \color{red}{27.92} & 44.47 / \color{red}{37.33} / \color{red}{39.39} & 73.98 / \color{red}{72.31} / \color{red}{73.31} & 16.55 / \color{green}{18.15} / \color{green}{17.14} & 70.35 / \color{green}{70.88} / \color{green}{72.04} \\
\text{SimBERT}_{\text{tiny}}\text{-P3} & 28.47 / \color{red}{19.68} / \color{green}{28.60} & 42.04 / \color{red}{29.49} / \color{red}{40.59} & 69.16 / \color{red}{66.99} / \color{red}{67.74} & 16.18 / \color{green}{20.11} / \color{green}{17.87} & 64.41 / \color{green}{66.72} / \color{green}{67.57} \\
\text{SimBERT}_{\text{tiny}}\text{-P4} & 27.77 / \color{red}{27.67} / \color{green}{28.02} & 41.76 / \color{red}{37.02} / \color{red}{40.19} & 67.55 / \color{red}{65.66} / \color{red}{66.60} & 15.06 / \color{green}{20.49} / \color{green}{16.26} & 62.92 / \color{green}{66.77} / \color{green}{67.01} \\
\hline
\end{array}}$$
实验结论 #
跟英文任务的表格类似,绿色意味着whitening操作提升了句向量质量,红色则意味着whitening降低了句向量质量,绿色越多则意味着whitening方法越有效。从上述几个表格中,我们可以得出一些结论:
1、中文任务的测试结果比英文任务复杂得多,更加不规律,比如在英文任务中,P4这种Pooling方式基本上都比其他方式好,而large模型基本上比base好,但这些情况在中文任务中都不明显;
2、除了SimBERT外,整体而言还是绿色比红色多,所以whitening对句向量的改善基本上还是有正面作用的,特别地,在$a / b / c$中,$c$的绿色明显比$b$的绿色要多,这说明降维还能进一步提升效果,也就是说whitening是真正的提速又提效的算法;
3、在BQ任务中,whitening方法几乎都带来了下降,这跟英文任务中的SICK-R任务类似,这说明“天下没有免费的午餐”,总有一些任务会使得“各向同性”假设失效,这时候不管是BERT-whitening还是BERT-flow都不能带来提升;
4、SimBERT是所有除PAWSX外的任务的SOTA,当然SimBERT算是经过语义相似度任务有监督训练过的了(但理论上训练数据与测试任务没有交集),所以跟其他模型比肯定不是特别公平的,但不管怎样,SimBERT已经开源,大家都可以用,所以可以作为一个baseline对待;
5、SimBERT加whitening,要不会带来性能下降,要不就是有提升也不明显,这说明如果通过有监督方法训练出来的句向量,就没有必要进一步做whitening了,基本上不会带来提升;
6、PAWSX确实很难,语义相似度任务还任重道远...
本文小结 #
本文介绍了我们在中英文任务上对无监督语义相似度方法的比较全面评测。在英文任务方面,主要复述了我们的BERT-whitening方法的论文中的结果,里边包含了跟BERT-flow一一对齐的比较;在中文方面,我们收集了5个任务,在11个预训练模型、4种Pooling方式、3种后处理方式共600多种组合进行了评测,以提供一个可以方便大家对比的结果。
一句话总结评测结果,那就是:BERT-whitening方法确实达到了当前无监督语义的SOTA,而SimBERT则是中文语义相似度的一个比较高的开源baseline。
转载到请包括本文地址:https://kexue.fm/archives/8321
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Apr. 11, 2021). 《无监督语义相似度哪家强?我们做了个比较全面的评测 》[Blog post]. Retrieved from https://kexue.fm/archives/8321
@online{kexuefm-8321,
title={无监督语义相似度哪家强?我们做了个比较全面的评测},
author={苏剑林},
year={2021},
month={Apr},
url={\url{https://kexue.fm/archives/8321}},
}
April 27th, 2021
苏神,我在使用utils.compute_kernel_bias 函数时,np.linalg.svd(cov)这行代码报错,经调试修改为如下,不再报错
def compute_kernel_bias(vecs):
"""计算kernel和bias
最后的变换:y = (x + bias).dot(kernel)
"""
vecs_ = np.concatenate(vecs, axis=0)
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
烦请苏神帮忙看看,我是否理解有误
我的代码配合我的脚本不会报错,至于你自己用,则需要在理解代码的基础上自行作出相应的调整,不需要向我汇报。
May 9th, 2021
苏神你好,问下在作相似句子匹配任务时,如果对a,b两个句子分别用bert作encoder得到pooled_output作为句向量,放入mlp做分类发现模型一直不收敛,对所有测试样例都预测为0,而直接把a,b成对放入bert得到的pooled_output放入mlp效果就很好,这是为什么呢
可能你的模型写错,可能你的特征拼接方式不对。
有很多的可能,最主要的可能是你自己的bug,因为这条路不大可能不对(参考Sentence BERT)。
June 10th, 2021
苏神,我想问一下,这种可以做文章之间的查重吗
这取决于你怎么用,直接套肯定是不够的。
June 29th, 2021
中文评测脚本有么
认真阅读开源代码
嗯嗯,这个我看到了。https://github.com/bojone/BERT-whitening
June 29th, 2021
还有一个问题:sbert为何没有对中文STS数据集做过对比评估呢?
兄弟问错地方了,你应该去问sbert的作者,问我我也不知道。
我理解如果想要得到这个结论:SimBERT则是中文语义相似度的一个比较高的开源baseline,是否应该严谨地去做过对比才能说sbert中文语义相似度效果没有SimBERT好呢? 这只是我个人意见~
sbert没中文模型,SimBERT有现成模型可以用,这是0和1的区别,所以哪里有sbert可以跟SimBERT比?
至少就目前来看,“SimBERT则是中文语义相似度的一个比较高的开源baseline”这句话并没有任何问题,如果你觉得不妥,可以把比SimBERT效果明显好的开源模型的链接告诉我(当然直接用相似度语料监督训练出来的模型除外),我更新上去。
June 29th, 2021
句子向量生成:
def encode(self, text):
token_ids, segment_ids = tokenizer.encode(text, max_length=maxlen)
X = sequence_padding([token_ids])
S = sequence_padding([segment_ids])
return encoder.predict([X, S])
对于两个短语(意思相反)进行编码,然后用cos计算相似得分:0.87
def cos(v1, v2):
v1 = v1 / np.linalg.norm(v1)
v2 = v2 / np.linalg.norm(v2)
return v1.dot(v2)
v1 = synonyms_generator.encode('电影好看')
print(v1)
v2 = synonyms_generator.encode('电影不好看')
print(v2)
print('cos: ', cos(np.squeeze(v1), np.squeeze(v2)))
用sbert对上面两个短语编码,然后用cos计算相似得分:0.37
请求大神,我理解simbert产生的句向量这个副产品效果应该可以,但是对于这种简单的意思相反的短语,计算的cos相似分为何如此的高呢?
请教大神,打错字了。。
我不知道你有没有加科学空间的微信群,这个问题讨论了很多遍了。简单来说就是“模型没错,错的是人”。
下面是我在群里回复的原话:
=======================================
第一个经典例子,就是“我喜欢北京”跟“我不喜欢北京”,正常觉得这两句话不相似?我想请问哪里不相似了?主语不都是我?宾语不都是北京?动作不都是喜欢?只不过动作的方向不一样了,明明有多方面相似,只有一个点不相似,然后人就说它们不相似了,这究竟是人的错,还是模型的错?
有的人会说,可以给出同样的答案的问题都是相似的,“我喜欢北京”跟“我不喜欢北京”应该给出不同的推荐结果,所以它们是不相似的。
好,就算接受你这个逻辑,那“苹果手机怎么安装软件”跟“安卓手机怎么安装软件”该不该相似呢?有些数据库比较粗糙,直接用“手机怎么安装软件”的答案来回答两个问题,所以这时候它们应该相似;但有些数据库比较精细,两个问题分开回答,所以它们又是不相似的。所以这相当于说这两个句子相不相似,全TMD看人的心情。
=======================================
有错都是人的错,模型是客观的,人是极度不客观的,用客观的模型去逼近不客观的人,自然就会有问题。
=======================================
总的来说,你要做的就是两件事:
1、承认这是人的错,不是模型的错;
2、明明是人的错,但人又偏偏说自己是对的,那就只能标注数据监督学习,不要指望无监督学习。
=======================================
至于你说的sbert效果很好,首先我不知道你的中文sbert哪里来的,你可以给我链接我看看;其实,按照我对英文sbert的理解,英文sbert是有监督训练的,有监督训练自然可以解决这个问题。
有中文sbert,我发你。https://github.com/renmada/sentence_bert_chinese。
看它的介绍,就是用有监督相似度语料训练的了,这就没啥好比了。
SimBERT虽然也说有监督训练,但SimBERT的语料是爬虫和规则自动构建的,没涉及到人工标注。而英文sbert虽然说是有监督,但它是用NLI语料训练的,并不是直接用相似度语料。所以看起来这个中文sbert跟SimBERT和英文sbert的训练初衷都不一样,它的监督信号更加强得多,不能直接比较。
嗯,昨天发你链接的时候,我也仔细想了一下,是你说这个结论。还是训练目的不一样,sbert有监督训练STS数据,用于文本语义相似度更加符合,而simbert更适用于生成与检索。但我在想,有没有可能训练出来的句子向量表示,更偏向人所理解的语义相似,加入一些标注数据进行监督学习(这个可以自己train。。),让simbert更强大
这可以是一个优化方向,比如拿现成的人工标注数据再微调一下,把模型放出来给大家用。但这个纯粹也就是给大家方便的做法,真要做研究,还是要尽量远离人工标注。
September 27th, 2021
苏神,你好,这里给出结果是avg还是weighted avg呢
中文任务都是weighted avg
October 18th, 2021
苏神,这个是不是算是这个微调的工作(RoFormer-Sim):https://kexue.fm/archives/8541/comment-page-1。哈哈,不过我看了最新的这篇文章,不相似分数也挺高的嘛,哈哈,有打算往sentence-bert那种有监督的效果靠靠么
可以认真读读文章再发问吗?大致上来说,你链接中的就是sentence-bert的效果。
你在本片文章不是回复过我么。。。这不是你的原话么:这可以是一个优化方向,比如拿现成的人工标注数据再微调一下,把模型放出来给大家用。但这个纯粹也就是给大家方便的做法,真要做研究,还是要尽量远离人工标注。
我的意思是对于RoFormer-Sim 相比sbert这个sentence-bert效果不是还更差么,所以也没有更好的模型,我记得你在微信群说过最新的是:roformer-sim-ft,它应该比得上中文sbert??? 不明所以地被怼一下。。真的是
你开始给出的链接(https://kexue.fm/archives/8541/)是介绍的是有监督版的RoFormer-Sim,这个版本的效果就是Sentence-BERT的效果。所以在我看来,你拿着已经有Sentence-BERT效果的链接,问我“有打算往sentence-bert那种有监督的效果靠靠么”,我就认为你根本没有认真读链接(https://kexue.fm/archives/8541/)中的文章,这个反应应该挺正常的吧。
实话实讲,工业界一般sentence-bert一般都是用sbert的,这只是一个事实而已,没必要互相抬杠,本身之前你的回答就是:比如拿现成的人工标注数据再微调一下,把模型放出来给大家用。但这个纯粹也就是给大家方便的做法,真要做研究,还是要尽量远离人工标注。 现在RoFormer-Sim效果实际就是不佳,人们关注这个,也是希望RoFormer-Sim一些强化版本会更好,不是在这抠字眼
请问你有没有认真捋一下我们的对话内容?
我是说过那段话,但最开始你是带着 https://kexue.fm/archives/8541/ 这个链接来问的,问的内容是有没有打算往有监督sentence-bert靠。然而,你带的这个链接就是有监督sentence-bert的效果,也就是说这个链接已经是你反复强调的有监督sentence-bert了啊。
所以,我已经做到你说的了,并且你已经找到链接了,然后你还这样子问,不是意味着你可能没看链接内容吗?这叫什么抬杠了?你拿着你想要的东西问它在哪,我叫你看仔细点,就在你手上,这是抬杠?
而且不说别的,就看你现在这个回复,我感觉你都还没有认真看过 https://kexue.fm/archives/8541/ 链接里边的内容,我真不知道你怎么找到这个链接的,你能先认真看看吗?里边就是sentence-bert,里边不是RoFormer-Sim,或者说里边就是用RoFormer-Sim蒸馏出来的sentence-bert,模型外表是RoFormer-Sim,效果等价sentence-bert了。
RoFormer-Sim效果对于不相似的文本对分数还是很大吧?如果效果比较好,为何要出roformer-sim-ft???你觉得sentence-bert是你的RoFormer-Sim,工业界用的比较多的还是sbert,说到sentence-bert大部分想到的先行者sbert,这只是个事实,没有抹黑的意思,怎么就变成别人阅读不仔细不认真了
链接怎么找到的,麻烦自己看看历史的回复记录,大神,一直关注而已,没想抹黑的意思,一上来说别人不认真不仔细,那你都知道我反复强调是有监督sentence-bert,你都已经知道说的是一个事情,然后纠结别人说sentence-bert指的不是sbert有必要么
大神说的对,我不够认真理解,到此为止
October 25th, 2021
@江湖少年|comment-17632
没什么抹黑不抹黑的,我只是想把事情搞清楚,否则你肯定不爽我,我也不爽你,这就没必要了。
所以,根据你的最新回复,原来你是知道有RoFormer-Sim-FT的??那你应该知道RoFormer-Sim-FT是蒸馏自sentence-bert的??
所以就只有一个问题了,你一开始的提问“有打算往sentence-bert那种有监督的效果靠靠么”究竟想表达什么?你知道我已经做了sentence-bert了(RoFormer-Sim-FT),然后问我有打算做sentence-bert吗?
还有,sbert难道不就是sentence-bert的缩写?为什么在你这里好像是两个模型?
January 24th, 2022
[...]最近在做句向量任务,使用BERT池化得到句向量,那么句向量能不能降维,这样计算速度会明显提升。于是看到苏剑林等人的工作 Whitening Sentence Representations for Better Semantics and Faster Retrieval,以及中文博客无监督语义相似度哪家强?我们做了个比较全面的评测。提出了对池化结果进行白化操作,效果提升很好。作者认为BERT抽取[...]