原文出处为这里,张老师关于注意力的讲解 非常的通俗易懂,读了这篇文章之后,写下这篇博客作为笔记。极其推荐看一下这篇原文。
此外,本篇文章还涉及了Bert的原理以及变形总结,是对这个视频做的总结bert及其变种原理
关于key,value,query
其中对于机器翻译来说,将source翻译为target,在注意力机制中可写作
source中是key和value的键值对,对于翻译每一个target的单词,就是向source中进行一次query。其中key为source中的词向量,value为在encoder端的每个单词的hj。
Attention(query, source) =
∑
s
i
m
i
l
a
r
i
t
y
(
q
u
e
r
y
,
k
e
y
i
)
∗
v
a
l
u
e
i
\sum similarity(query, keyi) * value_i
∑similarity(query,keyi)∗valuei
Embedding简述
embedding是一种词的表示形式,它允许机器学习算法理解具有相似含义的词。
用一个地位向量表示一个事物
- word embedding
- item embedding
- graph embedding
word Embedding
代表方法:word2vec, GloVe
word2vec:两层神经网络,CBOW, Skip-gram
Transformer
看上面推荐的transformer文章
Bert
1.1 预训练模型
定义:首先用大量无监督语料进行语言模型预训练(Pre-training),再使用少量标注语料进行微调(Fine-tuning)来完成具体的NLP任务(分类,序列标注,句间关系判断和机器阅读理解等)
优势:
- 近乎无限量的优质数据
- 无需人工标注
- 一次学习多次复用
- 学习到的表征可在多个任务中进行快速迁移
1.2 基本特征
1.4 bert输入
token embedding, segment embedding, position embedding
1.5 预训练
MLM(mask language model)
在训练是随机从输入语料上mask掉一些单词,通过上下文预测该单词。MLM任务可以解决语言模型中上下文语境缺失的问题
NSP
将句子A和B输入BERT,预测B是否是A的下一句,使用[CLS]编码信息进行预测。
A与B的关系:50%的句子保留抽取到的连续两句话(next),50%将B替换为从模型中随机抽取的句子(not next)
1.6 BERT 微调
微调的各种模型 这个链接当中包含了各种BERT微调模型以及结果。
RoBERTA(Robustly Optimized BERT pre-training Approach)
主要贡献
- 在MLM任务中,使用dynamic masking而不是static masking
- 仅用MLM任务,丢弃NSP任务
- 更多的与训练数据集
- 更大的批次以及更多的steps
- 更大的词表,使用byte-level BPE(BBPE)作为tokenizer
bert: 随机15%的token进行mask,这个过程是在数据预处理阶段进行的,而非模型训练阶段
RoBERTa: 复制同一语句10次,对每一句进行随机15%的token进行mask,假设训练40轮,美以乱读入一个不同的sentence。
特点: 当与寻来你轮数较大或者数据量较大时,动态掩码方法能够提高数据的复用效率,泛化能力更强
在roberta中,进一步将与寻来你数据的规模扩展至160G是bert的10倍
更多批次和steps:roberta采用8k的批次大小,并且进一步将训练步长加大至500k
使用更大的批次能够有效减小训练时长,当固定批次大小并增加训练步数之后,也能得到更好的实验结果
使用更大的词表,使用BBPE的方法作为tokenizer
BERT里:采用一个30k大小的wordPiece词表,wordPiece就是将单词进行简单分割,比如把looking——>look, ing大致意思还是接近的。这种词表的弊端是如果输入文本无法通过词表中的wordPiece字词进行拼接组合,则会映射到“unknown”这种未登录词的表示
RoBERTa里:采用SentencePiece这种字节级别的Byte-level的PBPE词表的好处是能够编码任意输入文本,因此不会出现未登录词的情况。
具体可参考深入理解NLP Subword算法:BPE、WordPiece、ULM, NLP三大Subword模型详解:BPE、WordPiece、ULM
和浅谈Byte-Level BPE
区别: BPE选择频数最高的相邻子词合并,而WordPiece选择能够提升语言模型概率最大的相邻字词加入词表
ALBERT(A Lite Bert)
- cross-layer parameter sharing 跨层参数共享
引入跨层参数共享机制,使每一层Tranformer的权重都是一样的。 其中有三种共享选择:1)共享multi-head layer 2) 共享feed forward layer 3)上面两者均共享。从而提升了训练速度 - factorized embedding layer of parameterization 词向量因式分解
引入词向量饮食分解方法解耦词向量维度E和Transformer隐含层维度H
效果:引入词向量饮食分解后,词向量部分的计算复杂度从O(VH)降低至O(VE + EH)。当Transformer隐含层维度H远大于词向量维度E时,参数量降幅尤为明显。
例子: 假设Transformer的隐含层维度H=1024,词向量维度为E=128,词表大小为V=30000
在原始的BERT中,由于H=E,词向量矩阵的参数两计算为:V x H = 30000 x 1024 = 30720000
引入词向量因式分解后,词向量矩阵的参数量计算为: V x E + E x H = 30000 x 128 + 128 x 1024 = 3971072 - Sentence Order Prediction 句子顺序预测
ALBERT的预训练任务包含2个:MLM和SOP(Sentence Order Prediction)句子顺序预测。
SOP是一个二分类任务,目标是寻来你模型来预测给定句子对中的句子顺序是否被交换
在SOP任务中,正例的构成与NSP一致,而负例的构成是直接对调两个文本片段的位置
目标:让模型能够学习到席位的语义差别及语篇连贯性,相比于NSP任务难度更大。
句子A -> 句子B :正例
句子B -> 句子A :负例
DistillBERT( a distilled version of BERT)
knowledge distillation 知识蒸馏
一种常用的知识迁移方法,通常由教师(Teacher)模型和学生(Student)模型构成
该技术能够将较大的模型压缩到一个较小的模型,同时基本保持原模型的效果
贡献:
- Student Model (即DistillBERT), 的基本结构是一个6层的BERT模型,(原BERT用了12层)同时去掉了标记类型向量(Token-type Embedding)和池化模块(Pooler)
- 训练与BERT基本一致,只是在计算LOSS时有区别(Triple Loss 三重损失)
- DistillBERT采用了MLM进行预训练,丢弃了NSP
用一个简单的模型(DistillBert, Student)去不断逼近原本复杂的模型(Bert, Teacher)
损失:
XLNET
参考XLNET详解
参考Bert及其变形