文章目录
- 1 什么是Multilingual BERT
- 2 Zero-shot Reading Comprehension
- 3 Cross-lingual Alignment
- 4 How alignment happens
本文为李弘毅老师【Multilingual BERT】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。
下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。
文章索引:
上篇 - 7-4 來自獵人暗黑大陸的模型 GPT-3
下篇 - 7-6 Text Style Transfer
总目录
1 什么是Multilingual BERT
世界上的语言有几千种,如果我们需要某个语言的BERT预训练模型,就要重新train一个BERT吗?不用。Multilingual BERT就是说拿不同国家的语言按照chapter7-3中所述的方法在同一个BERT上去做预训练。Google训练过一个用104个国家的语言做训练集的BERT,有钱就是任性。
2 Zero-shot Reading Comprehension
那么,把这么多国家的语言放到同一个BERT中去训练,有什么用吗?可以做到每个语言train一个BERT做不到的事吗?有and可以!
Multi-BERT可以做到zero-shot相关的任务。比如我们有一组英文的QA训练数据(每条数据是一篇文章,一个问题和一个答案),然后用它在Multi-BERT上做fine-tune之后,可以在中文上做QA的任务!
那么它的效果如何呢?如下表所示,使用了SQuAD英文QA数据集和DRCD中文数据集。表中的第一行是QANet在没有pre-train的情况下,直接在中文QA数据集上训练,并在中文上测试,其F1-score是78.1;我们拿BERT在中文数据上预训练并在中文QA数据集上fine-tune,最后在中文上测试的F1-score是89.1,可见BERT和与预训练是是的效果大幅提升的关键;拿Multi-BERT在中文QA上fine-tune并在中文上测试,F1-score是88.7,这个还比只用中文预训练要差一些,不过差距不大;接下来就是重点了,我们拿Multi-BERT在英文QA上做fine-tune并在中文上测试,F1-score是78.8,这已经比QANet高了;最后一个是拿Multi-BERT在英文和中文QA上做fine-tune并在中文上测试,F1-score是90.1,这比第三个高,可见英文的确有一些辅助作用。人类的F1-score是93.3,已经很接近人类了。
当我们的手上只有英文的QA数据,却想做中文的QA时,Multi-BERT不失为一个比较好的选择。当然我们也可以选择先做一下翻译,然后就相当于有了中文的QA数据,再去训练。但这样的效果李老师测下来没有直接用Multi-BERT去fine-tune的效果好,因为翻译的模型也是有错误的。不过这样的对比涉及到的变数太多,说不好,说不好。
不过这种跨语言的学习,就很想人类的学习行为了,很令人兴奋!
google还出了一个专门用来看模型跨语言学习能力的比赛,叫做xtreme,就是在一种语言上去学习某个任务,然后在其余几十种语言上去测试。
3 Cross-lingual Alignment
Multi-Bert可以做到跨语言的零样本学习,是什么原因呢?很大的可能就是Multi-Bert有跨语言的对齐,就是在Multi-Bert输出的不同语言同一个意思的词的特征向量时,这些特征向量时很接近的。比如兔和rabbit就会很接近,鱼和fish就会很接近。
如何验证这一猜想?我们可以建立一个Mean Reciprocal Rank。首先,我们会选择一堆有对应关系的词出来,比如对比中英文的时候,就是有一个下图右上角所示的Bi-lingual Dictionary。然后我们会利用Multi-Bert计算每个词的特征向量(一词多义,取多个意思对应特征向量的平均),计算特征向量之间的余弦相似度,得到一个相似度矩阵。最后,我们会看每个英文单词对应的正确中文单词在所有中文单词中与该英文单词相似度的排名,分数就是排名的倒数,比如“year”对应"年",然后在"year"的这一行,“年"的相似度是最高的,那么排名就是1,分数就是1/1;又比如"month"对应"月”,然后在"month"这一行,"月"的相似度排第3,分数就是1/3。
我们把得到的scores取平均就得到了最终的Alignment的评价分数。
最终发现,Multi-Bert的夸语言的alignment结果的确不错。李老师也试了一下用Globe,Word2vev等一些旧方法去训练跨语言的表征,效果的确没有Multi-Bert好。
4 How alignment happens
那么Multi-Bert为什么可以完成跨语言的alignment呢?有两种经典的猜想。一种猜想是不同语言之间有一些相同的token,这些相同的token搭建了一个桥梁,让模型可以在不同语言间对齐。另一种猜想是,有一种神奇的语言X,这个X中又有中文的token,又有英文的token,搭建了一个桥梁,只要中文和X对齐,英文也和X对齐,中文和英文就对齐了。
有一篇论文就针对这种想法做了实验,发现这两种猜想都不正确。他们用英语和伪造的假英语(和英语完全不同的token)来进行训练,发现这两者之间有比较好的alignment,可见模型在做alignment的时候,不需要相同的token作为媒介。
说到这里,有一个奇怪的地方,就是在训练Bert的时候,输入和输出的句子是一样的,如果不同语言间的embedding是不独立的话,那输入英文为什么不会输出同样意思的中文呢?可见不同语言间的embedding是独立的,Multi-Bert是有语言信息的。
为了验证这一点,我们做了一个非常简单的尝试。我们把所有英文的embedding取平均,所有中文的embedding取平均,然后得到两者之间的差值向量,在做reconstruction之前,把这个差值给加上去,看看会发生什么。
我们发现,猜对了!如下图中的表格所示,如果输入一个英文句子,然后加上一倍的差值,就得到了表中α=1\alpha = 1α=1的结果,如果加上两倍的差值,就得到了α=2\alpha = 2α=2的结果,句子越来越中文了!虽然意思有点不太对劲,但是至少证明了我们的猜想。
这个发现有什么用吗?有!如果我们英文的任务上做downstream的finetune,然后在中文上测试时,把这个差值给加上,效果会有所提升!真有意思啊~!