关注点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

超大模型,目标是不要调参

未来方向
参考资料:
八斗学院讲座笔记(侵删)