从怀才不遇到普度众生——NLP中预训练技术发展史

最近两天在补习Transformer,ELMo,BERT,在知乎上看到一篇文章把这些全部串起来讲的极其清晰,且构思缜密,逻辑精湛,强烈建议大家去看原文*《从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史》*https://zhuanlan.zhihu.com/p/49271699 全程干货,感谢原作者给予大腿!
本文以学习笔记为主,如有不足,欢迎指正。

BERT —— 近两年NLP重大进展的集大成者

  • 刷新了很多NLP任务的最好性能
  • 绝大部分NLP任务都可以采用类似的两阶段模式直接去提升效果

图像领域的预训练

神经网络的预训练得从图像领域说起,毕竟现在姹紫嫣红的几大CNN网络都是在海量数据训练后发布出来,被ML各界小弟众星捧月般,用problem-dependent的数据集进行Fine-tuning的。

  • 特征有层级结构,越是底层的特征,越是不论什么领域的图像都会具备的,比如边,角,弧线等,越往上的特征越是problem dependent
  • 先用通用的大数据集(如ImageNet)进行预训练,再用手头问题的小数据集(problem dependent data)进行高层网络的fine-tuning,底层网络的特征抽取部分就可以不动。

Word Embedding —— 陈年老账,馥郁芳香

单词Wi用Onehot编码,之后乘以矩阵Q后获得向量C(Wi),每个单词的C(Wi)拼接,上接隐层,然后接softmax去预测后面应该后续接哪个单词。这个C(Wi)是什么?这其实就是单词对应的Word Embedding值。矩阵Q包含V行,V代表词典大小,每一行内容代表对应单词的Word embedding值。只不过Q的内容也是网络参数,需要学习获得,训练刚开始用随机值初始化矩阵Q,当这个网络训练好之后,矩阵Q的内容被正确赋值,每一行代表一个单词对应的Word embedding值。

于是这个用于语言模型任务的网络就有了个副产品。
(PS:这个模型出品于2003年,只感叹生不逢时,怀才不遇,蛰伏十年,直到2013年时来运转,深度学习大火才绝处逢生)

Word2Vec

  • 网络结构与NNLM相似,但训练方法不一样。NNLM主要训练目的是语言模型,embedding仅仅是个无心插柳的副产品,但Word2Vec单纯就是要embedding的,所以他的训练方式可以完全针对拿到好的embedding
  • CBOW:从一个句子里把一个词扣掉,要求网络预测被扣掉的词
  • Skip-gram:输入某个单词,要求网络预测它的上下文单词
  • 典型用法:one-hot层到embedding层的权重矩阵其实就是那个Q,可以用与训练好的Q初始化权重矩阵,之后选择frozen还是fine-tuning。
  • 但存在问题:多义词。Embedding对同一个单词的编码区分不开它的多重含义。尽管训练的时候上下文单词不同,但是同一单词不同语义的上下文信息都会编码到同一个embedding中。
  • Static embedding:每个单词的embedding表达是固定的,在调用的时候不会根据上下文场景的变化而改变

ELMo —— 简洁优雅的解决多义词问题

a) ELMO是“Embedding from Language Models”的简称,其实这个名字并没有反应它的本质思想,提出ELMO的论文题目:“Deep contextualized word representation”更能体现其精髓。

b) Dynamic tuning of word embedding
我先学好一个static embedding,在使用的时候,根据这个单词的上下文调整它自己的embedding,这样就能表达它在上下文中的含义。

c) 采取两阶段训练过程
第一阶段利用语言模型进行预训练,第二阶段在做下游任务时,从预训练网络中提取对应单词网络各层的Word embedding作为新特征。正向和反向LSTM的embedding直接concatenate。第一层句法信息更多,第二层语义信息更多。
在这里插入图片描述
d) 如何使用
输入的句子先通过ELMo网络,这样每个单词都获得了三个embedding,之后给予这三个embedding权重(这个权重可以学习),累加求和,整合成最后的embedding。

e) Feature-based Pre-Training
ELMo给下游任务提供的是每个单词的特征形式。

f) 弱点

  • LSTM抽取特征能力远弱于Transformer
  • 正向反向LSTM隐层以拼接的方式融合特征,融合能力偏弱(只是一种怀疑,没有实验证明)

GPT —— Fine-tuning模式的开创者

  • 单项语言模型:利用语言模型进行预训练,但预测一个词时只能看到它的context-before
  • 第二阶段的使用:做下游任务时,网络结构需要与GTP看齐,先用与训练好的参数初始化GPT网络。改造很方便,只需要在输入部分施工即可。
    在这里插入图片描述
  • 弱点:把语言模型改造成双向的就好了。

BERT —— 大红大紫,普度众生

a) 预训练
采用双向语言模型(有文章说ELMo的还不算绝对的双向,因为是两个单项的拼接)

b) 下游任务的网络结构改造
在这里插入图片描述

  • 句子关系类
    输入:加start,end,两个句子之间加分隔符;输出:在start对应的Transformer最后一层上加softmax分类层
  • 句子分类
    输入:加start,end;输出:在start对应的Transformer最后一层上加softmax分类层
  • 序列标注
    输入:加start,end;输出:Transformer最后一层的每个单词对应位置加softmax分类
  • 阅读理解(QA)
    输入:加start,end,question和paragraph之间加分隔符;输出:paragraph的每个单词对应的Transformer最后一层输出上加softmax分类(start/end/spam)

c) 融合众派高法,且预训练是一个多任务过程

  • Masked LM:本质思想是CBOW以及完形填空。
  • Next Sentence Prediction:因为语言模型单词粒度的训练到不了句子关系这个层级,增加这个任务有助于下游句子关系类的任务。

d) 输入部分处理

  • 句子通过分隔符分割,开头结尾都有标识符号。
  • 每个单词有三个embedding:1)本身的embedding;2)positional embedding;3)sentence embedding,把句子整体的embedding给每个单词。三个embedding的叠加作为最终的输入。

结语

a) 未来两年NLP模式

  • Transformer无处不在。
  • 两阶段模型:超大规模预训练+具体任务Fine-tuning(具体任务网络结构需要与预训练网络结构类似)。
  • 两阶段模型:超大规模预训练+具体任务特征补充(具体任务可以自由设计网络结构)。

b) 预训练能力觉醒的本质 —— 引入大量先验语言学知识

  • 利用了大量无标注的自然语言文本。
  • 当手头任务标注信息有限时,很多语言学现象覆盖不到,泛化能力就弱。先验语言学特征集成了大量通用知识增强模型泛化能力。
  • 如何引入先验的语言学知识其实一直是NLP尤其是深度学习场景下的NLP的主要目标之一,不过一直没有太好的解决办法,而ELMO/GPT/Bert的这种两阶段模式看起来无疑是解决这个问题简洁优雅的办法。

c) 当前NLP发展方向

  • 更强的特征抽取器。
  • 如何优雅地引入大量无监督数据中包含的语言学知识(这里更强调优雅而不是引入)。

来源:本文图片来自 https://zhuanlan.zhihu.com/p/49271699

猜你喜欢

转载自blog.csdn.net/weixin_43928665/article/details/90105279