关注点1:Transformer
1. embedding层:把离散字符转化为数字
Embedding
1.1 token embeddings:用于区分文本内容,1个文本字符对应768维的向量,1个token embeddings输出N(字符数)x 768维的矩阵
1.2 segment embeddings:用于区分哪一句话,输出也是N x 768维的矩阵,同一句对应的向量是相同的
1.3 position embeddings:用于确定文本位置,输出也是N x 768维的矩阵
因此得到3个N x 768矩阵,3个矩阵相加,输出一个新的N x 768的矩阵
2. self-attention层:
attention机制
通过神经网络,计算句子中字符的权重w,从而对输入进行一定的加权(更关注某部分)ps: 原始输入文本x和decoder后的输出文本yt-1均需输入attention层进行权重的计算。
self-attention
区别于传统attention,不涉及输出的再输入。WQ,WK,WV是线性层(768x768),与X(10x768)相乘后得到10x768矩阵,随机初始化后训练更新。
QxKT计算出文本的权每个字与其他字的相关性,softmax归一化得到权重,是self-attention,dk涉及多头机制,再乘以V(和原本数量相乘)
获得文本与其他文本的相关
多头机制:把原本的10x768矩阵切分为12个10x64的矩阵,在不同子空间训练模型,获得12个完全不同的self-attention矩阵,最后拼接,从而提升模型效果。
多头机制multi-head
3. LayerNorm(残差机制)
把embedding层和self-attention层输出相加,有助于保留一些原始信息,防止过拟合
LayerNorm(残差机制)
4. Feed Forward层(前馈层)
注:相比于CNN,RNN,随着长度增加,距离很远的数据也不会丢失。优势:数据更全、更完整
优势:无距离限制,且可以并行,速度较快
调用方式
from transformers import BertModel
bert
关注点2:预训练方法
通过海量的不需要标注的数据训练得到bert预训练参数
随机遮挡: 学习每个字的意思
预测是否为下一句话:学习两句话之前的关联
Bert实际上就是个文本编码器,将文本向量化,本质上与LSTM,CNN等没有差异(ps.文本长度不一致,需要用0补齐)
下游任务中的使用
预训练模型的发展
1. ELMo
使用的是双向LSTM,预训练任务是单向预测(前N个字预测后1个字)
2.GPT
GPT:使用transformer,预训练任务还是单项预测,增加了有监督训练
3. Ernie-baidu
百度模型:在中文上表现更好,加入了先验知识,但导致不通用
4. Ernie-Tsinghua
清华模型:引入知识图谱
5. GPT2
GPT2:语言生成能力强,大数据大模型
6. UNILM
弥补bert生成文本的缺陷,通过MASK机制增加单向LM
7.Transformer-XL&XLNet
Transformer中position embedding有长度限制
一次bert解决不了,往下传递
相对位置编码
8.Roberta
Roberta
9.SpanBert
改变训练目标对模型也有提升
10. ALBERT
解决模型参数过多的问题
11. T5
利用seq2seq方式:迈向NLP的大一统
12.GPT3
超大模型,目标是不要调参
未来方向
参考资料:
八斗学院讲座笔记(侵删)