向量召回这玩意其实已经不是什么新鲜玩意了,之前我有一篇专门的文章聊过这个:心法利器[16] | 向量表征和向量召回。
简单的说,现在我们具有最近邻相似,即向量召回的能力,因此我们可以通过一个双塔无交互的模型构造表征向量,对query进行对应的表征,然后就可以进行向量检索。
bert-flow应该是一份比较代表性的工作,有关的工作其实对bert所表征的向量有很多分析和研究,相比bert-flow本身,其实更想和大家去聊这个。
我的理解MLM任务的本质,其实就是在看从词汇层面去了解上下文对他的影响,实质上就和我们做英语的完形填空一样,无论是word2vector还是bert,都是通过这种模式来体现我们所谓的“语义”的,我们可能无法知道这是不是所谓的语义,但终究有一点是对的,那就是bert应用在各个任务中的效果都不会太差,这就意味着bert的确学到了适合任务的知识了,而通过finetunine或者是下游的一些操作能达到更好的效果,说明我们只能要加以转化和抽取,就能把预训练模型中我们需要的部分抽取出来。
MLM的任务再讲详细些,CBOW视角看,假设上下文能预测出词汇,而另一个上下文也能预测出,那其实我们有一定的理由认为和具有一定的语义相似性,而借助softmax的激活作用,还可以把其他词汇被拉远,这种拉远让语义空间更为广阔,只有相似语义的句子才会被分在语义空间内一个比较集中的一块,这也是词汇句子在语义空间中的语义表征最为朴素理解。
Sentence Bert虽然已经较为成功地完成bert做句子的向量表征完成向量召回的任务,某种程度上证明了bert所产生的向量能够表达出句层面的复杂语义,然而巧的是Sentence Bert没多久就有了文章更加深入地讨论语义空间的技术,研究发现,语言模型学到的词向量分布通常是“各向异性”,且“呈锥形分布”的,哪怕是BERT和GPT2也是这样,而有意思的是,这个分布的特点还和词频有关。
本来,我们是希望所有的词向量、句向量是比较均衡的,但是我们发现随着词频的增加,L2范数会离远点比较进,这其实就是我们常说的向量模长,这个体现的即使典型的“锥形分布”,离得远的低频词在空间中会比较稀疏,如果我们还要去对模进行归一化的话,甚至可能让不同意思的词映射到接近的球面。
既然语义空间的分布不合理,那么我们最直接的感受就是需要把这个空间映射到一个更为合理的空间去,Bert-flow的作者想到的是,构造一个可逆的函数进行映射即可。
要映射,那就需要确认两个问题,一个是目标空间是什么,另一个是怎样映射。前者作者选择了标准高斯分布,说人话就是正态分布,正态分布首先是各向同性的(协方差矩阵为常数阵,各个方向的方差都一样)。而为了把bert的语义空间映射到标准正态分布的空间,作者使用的是基于标准化流的生成模型。有关流模型的理解,建议大家去看看苏神的两篇文章:https://kexue.fm/archives/5776(细水长flow之NICE:流模型的基本概念与实现)以及https://kexue.fm/archives/5807(细水长flow之RealNVP与Glow:流模型的传承与升华)。
有一说一,flow模型在这个方向为大家提供了大量思路,让我们对向量表征的转化有了进一步的理解,但是flow的这个模式是否就是最好的呢?答案当然是否定的。
我们映射的初衷,是因为语义空间的分布不适合我们,而不适合我们的核心在于,我们在判断语义相似度,甚至是向量召回的时候,这个语义空间并不合适,而这个问题其实在分类、NER之类的问题中好像并不明显,因此我们需要聚焦的是语义匹配、语义相似度上的处理,而向量召回之类的思路上,我们需要的是在预训练语言模型基础上做一些基操后,整理成一个比较合理的句向量,其表征的语义空间更加适合语义匹配,而匹配的本质——相似度其实就是欧式、余弦之类的相似度计算。所以,我们希望语义空间是适合余弦、欧式之类距离计算的。
以余弦为例,余弦距离的概念大家非常熟悉:
但是我们没考虑过一个假设,那就是“标准正交基”下。很多论文、书籍其实都有这个严谨的假设,只不过我们没考虑过而已,因为我们常说的平面直角坐标系就是一个标准正交基下的坐标系(不识庐山真面目,只缘身在此山中)。
没错,说人话,就是我们要做一些相似度的计算,最好的情况,就是把向量空间映射到一个标准正交基下。这也印证了bert-flow效果的优化是有理论依据的。
线性空间、标准正交基,这些都是我们线代、高代中学到的内容了,然而对于bert这种比较复杂的空间,我们应该怎么映射呢?这个思路,苏神发表的bert-whitening,聊了很多,其实它的实质就是用了“主成分分析”的转化方法完成的这个映射,有意思的是这个映射居然只是个线性映射。
bert-flow的思想是瞄准具备该性质的标准正态分布进行映射,而bert-whitening则考虑的是只要保证映射达到的空间具备需要的性质即可,考虑标准正态分布的性质,其实我们需要的不是标准正态分布,而是具备一些标准正态分布性质的分布就行,简单地说,我们只需要一个均值为0、协方差为常数甚至是单位阵的空间,这与正态分布与否似乎就没什么关系了。那这个变换是不是可以简单的构造成这样:
<section role="presentation" data-formula="x" =(x-\mu)\cdot="" w="" '="" data-formula-type="block-equation">这其实就是我们常说的“标准化”,类似一组数减均值除以方差的操作。简单的就是均值,可就没这么简单了,这块的操作其实很想主成分分析。
协方差矩阵的计算相信大家多少还有些印象:
我们的目标是让这个协方差矩阵变为一个单位阵,因此我们的目标就是令:
于是:
而根据奇异值分解的性质,可以得到
其中是正交矩阵,是正对角矩阵。跳跃有点大,如果觉得不适应可以去了解下奇异值分解。
当然了,有兴趣大家可以看看论文,whitening其实和flow的效果是差不多的且相比直接使用last2avg好太多,一定程度也印证了这番讨论的正确性,bert在语义相似度上是需要转化的,同时也换言之,我们会在下游做一些submodel的工作,有的时候是在用隐式的方法来实现这个映射的过程,但是因为训练的目标没有显式体现所以我们没有发现。
当一个东西能被一个黑盒轻松解决,我们喜大普奔,但是当效果并不理想,超出我们认知的时候,自然地我们应该去了解这个黑盒怎么用,甚至是尝试把它打开了解他的机理从而找到他的问题,另一方面也通过输入和输出进行反推了解黑盒,bert就是这么个黑盒,要想在这个技术的基础上进一步发展,我们要尽可能了解他,破解它,找到他的问题,才能进行突破性的改造。
本文参考的东西挺多的,希望大家在本文的引导下看看这些论文或者是文章。
联系客服