BERT、RoBerta、XLNet、ALBERT对比

BERT

BERT堆叠了多层Transformer的Encoder模块,设计了两个任务来完成预训练:

  • Masked LM:随机mask掉15%的token,其中80%替换为[MASK],10%替换为其它token,10%保留原单词。
  • Next Sentence Prediction(NSP):从训练集中抽取A和B句,50%为A的下一句,50%为其它句子。

RoBerta

静态Mask VS 动态Mask
  • 静态Mask:BERT对每一个序列随机选择15%的tokens替换成[MASK],而一旦被选中,之后的N个epoch就不能再改变。
  • 动态Mask:RoBERTa一开始把预训练的数据复制10份,每一份都随机选择15%的Tokens进行Mask,也就是说,同样的一句话有10种不同的mask方式。然后每份数据都训练N/10个epoch。
NSP VS w/o NSP

RoBerta去除了NSP任务,每次输入连续的多个句子,直到最大长度512(可以跨文章)。这种训练方式叫做(FULL - SENTENCES),而原来的Bert每次只输入两个句子。

hyper-parameter
  • 更大的batch_size
  • 更多的数据
  • 更高的学习率
  • 更长时间的训练

XLNet

AR LM:利用上下文单词预测下一个单词的一种模型。但是在这里,上下文单词被限制在两个方向,要么向前,要么向后。

AE LM:从损坏的输入中重建原始数据的一种模型。它可以同时在向前向后两个方向看到上下文。

BERT存在的问题:

  • 掩码导致的微调差异:预训练阶段因为采取引入[Mask]标记来Mask掉部分单词的训练模式,而Fine-tuning阶段是看不到这种被强行加入的Mask标记的,所以两个阶段存在使用模式不一致的情形,这可能会带来一定的性能损失。
  • 预测的标记彼此独立:Bert在第一个预训练阶段,假设句子中多个单词被Mask掉,这些被Mask掉的单词之间没有任何关系,是条件独立的,而有时候这些单词之间是有关系的,XLNet则考虑了这种关系。

XLNet在输入侧维持表面的X句子单词顺序,在Transformer内部,看到的已经是被重新排列组合后的顺序,是通过Attention Mask来实现的。从X的输入单词里面,也就是Ti的上文和下文单词中,随机选择i-1个,放到Ti的上文位置中,把其它单词的输入通过Attention Mask隐藏掉,于是就能够达成我们期望的目标。

双流自注意力机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pdYDRPDI-1616684108139)(C:\Users\swift\AppData\Roaming\Typora\typora-user-images\image-20210325222438568.png)]

  • content stream self-attention h θ ( x z ≤ t ) h_{\theta}\left(\mathbf{x}_{\mathbf{z}_{\leq t}}\right) hθ(xzt):标准的Transformer计算,能同时接触到单词x的特征信息和位置信息。
  • query stream self-attention g θ ( x z < t , z t ) g_{\theta}\left(\mathbf{x}_{\mathbf{z}_{<t}}, z_{t}\right) gθ(xz<t,zt):只能接触到单词x的位置信息。

计算过程如下:
g z t ( m ) ←  Attention  ( Q = g z t ( m − 1 ) , K V = h z < t ( m − 1 ) ; θ ) , (  query stream: use  z t  but cannot see  x z t ) h z t ( m ) ←  Attention  ( Q = h z t ( m − 1 ) , K V = h z < t ( m − 1 ) ; θ ) , (  content stream: use both  z t  and  x z t ) \begin{aligned} &g_{z_{t}}^{(m)} \leftarrow \text { Attention }\left(\mathrm{Q}=g_{z_{t}}^{(m-1)}, \mathrm{KV}=\mathbf{h}_{\mathrm{z}<t}^{(m-1)} ; \theta\right), \quad\left(\text { query stream: use } z_{t} \text { but cannot see } x_{z_{t}}\right)\\ &h_{z_{t}}^{(m)} \leftarrow \text { Attention }\left(\mathrm{Q}=h_{z_{t}}^{(m-1)}, \mathrm{KV}=\mathbf{h}_{\mathrm{z}<t}^{(m-1)} ; \theta\right), \quad\left(\text { content stream: use both } z_{t} \text { and } x_{z_{t}}\right) \end{aligned} gzt(m) Attention (Q=gzt(m1),KV=hz<t(m1);θ),( query stream: use zt but cannot see xzt)hzt(m) Attention (Q=hzt(m1),KV=hz<t(m1);θ),( content stream: use both zt and xzt)

其它改进措施:
  • 引入Transformer-XL:相对位置编码以及分段RNN机制。解决Transformer对长文档应用不友好的问题。
  • 使用更多更高质量的数据。

ALBert

词嵌入向量参数的因式分解(Factorized embedding parameterization)

V × H > V × E + E × H V \times H > V \times E + E \times H V×H>V×E+E×H

在BERT、XLNet中,词表的embedding size(E)和transformer层的hidden size(H)是等同的,所以E=H。但实际上词库的大小一般都很大,这就导致模型参数个数就会变得很大。为了解决这些问题他们提出了一个基于factorization的方法。

跨层参数共享(Cross-layer parameter sharing)

每一层的Transformer可以共享参数,这样一来参数的个数不会以层数的增加而增加。

段落连续性任务(Inter-sentence coherence loss)

后续的研究表示NSP过于简单,性能不可靠。使用段落连续性任务。正例,使用从一个文档中连续的两个文本段落;负例,使用从一个文档中连续的两个文本段落,但位置调换了。


参考

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值