NLP之Bert相关算法介绍
Bert相关算法介绍
主线
Bert的历史沿革是什么,继承了什么,创新了什么,为什么效果那么好,主要原因是什么
预训练
为什么可以复用
- 底层特征比较通用、可以复用
为什么还要做fine-tuning?
- 高层特征任务有相关性
预训练的特点
-
图像预训练
- 一方面ImageNet是图像领域里有超多事先标注好训练数据的数据集合,分量足是个很大的优势,量越大训练出的参数越靠谱;
另外一方面因为ImageNet有1000类,类别多,算是通用的图像数据,跟领域没太大关系,所以通用性好
- 一方面ImageNet是图像领域里有超多事先标注好训练数据的数据集合,分量足是个很大的优势,量越大训练出的参数越靠谱;
word embedding
神经网络语言模型
-
NNLM
-
概念
- 根据句子里面前面的一系列前导单词预测后面跟哪个单词的概率大小(理论上除了上文之外,也可以引入单词的下文联合起来预测单词出现概率)
-
方法
-
单词用onehot编码
-
乘以矩阵Q
- 获得向量C(W)
-
-
拼接每个单词的C(W)
-
链接隐含层
- 接softmax预测应该接哪个单词
-
-
Q
-
包含v行,v代表词典大小
- 每一行对应的单词的word embedding
- Q需要学习
-
-
总体看
- 输入一个词的上文,预测下文
-
-
word2vec
-
分类
-
CBOW
- Continous bag of words model
-
Skip-gram
- Continous skip-gram model
-
-
方法
- Word2Vec的网络结构其实和NNLM是基本类似的
-
CBOW
- 用一个词的上下文,预测中心词
-
Skip-gram
- 用一个,预测它的上下文单词
-
目标
-
构建word embedding结果
- 一个单词表达成word embedding后,比较容易找到语义相近的其他词汇
-
使用Word2Vec或者Glove,通过做语言模型任务,就可以获得每个单词的Word Embedding
-
效果
- 提升1-2个点
有什么问题?
-
多义词问题
- 因此一个词只对应一行embedding
-
静态的word embedding
- 训练好之后每个单词的表达就固定住了,以后使用的时候,不论新句子上下文单词是什么,这个单词的Word Embedding不会跟着上下文场景的变化而改变
-
如何解决多义词问题?
- EMLO
ELMO
名称
-
Embedding from Language Models
-
论文题目
- Deep contextualized word representation
概念思路
- 先用语言模型学好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。
- 实际使用Word Embedding的时候,单词已经具备了特定的上下文了,可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。
- 所以ELMO本身是个根据当前上下文对Word Embedding动态调整的思路。
算法思路
-
第一个阶段是利用语言模型进行预训练;
-
第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding作为新特征补充到下游任务中。
-
网络结构
-
双层双向LSTM
- 图中左端的前向双层LSTM代表正方向编码器,输入的是从左到右顺序的除了预测单词外Wi的上文Context-before;
- 右端的逆向双层LSTM代表反方向编码器,输入的是从右到左的逆序的句子下文Context-after;
- 每个编码器的深度都是两层LSTM叠加。
-
-
每个单词都能得到对应的三个Embedding
-
单词的Word Embedding
-
第一层LSTM中,对应单词位置的Embedding
- 句法信息更多
-
第二层LSTM中,对应单词位置的Embedding
- 语义信息更多
-
-
如何使用
-
每个单词得到3个Embedding
-
每个embedding给一个权重a
- 权重可以学习
-
-
-
特点
-
Feature-based Pre-Training
- 提取特征,然后整体整合在一起
-
是否解决多义词问题?
- 第一层LSTM编码了很多句法信息,这在这里起到了重要作用
-
缺点
- LSTM抽取特征能力,弱于Transformer
- 拼接方式双向融合特征的融合能力偏弱
-
GPT
Generative Pre-Training
- 生成式的预训练
- 基于Fine-tuning模式的预训练模型
预训练思路
- 第一个阶段是利用语言模型进行预训练
- 第二阶段通过Fine-tuning的模式解决下游任务。
如何用在下游任务
- 对于分类问题,不用怎么动,加上一个起始和终结符号即可;
- 对于句子关系判断问题,比如Entailment,两个句子中间再加个分隔符即可;
- 对文本相似性判断问题,把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;
- 对于多项选择问题,则多路输入,每一路把文章和答案选项拼接作为输入即可
与其他方法的区别
-
与ELMO的区别
-
用了transformer的结构,而不是LSTM
-
没有上下文同时预测
- 仅用上文预测
-
Bert
几大类语言任务
-
序列标注
-
中文分词
-
词性标注
- 命名实体识别
-
-
-
分类任务
- 文本分类
- 情感计算
-
句子关系判定
- QA等
- 判断语义关系
-
生成任务
- 机器翻译
- 文本摘要
roberta
更长的时间,更大的batch size,更多的数据进行训练
- 训练方式发生变化
去掉BERT中的NSP目标(next sentence prediction)
-
如何选取sentence组合
-
segment组合
-
sentence组合
-
full sentence组合
- 没有NSP任务等
-
跨越文档的sentence组合
-
在更长的句子上进行训练
根据训练数据动态地改变mask的模式
- BERT的masking是在预处理时进行的,导致这种Masking是静态的,每个epoch的masking结果一致。原本的BERT为了避免这种情况,把数据复制了十份,然后进行了十种不同的静态masking。这样在40个epochs的训练中,同样masking的数据会在整个训练中出现四次。
- RoBERTa中使用Dynamic Masking,只是在序列送入模型中的时候才去进行动态的masking,这样在更大的数据集上或者更多步数的训练上会表现更好
学习链接
https://zhuanlan.zhihu.com/p/49271699
Transformer
-
https://zhuanlan.zhihu.com/p/37601161
- 相关基础知识
-
https://jalammar.github.io/illustrated-transformer/
- Jay Alammar可视化地介绍Transformer的博客文章
-
http://nlp.seas.harvard.edu/2018/04/03/attention.html
- 哈佛大学NLP研究组写的“The Annotated Transformer. ”
- 代码原理双管齐下,讲得非常清楚。
作者介绍:
- 点赞
- 收藏
- 关注作者
评论(0)