【NLP】BERT语言模型

BERT实际上是Transformer的encoder部分,其功能将输入的词向量通过self-attention机制得到输出向量。BERT的训练采用了**自监督(self-supervised learning)**方式,通过一些辅助任务,让BERT能够抽取出最佳的embedding,也就是说让BERT学到最能表征输入的参数。


一、自监督学习(self-supervised learning)

【NLP】BERT语言模型_第1张图片
实际上自监督学习也是一种无监督学习,因为没有标签去学习。但是自监督学习采用了将自身数据拆分为两部分的方式,去训练学习模型。

二、Bert

(一)Bert的两种训练方式

方法一:Masked LM(预测被mask掉的词)
随机mask掉一部分输入(如15%),然后通过BERT去算每个输入的embedding向量。得到embedding后,仅利用简单的分类模型(Linear Multi-class Claasifier) 去做这个词的分类,于是得到预测结果。如果要使简单的分类模型准确预测词,那么就需要BERT抽取出最能表示输入的embedding。
【NLP】BERT语言模型_第2张图片
如何去mask input?一般采用两种方式,一种是随机将词换成[MASK]这样的未知表示词,另一种方式是随机将词换成另一个词。
【NLP】BERT语言模型_第3张图片

方法二:Next Sentence Prediction(预测两个句子是否相接)
这里引入两种表示符号:[SEP] [CLS],分别代表两个句子的分隔符和两个句子是否相接的二分类结果。
【NLP】BERT语言模型_第4张图片
通常,上面两种训练方法是同时进行的,我们让BERT去解这两个任务,以训练出一个强大的BERT模型。当然也有人说方法二是无效的,出自如下这篇paper:
在这里插入图片描述
可能是方法二这种任务过于简单,学不出很有效的东西。于是有了ALBERT,这篇paper做的任务是SOP: Sentence order prediction
在这里插入图片描述

(二)Bert的下游任务使用

由前面的训练方法可以了解到,Bert相对有效的训练方式是mask input and predict words,也就是“做填空题”。那么,Bert训练好之后,只能做填空的任务??答案是否定的,Bert训练好之后(训练过程叫做“pre-train即预训练”),可以有能力去完成各种各样的downstream tasks(下游任务),这个过程也就是fine-tune(微调)。
【NLP】BERT语言模型_第5张图片
【NLP】BERT语言模型_第6张图片

例子一:输入一个句子,输出一个类别
比如sentiment analysis、document classification任务。
Linear Classifier参数随机初始化,需要从头学;而BERT只需要fine-tune就好。
【NLP】BERT语言模型_第7张图片
采用了fine-tune的模型loss会下降更快,并且最终的loss更低。
【NLP】BERT语言模型_第8张图片

一句题外话,这个过程算自监督学习还是半监督学习?
在预训练Bert模型的时候,实际上是自监督学习,在完成下游任务的时候,存在少量label,所以是半监督学习。那么Bert从训练到完成下游任务整个过程,实际上就是半监督学习的。

例子二:输入一个句子,输出每个词的类别(和输入等长的向量)
比如slot filling、POS tagging任务。
和例子一类似,但是这里是用很多linear classifier去学每个词的类别。
【NLP】BERT语言模型_第9张图片
例子三:输入两个句子,输出一个类别
比如natural language inference (NLI) 任务(给定一个前提,模型去决定这个假设是否正确)。
这种模式和例子一比较类似。
【NLP】BERT语言模型_第10张图片

【NLP】BERT语言模型_第11张图片
例子四:Extraction-based Question Answering (QA) (E.g. SQuAD)
下面是对问答任务的描述,输入文章D和查询Q,输出两个整数s e,分别代表答案A的对应词在文章中的位置。
【NLP】BERT语言模型_第12张图片
BERT将采用如下的方式去学到两个位置整数s和e。
首先是输入Q和D,他们用一个分隔符分开。通过BERT后得到D的embedding表示,然后分别和橙色的向量进行dot product,然后softmax后得到概率值,取最大概率对应的词作为s。
【NLP】BERT语言模型_第13张图片
用蓝色的向量进行dot product,然后通过softmax得到概率,取概率最大对应的词作为e。
【NLP】BERT语言模型_第14张图片
如果s和e矛盾了怎么办,那么输出的结果应该是“无解”。

(三)训练Bert的挑战

训练的数据量超过3 billions of words(3000倍的哈利波特全集)。如果是fine-tune来做下游任务还能够接受,但是如果要从头训练Bert模型,非常耗时!

(四)Pre-training a seq2seq model

前面的Bert都没有seq2seq,Bert只有encoder部分。现在加上一个decoder在encoder的后面,通过cross-attention连接在一起。将输入向量“扰动弄坏”,然后通过decoder去预测“扰动弄坏”之前的输入向量。训练这个过程,最终得到seq2seq的模型。
【NLP】BERT语言模型_第15张图片
下面是把原始输入“弄坏”的一些方法。
【NLP】BERT语言模型_第16张图片

(五)Bert为什么有效

通过Bert模型,可以得到每个输入向量的embedding表示。具有相似意义的词的embedding,也会相似,可视化出来就是聚集在一起。
【NLP】BERT语言模型_第17张图片
【NLP】BERT语言模型_第18张图片
下面是embedding的cosine相似度热力图(黄色代表更高的相似度),可以看到吃苹果中的“果”和苹果电脑中的“果”,是不一样的。
【NLP】BERT语言模型_第19张图片
Bert为何有效,我们mask输入后,仅通过上下文的分析去得到这个未知的词,我认为这种方式就是理解句子的过程。在之前就有这样的思想,做word embedding的时候CBOW方法就是挖空一些词去预测,从而得到很好的embedding。
【NLP】BERT语言模型_第20张图片
值得一提的是,Bert去做embedding是contextualized word embedding,同样一个词放在不同的语境中能有不同的embedding。

有人做过看起来比较奇怪是实验,比如DNA序列的分类问题,DNA可以用A T G C来表示,作者将这几个字符改为单词,然后强行做分类任务。
【NLP】BERT语言模型_第21张图片
最后发现,用Bert做这种看起来奇怪的实验效果较好。
【NLP】BERT语言模型_第22张图片

三、Multi-lingual BERT

拿不同的语言去训练,就是多语言的Bert模型。Multi-lingual BERT会在104种语言上
【NLP】BERT语言模型_第23张图片
题外话,我在学习这部分的时候,真的感觉NLP非常强大,非常神器!看下面的实验结果,用多种语言去pre-train(相当于只会填空题),用英文去fine-tune,然后用中文去test(相当于复习了英语,然后裸考中文),也能有效!用中英文去fine-tune,效果更佳。
【NLP】BERT语言模型_第24张图片

四、Cross-lingual Alignment

通过训练不同语言的模型,同一意思但是不同语言的embedding也能够相近。
【NLP】BERT语言模型_第25张图片
这里存在一个奇怪的点——模型是输入英文就做英文任务,输入中文就做中文任务,不同语言是相互独立的,并没有出现在英文文章的空格中填入中文进去的情况。这代表,模型能够学习到不同语言之间的信息——不同语言中同一含义的词虽然有相近的embedding,但是!不同语言终究还是不一样的。
那么不同语言之间的差距藏在哪里呢?如下图所,将中文和英文的embedding分别求平均,然后求得他们之间的差距。在用模型做英文训练时,给输出的embedding后面加上这个差距,竟然就能够得到中文的表示。
【NLP】BERT语言模型_第26张图片
【NLP】BERT语言模型_第27张图片

你可能感兴趣的:(【NLP】自然语言处理,算法,深度学习,自然语言处理)