内容简介:Google AI Language在2018.10发布的论文,提出一种预训练语言模型,在十多个NLP任务中取得了SOTA的效果。两种使用语言模型的方法:Feature-based,Word2Vec、Glove、ELMo,把预训练好的语言模型当做一个feature加到word embedding中。
Google AI Language在2018.10发布的论文,提出一种预训练语言模型,在十多个NLP任务中取得了SOTA的效果。
1.现有的LM
两种使用语言模型的方法:
Feature-based,Word2Vec、Glove、ELMo,把预训练好的语言模型当做一个feature加到word embedding中。
fine-tuning,OpenAI-GPT,尽量不改动预训练的语言模型,加输出层并在下游的任务上fine-tune。
他们的共同点:
1.在预训练的时候用的是同一个目标函数;
2.使用单向语言模型学习语言表示。其中,GPT在预训练的时候,预测下一个词只使用其左侧的上下文,相当于使用了Transformer的Decoder的结构。而ELMo等语言模型虽然得到了双向表示,但是是两个独立的目标函数下得到的双向表示直接拼接起来。
2.亮点
结构:
每层都是双向Context-Dependency。
目标函数:MLM(Masked Language Model) + Next Sentence Prediction。
结果:
不需要调整模型结构,只需要在预训练的LM上加上一层输出层并fine-tune就能应用在多种NLP任务。
3.细节
(1)输入:
由词向量+位置向量+Seg向量三个部分组成,
词向量,第一个词是CLS,如果是分类任务这个token对应的embedding可以作为学习到的句子表示。
可学习的位置向量,用来改善self-attention的效果。
对于Sentence-Pair输入类型,采用和GPT类似的方式concat两个句子,以Seg向量区分token所在的句子。
(2)Train Objective:
MLM:
为了改善单向LM问题,如果直接使用多层双向那么模型相当于直接看到了答案,所以使用类似Cloze的Masked Language Model。
训练的时候如果只是把输入中的一些单词mask为一个特殊字符然后预测它们,那么和使用的时候差别太大。为了减轻这个影响,使用了一些策略(mask 15%的单词):80%的概率mask为mask字符,10%的概率替代为特殊字符,10%的概率使用原有单词。
Next Sentence Prediction:
另一个pre-train的目标,预测句子之间是否是相邻关系。这样使LM在需要理解句子之间关系的下游任务中表现更好。
(3)Pre-train过程:
BookCorpus+Wiki数据的文档级别的语料,抽取出两个sentence(50%抽取相邻句子,50%抽取段落中随机句子)。
(4)Fine-Tune过程:
对于句子级别的分类过程,取第一个token的最后一层作为表示,再加上一个全连接层。
对于span级别的分类过程(比如SQuAD),增加了一个Start Vector:
和End Vector:,用这两个向量与所有token点乘的softmax作为每个token作为span的概率。
4.缺陷
MLM每个batch只需要预测15%的Mask Token,所以比之前的LM收敛要慢。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。