当BERT-whitening引入超参数:总有一款适合你
By 苏剑林 | 2022-05-18 | 44286位读者 |在《你可能不需要BERT-flow:一个线性变换媲美BERT-flow》中,笔者提出了BERT-whitening,验证了一个线性变换就能媲美当时的SOTA方法BERT-flow。此外,BERT-whitening还可以对句向量进行降维,带来更低的内存占用和更快的检索速度。然而,在《无监督语义相似度哪家强?我们做了个比较全面的评测》中我们也发现,whitening操作并非总能带来提升,有些模型本身就很贴合任务(如经过有监督训练的SimBERT),那么额外的whitening操作往往会降低效果。
为了弥补这个不足,本文提出往BERT-whitening中引入了两个超参数,通过调节这两个超参数,我们几乎可以总是获得“降维不掉点”的结果。换句话说,即便是原来加上whitening后效果会下降的任务,如今也有机会在降维的同时获得相近甚至更好的效果了。
方法概要 #
目前BERT-whitening的流程是:
˜xi=(xi−μ)UΛ−1/2μ=1NN∑i=1xiΣ=1NN∑i=1(xi−μ)⊤(xi−μ)=UΛU⊤(SVD分解)
其中xi是给定的句向量(如无说明,向量默认为行向量),˜xi是变换后的向量,SVD分解的结果中,U是正交矩阵,Λ是对角矩阵,并且对角线的元素非负且从大到小排列。可以看到,目前的流程是完全固定的,即没有任何可调的超参数。
为了增加一定的调节空间,我们可以往里边引入两个超参数β,γ(标量),使其变为
˜xi=(xi−βμ)UΛ−γ/2μ=1NN∑i=1xiΣ=1NN∑i=1(xi−βμ)⊤(xi−βμ)=UΛU⊤(SVD分解)
思路分析 #
可以看到,当β=γ=1时,就是原来的BERT-whitening;而当β=γ=0时,净变换就是
˜xi=xiU
由于U是正交矩阵,所以不改变内积结果,即˜xi˜x⊤i=xiU(xiU)⊤=xix⊤i,所以当我们用余弦相似度作为相似度量时,它不会改变原有结果。换句话说,引入这组超参数后,它提供了“不逊色于变换前的效果”的可能性,那么当我们精调这组参数时,就有可能取得比变换前更好的效果。这也是这两个超参数的设计思路。
此外,在这样的改动之下,原来的降维能力还是得以保留的。我们可以将变换拆开为两部分看:
˜xi=(xi−βμ)U⏟part 1Λ−γ/2⏟part 2
第一部分主要是正交变换U,U是Σ矩阵SVD分解之后的结果,它能将向量xi−βμ变换成每个分量尽量独立的新向量,并且新向量的每个分量与0的平均波动正好是由Λ1/2的对角线元素来衡量,如果对应的波动很接近于0,那么我们就可以认为它实际就是0,舍去这个分量也不会影响余弦值的计算结果,这就是降维的原理。而由于SVD分解的结果已经提前将Λ从大到小排好了顺序,因此我们可以直接通过保留前k维的操作˜xi[:k]就可以实现降到k维了。
至于第二部分Λ−γ/2,我们可以理解为当前任务对各向同性的依赖程度,如果γ=1,那么相当于每个分量都是各平权的,这可以作为一个无监督的先验结果,但未必对所有任务都是最优的,所以我们可以通过调节γ来更好地适应当前任务。
实验结果 #
文章《无监督语义相似度哪家强?我们做了个比较全面的评测》已经显示,在ATEC、BQ、LCQMC三个任务上,SimBERT加上默认的whitening操作(即β=γ=1)都会导致效果下降,而如果我们取β=γ=0,那么结果就不一样了(随便演示了两个组合,其他组合结果相似):
BERT-P4效果表ATECBQLCQMCPAWSXSTS-Bβ=γ=124.51/27.00/27.9138.81/32.29/37.6764.75/64.75/65.6515.12/17.80/15.3461.66/69.45/69.37β=γ=024.51/24.51/24.5938.81/38.81/38.9964.75/64.75/63.4515.12/15.12/14.5961.66/61.66/62.30SimBERT-P1效果表ATECBQLCQMCPAWSXSTS-Bβ=γ=138.50/23.64/30.7948.54/31.78/40.0176.23/75.05/74.5015.10/18.49/15.6474.14/73.37/75.29β=γ=038.50/38.50/38.8148.54/48.54/48.6676.23/76.23/76.2215.10/15.10/14.8874.14/74.14/74.46
跟之前的文章一样,表格中的每个元素是a/b/c的形式,代表该任务在该模型下“不加whitening”的得分为a、“加whitening”的得分为b、“加whitening并降到256维”的得分为c;如果b>a,那么b显示为绿色,小于则显示为红色;如果c>a,那么c显示为绿色,小于则显示为红色。前面说了,如果不降维的话,β=γ=0的净变换就是U,不改变余弦值结果,因此β=γ=0时的a,b都是相等的。
在这个表格中,我们主要看a/b/c中的第三个结果c,它是将向量从768维降低到256维的结果,可以看到当β=γ=0时,不管是无监督的BERT还是有监督的SimBERT,该结果基本都很接近原始向量的结果(即a),部分结果甚至还有提升。这就意味着,β=γ=0,k=256这个组合几乎可以算是“免费的午餐”,几乎无损效果,并且实现了降维。
笔者也试过精调β,γ,在一些任务上确实能取得比上述两个组合更好的效果,但精调需要标签数据,争议性可能会比较大,这里就不演示了。如果原来的句向量模型本就是有监督训练得到的,用BERT-whitening仅仅是奔着降维去的,那么就可以用验证集来精调一下β,γ和k了,这种场景下就是无争议的了。
文章小结 #
本文通过引入两个超参数的方式来赋予BERT-whitening一定的调参空间,使其具备“不逊色于变换前的效果”的可能性,并且保留了降维的能力。换言之,即便是之前已经训练好的句向量模型,我们也可以用新的BERT-whitening将它降维,并且保持效果基本不变,有时候甚至还更优~
转载到请包括本文地址:https://kexue.fm/archives/9079
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (May. 18, 2022). 《当BERT-whitening引入超参数:总有一款适合你 》[Blog post]. Retrieved from https://kexue.fm/archives/9079
@online{kexuefm-9079,
title={当BERT-whitening引入超参数:总有一款适合你},
author={苏剑林},
year={2022},
month={May},
url={\url{https://kexue.fm/archives/9079}},
}
May 18th, 2022
想请教一下苏神,β=1,γ=0时,这个变换和PCA变换是不是非常接近了?
是的。
May 22nd, 2022
苏神,请教您两个问题:
1、如果是用蛋白质氨基酸序列数据预训练的出来的bert模型,输出每个字符的特征长度是1280,可以用这个bert whitening降维吗,还是说这个bert whitening只能用在nlp领域内的普通bert?
2、有github地址吗,想看一下这两个超参数为0的实现方式
非常感谢了
1、whitening适用于基于欧氏距离或者cos检索的向量降维;
2、BERT-whitening已经开源,直接在它上面改就行。
好的,谢谢苏神!
May 23rd, 2022
苏神你好,请问 BERT-Whitening 操作是针对语义相似度问题或者说是向量之间的余弦相似度问题提出的吗?还是说 BERT-Whitening 操作特别是利用 SVD 实现的降维操作实际上可以推广到其他任务呢?
您的关于 BERT-Whitening 的文章对我很有帮助,非常感谢。
降维是必然会丢失某些信息的,但有可能保留我们关心的那个信息。对于BERT-whitening来说,我们关心的信息就是内积、余弦或者欧氏距离的检索相似度,在BERT-whitening之下可以达到降维的效果,并且保持我们关心的相似度不变甚至有所提升。
June 2nd, 2022
苏神你好,请问一下利用标签精调β,γ的思路是什么?非常感谢。
思路就是调到效果最优~
July 31st, 2022
苏神你好,我想问一下bert-whitening适合在一些字符级分类任务中给基于BERT的词向量做降维处理吗
适合与否,这得看实际实验效果呀。
August 8th, 2022
苏神你好,我基于你这篇bert-whitening,很好地优化了我司的语义召回模型:经过压缩后的向量在粗召回时几乎没有折损,耗时却大大减少,前来感谢
恭喜
June 1st, 2023
[...]whitening操作并非总能带来提升,有些模型本身就很贴合任务(如经过有监督训练的SimBERT),那么额外的whitening操作往往会降低效果。BERT-whitening中引入了两个超参数,通过调节这两个超参数,我们几乎可以总是获得”降维不掉点”的结果第一部分主要是正交变换U,U是Σ矩阵SVD分解之后的结果,它能将向量xi−βμ变换成每个分量尽量独立的新向量,并且新向量的每个分量与0的平均[...]