关于ELMo、Transformer及Bert的部分疑难问题解答

ELMo其实是考虑了目标信息的前后内容,来对目标进行预测:使用深层Bi-RNN对序列进行学习,可以学习到目标的前后文信息,以此来更好的表示目标数据。ELMo将目标数据的每层的前后文信息进行串接,并对多层的串接结果进行加权求和(权值是学习的目标之一)。

关于transformer的原理介绍,有很多地方有详细的解答,本文中我针对具体的问题,做出一些相关的解答。

Transformer中的self-attention:同一个序列中的不同元素间进行互注意。由于是序列自身的attention,因此是self-attention。

Transformer在机器翻译中的decoder:1)在进行translation操作时,会在解码器的开始输入start token,来便于后续生成;2)在encoder-decoder的阶段,decoder提供Q(即前面已经生成好的序列经过self-attention得到的输出),encoder提供K和V(即encoder对输入序列经过一系列attention得到的输出);3)masked是将所有不应该看到的序列元素屏蔽掉,如预测3个词时,应该看不到第3个词及后面所有的词的信息。

Bert训练中的mask问题:在训练中,对于输入的句子I want to go to school。如果要对want进行预测,则我们转换成token序列为:I [mask] to go to school,并利用want的前后文(I、to go to school)对[mask]进行预测得到want。

Bert对于sentence pair的一致性判断、single sentence的分类判断:都是将输入句子经过bert后,转换成对开始符[CLS]的分类问题。

Bert对SQuAD的答案判断:将问题Q和文档D当作sentence pair进行输入,并初始化一个表示start的向量s和一个表示end的向量e。在训练时(假设标准答案在文档中的词序编号为开始s_id和结束e_id),使用Bert对sentence pair对进行embedding:1)对s与D的每个token embedding进行dot product计算,并对计算结果使用softmax来预测s_id;2)对e与D的每个token embedding进行dot product计算,并对计算结果使用softmax来预测e_id。在预测时,使用同种方法执行,不过此时的s和e已经学习得到。

微调Bert进行下游其他任务的应用:主要是微调了Bert内部的最后几层encoder,以及后续的linear classifier层的参数信息。

Inputs_ID:将输入的句子进行单词的token,如palying=play+##ing,然后再对token(play和##ing)执行embedding。
Positional Encoding:transformer不像RNN一样是序列化的操作,它是平行化的操作,这也是其能够执行self-attention的原因。正式因为如此,它没有区分序列数据中每个元素的顺序信息。因此,位置编码可以帮助实现顺序信息,该编码由cos和sin固定计算(pos表示元素在序列中的位置,i表示该元素特征的第i维),不是学习得到的。
transformer中的layer normlize:Batch Normalization是在不同数据的同一维度间进行norm,而Layer Normalization是在同一数据的不同维度间进行norm。两者都是Norm处理的方法,使得训练中的参数分布更稳定一些,保证梯度进行有效的学习。
multi-head的意义以及处理方式:使用多组(数量不限,自选)权值,分别对输入的数据特征进行变换。对于每组权值得到的变换,只针对该组进行self-attention,最后多组self-attention的结果进行串接。multi-head的意义在于:不同的attention会注意到不同的特征性质,这样操作便于找到多种潜在特征。

为什么要进行除以维度的开方:当Q和K的维度很大时,导致点乘的数量级太大,使得softmax的梯度过小,造成梯度消失。因此,这么操作是为了进行维度惩罚。具体的数学解释,https://www.zhihu.com/question/339723385知乎高赞1我觉得很好。

Bert的编解码器组成:正如其论文题目所写“Bidirectional Encoder Representations from Transformers”,Bert只包含了Transformer的编码器部分,而并没有包含其解码器部分。

Bert的训练过程:①论文中说Bert在训练时执行了两个不同的任务(词汇预测和句子关系计算),实际上这两个任务是同时进行的,这体现在其损失函数上(next_loss = self.criterion(next_sent_output, data["is_next"]),mask_loss = self.criterion(mask_lm_output, data["bert_label"]),loss = next_loss + mask_loss)。②在对[MASK]位置的词进行预测时,由于Bert是一个语言模型训练器,个人认为句子中所有的词汇都会被预测(从双向),但是只有[MASK]位置的损失才会被计算。

Bert的输入介绍:

1)token embeddings:词的信息,在英文中是wordpiece,它是指将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得一个折中的平衡。例如示例中‘playing’被拆分成了‘play’和‘ing’。

2)segment embeddings:上下句的信息。在很多NLP任务中(如QA和语义相似性等任务),token encoding仅学到了一些token级的特征,是不够的,还期望能捕捉到一些句子级别的特征。在上图中用[SEP]将句子分成左右字句,EA和EB分别代表左子句和右子句。

3)position embeddings:位置信息。因为transformer没有rnn的循环和cnn的卷积操作,故没有序列概念(缺乏序列可能会导致语义相反),所以就将位置作为特征做embeddings。在transformer中,计算token的位置信息是巧妙的借用了波的概念,既可以模拟信号周期性变化,又将值做了归一化,在一定程度上增加了模型的泛化能力。

 

至于其他的一些关于ELMo和Transformer的问题,哈工大的博士生忆臻的公众号整理的不错:https://mp.weixin.qq.com/s/fNBAz0ZWGpcBqcUyUFqTYg

https://mp.weixin.qq.com/s/X6O8LXMDcCoS1_yE0ia5WQ

https://mp.weixin.qq.com/s/F06nmJWUNQT1_Hq2dkSYhQ

http://nlp.seas.harvard.edu/2018/04/03/attention.html

Transformer代码详解:http://nlp.seas.harvard.edu/2018/04/03/attention.html

可视化讲解Transformer:http://jalammar.github.io/illustrated-transformer/

从word embedding到Bert:https://cloud.tencent.com/developer/article/1492430

Bert输入的参考文献:https://zhuanlan.zhihu.com/p/62308732

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值