关注点1:Transformer
1. 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层:
通过神经网络,计算句子中字符的权重w,从而对输入进行一定的加权(更关注某部分)ps: 原始输入文本x和decoder后的输出文本yt-1均需输入attention层进行权重的计算。
区别于传统attention,不涉及输出的再输入。WQ,WK,WV是线性层(768x768),与X(10x768)相乘后得到10x768矩阵,随机初始化后训练更新。
QxKT计算出文本的权每个字与其他字的相关性,softmax归一化得到权重,是self-attention,dk涉及多头机制,再乘以V(和原本数量相乘)
多头机制:把原本的10x768矩阵切分为12个10x64的矩阵,在不同子空间训练模型,获得12个完全不同的self-attention矩阵,最后拼接,从而提升模型效果。
3. LayerNorm(残差机制)
把embedding层和self-attention层输出相加,有助于保留一些原始信息,防止过拟合
4. Feed Forward层(前馈层)
注:相比于CNN,RNN,随着长度增加,距离很远的数据也不会丢失。调用方式
from transformers import BertModel
关注点2:预训练方法
通过海量的不需要标注的数据训练得到bert预训练参数
Bert实际上就是个文本编码器,将文本向量化,本质上与LSTM,CNN等没有差异(ps.文本长度不一致,需要用0补齐)
预训练模型的发展
1. ELMo
2.GPT
3. Ernie-baidu
4. Ernie-Tsinghua
5. GPT2
6. UNILM
7.Transformer-XL&XLNet
8.Roberta
9.SpanBert
10. ALBERT
11. T5
12.GPT3
参考资料:
八斗学院讲座笔记(侵删)