NLP:预训练+转移学习( 三 )


GPT采用了Pre-(预训练)和Fine-(微调)的训练方法,目标是学习一种通用的表示形式,该表示形式几乎不需要怎么调整就可以适用于各种NLP下游任务 。
首先,对未标记的数据建立语言模型,学习神经网络模型的初始参数 。随后,使用相应的有监督的方式将这些参数调整为NLP下游任务所需要 。即整个训练过程包括两个阶段,第一阶段是在大型语料库上使用无监督的方式训练 。随后是微调阶段,使用的是当前任务的有监督数据 。
由于不同NLP任务的输入有所不同,在模型的输入上针对不同NLP任务也有所不同 。具体如下图,1?? 对于分类任务直接将文本输入即可;2?? 对于文本蕴涵任务,需要将前提和假设用一个Delim分割向量拼接后进行输入;3?? 对于文本相似度任务,在两个方向上都使用Delim拼接后,进行输入;4?? 对于像问答多选择的任务,就是将每个答案和上下文进行拼接进行输入 。
在四种类型的语言理解任务上评估该方法,分别是:自然语言推理,问题回答,语义相似性和文本分类任务 。在12个子任务中有9个达到了当时的最先进水平(state of the art) 。
# BERT(2018.10)
《BERT: Pre- of Deepfor》BERT () 是使用编码器来作为语言模型,在语言模型预训练的时候,提出了两个新的目标任务:
1??遮挡语言模型 Model
- given a fullof words(not just ) where x%(通常为15%) of the words have bennout
-ofthe next word, we onlywords

NLP:预训练+转移学习

文章插图
2??预测下一个句子Next
BERT为了让下游的问答(QA)和自然语言推理(NLI)任务能够进行,增加了另一个预训练任务,在 BERT 的训练过程中,模型将两个句子为一对作为输入,预测第二个句子是否在原始文档中是第一句的后续句子 。
在实际预训练过程中,文章作者从文本语料库中随机选择50%正确语句对和50%错误语句对进行训练,与 LM任务相结合,让模型能够更准确地刻画语句乃至篇章层面的语义信息 。
在语言模型上,BERT使用的是编码器,并且设计了一个小一点的Base结构和一个更大的Large网络结构 。
BERT本质上是一个训练好的 堆栈 。Base 版本有12层,Large版本有24层 。它们也比初始论文里的的默认配置(6个编码器层,512个隐藏单元,8个 heads)有更大的前馈网络(分别为768个和1024个隐藏单元),heads(分别为12个和16个) 。
在论文中他们训练base版本需要在16个TGPU上,large版本需要在64个TPU上训练4天,对于一般条件,一个GPU训练的话,得用上1年 。
对比一下三种语言模型结构,BERT使用的是编码器,由于self-机制,所以模型上下层直接全部互相连接的 。而 GPT使用的是解码器,它是一个需要从左到右的受限制的,而ELMo使用的是双向LSTM,虽然是双向的,但是也只是在两个单向的LSTM的最高层进行简单的拼接 。所以作者们认为只有BERT是真正在模型所有层中是双向的 。
在之前,我们提到过ELMo,虽然都说是“双向”的,但目标函数其实是不同的 。ELMo是分别以

作为目标函数,训练后拼接在一起,而BERT则是以
直接作为目标函数训练,所以可以理解为BERT是真正的双向!
而在模型的输入方面,BERT做了更多的细节 。将英文词汇作进一步切割,划分为更细粒度的语义单位(),例如:将分割为play和##ing,并加入了位置向量和句子切分向量 。并在每一个文本输入前加入了一个CLS向量 。
对于不同的NLP任务,模型输入会有微调,对模型输出的利用也有差异 。
##LM
文章作者在一句话中随机选择15%的词汇用于预测 。对于在原句中被抹去的词汇,80%情况下采用一个特殊符号[MASK]替换,10%情况下采用一个任意词替换,剩余10%情况下保持原词汇不变 。这么做的主要原因是:在后续微调任务中语句中并不会出现[MASK]标记,而且这么做的另一个好处是:预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇(10%概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力 。