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


Model
ELMo就是这么做的 。使用了分离的两个LMs:一个Left-to-Right,一个Right-to-Left,将结果形成一个
Can we share morethan just the word ? what about

NLP:预训练+转移学习

文章插图

NLM
myRNN with the LMs
,all we have to do is learn
from , all the otherare .
Model
This is(范式) in NLP, by BERT model.
We init ourmodel with aNLM, and thenthe error from atask ( task) into these . This isfine-
# ELMo(2018.2)
《DeepWord 》作者认为一个预训练的词表示应该能够包含丰富的句法和语义信息,并且能够对多义词进行建模 。而传统的词向量(例如)是上下文无关的,无法对一词多义进行建模 。所以他们利用语言模型来获得一个上下文相关的预训练表示,称为ELMo( fromModel)
在ELMo中,他们使用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然 。
先在大语料上以Model为目标训练出LSTM模型,然后利用LSTM产生词语的表征 。为了应用在下游的NLP任务中,一般先利用下游任务的语料库(注意这里忽略掉label)进行 model的微调,这种微调相当于一种,然后才利用label的信息进行。
ELMo的语言模型经过权衡了模型性能、大小、以及所需算力定为两层双向LSTM,每层4096个units,512维 。
ELMo表征是“深”的,就是说它们是biLM的所有层的内部表征的函数 。这样做的好处是能够产生丰富的词语表征 。高层(第二层)的LSTM的状态可以捕捉词语意义中和语境相关的那方面的特征(比如可以用来做语义的消歧),而低层(第一层)的LSTM可以找到语法方面的特征(比如可以做词性标注) 。如果把它们结合在一起,在下游的NLP任务中会体现优势 。( 最简单的也可以使用最高层的表示,但论文的实验结果表明:使用所有层的效果要比只使用最后一层作为ELMo的效果要好 。
论文揭示了,预训练语言模型能生成深层特征是关键,下游任务可以混合不同层的半监督语义信号,来提高自己的效果 。
当有多个 state时,如何选择?
然后进行有监督的NLP任务时,可以将ELMo直接当做特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上(在输入还是输出上面加ELMo效果好的问题上,并没有定论,不同的任务可能效果不一样 。
ELMo的使用流程主要如下:
1?? 首先,在较大的语料库中预训练biLM模型,使用两层Bi-LSTM,并使用残差连接,作者提出,低层(第一层)的Bi-LSTM能获取语料中的句法信息,而高层(第二层)能获取语料中的语义信息 。
2?? 其次,在我们任务的语料中(忽略标签的)fine 微调预训练好的biLM模型,称为。
3?? 最后,在具体的任务中,我们使用ELMo输出的词嵌入作为下游任务的输入,也可以作为下游任务的输出层 。
#Open AI GPT(2018)
GPT: Pre-
《byPre-》这篇论文的亮点主要在于,他们利用了网络代替了LSTM作为语言模型来更好的捕获长距离语言结构 。然后在进行具体任务有监督微调时使用了语言模型作为附属任务训练目标 。
在语言模型网络上他们使用了团队在《 is all your need》论文中提出的解码器作为语言模型 。在具体NLP任务有监督微调时,与ELMo当成特征的做法不同,GPT不需要再重新对任务构建新的模型结构,而是直接在这个语言模型上的最后一层接上作为任务输出层,然后再对这整个模型进行微调 。如果使用语言模型作为辅助任务,能够提升有监督模型的泛化能力,并且能够加速收敛[链接]
目前将预训练的语言模型应用到NLP任务主要有两种策略,一种是基于特征的语言模型,如ELMo模型;另一种是基于微调的语言模型,如 GPT 。