Recap Language Model (LM) -- 自然语言处理中的预训练,对于Bert、ELMO、GPT的一些思考

文章目录

    • 相关文章
    • 思考
        • 为什么ELMO可以解决一词多义?
        • GPT引入网络层来fine-tune的方式真的更好吗?
        • 为什么GPT的Multi-task learning好呢?
        • 如何理解Bert的Mask方式(Masked LM)?

以前看过Bert的相关文献后,一段时间后老是忘了,所以写这篇文章是为了整理一下自己的一些思考,和记录一下讲的很好的文章
这里的问题大多属于自己的见解,有问题的地方还请谅解和指出:)

相关文章

(感觉看这三篇就够了)

  1. 从 Word Embedding 到 Bert 模型 — 自然语言处理中的预训练技术发展史:深入浅出,有看不懂的地方可以参考3中的ppt
  2. 浅显易懂的Transformer英文讲解
  3. 自然语言处理中的语言模型预训练方法
  4. 一些问题的解答

思考

为什么ELMO可以解决一词多义?

EMLO这篇文章的标题–Contextualized Representation-- 其实就很好的解答了这个问题,它采用两个方向互反的LSTM网络层 来capture这种context的信息,以获得word在 特定sentence下的含义。这样就解决了一词多义的问题。

对传统的Word2Vec来讲,则我们只是利用单个的embedding representation来表示word,这样如果是多义词的话,单个embedding的表示就显得过于单一和不足了。

GPT引入网络层来fine-tune的方式真的更好吗?

  1. 首先回顾一下两种方式:

    传统的fine-tune模式:代表为Word2Vec,ELMO等,即我们通过pre-train好的网络层得到 每个token的embedding(或者sentence的embedding)注意,这里embedding并不是pre-trained network的最终输出,而是我们取了中间层的输出,不明白可以见下图,然后输入到下游网络来进行训练。这些得到的embedding我们可以在下游训练的时候来fine-tune
    Recap Language Model (LM) -- 自然语言处理中的预训练,对于Bert、ELMO、GPT的一些思考_第1张图片

    GPT的fine-tune模式:这里和CNN的预训练很相似。直接采用pre-train好的网络层(transformer)来作为下游网络的底层来参与训练。
    Recap Language Model (LM) -- 自然语言处理中的预训练,对于Bert、ELMO、GPT的一些思考_第2张图片
    这里最初看的时候,我其实是很疑惑的。因为pre-train的时候应该是预测下个word是什么词才对,那这样的输出作为下游网络的输入,会不会不太好?
    Recap Language Model (LM) -- 自然语言处理中的预训练,对于Bert、ELMO、GPT的一些思考_第3张图片
    我们从原论文上来讲(上面这个英文部分看不懂可以直接跳过),pre-train这个阶段输入为: U = { u 1 , . . . , u n } U = \{u_1,...,u_n\} U={u1,...,un},其中 u 1 u_1 u1代表input sentence在位置1上对应的token。那么这个阶段的objective是根据上文(context before)来预测即将出现的那一个词。也就是说我们从第一个词开始预测,直到预测完最后一个词。那么这之后的下一步,就是预测 u n u_n un后面的那个词了。而这里呢,我们其实并不会预测 u n u_n un后面的词了,而是直接根据输入的整个sentence,来得到那个"task classifier"向量,也就是下图的红色部分 Recap Language Model (LM) -- 自然语言处理中的预训练,对于Bert、ELMO、GPT的一些思考_第4张图片
    然后接下来在不同的task上来fine-tune,我们其实就完成了multi-task learning了:Text prediction 和 Task classifier同时训练。其实原论文中也这样提到了,这样做可以加速收敛和提高generalization。如下:

    We additionally found that including language modeling as an auxiliary objective to the fine-tuning
    helped learning by (a) improving generalization of the supervised model, and (b) accelerating
    convergence.

  2. 比较

    GPT的fine-tune模式的优点就是能够引入到pre-train学到的东西到新的任务里去。这一点我觉得CNN的初始化里面诠释的很好,如下:(即底层的特征可复用性)
    Recap Language Model (LM) -- 自然语言处理中的预训练,对于Bert、ELMO、GPT的一些思考_第5张图片
    那么这样做就可以针对不同的task,来对pre-train的网络层进行调整,已得到更好的representation了。我个人是这样理解的,在GPT的原文中并没有具体解释这一点,而是直接引出了这样的fine-tune方式,可能因为效果比较好吧:)

  3. 进一步探讨

    其实有了以上的分析,我们还是有一点困惑的。因为我们pre-train的时候,训练的objective就是根据Context来预测指定的word。但是在下游的task与pre-train的任务好像没有关联呀,这样直接拿来做下游任务的网络层,会不会不太好? 前面的解释好像并不能完美的解答这个问题。

    其实我们这里仔细回顾一下EMLO,它其实是取的LSTM的输出来作为下游网络的embedding的。如果这一步我们可以理解的话,那么我们把LSTM换位transformer来理解就可以了。这里transformer出来的embedding我们可以用来做任何的task。在pre-train的时候我们可以用一层的linear+softmax来预测下一个word。而在下游网络里,我们也完全可以用一层新的linear+softmax来完成对应task的objective。总而言之,我们其实只是利用了pre-trained transformer所学到的knowledge,以及它所输出的representation。而后面我们会紧跟着一层layer,来将transformer所输出的representation进行一个转换,得到我们指定task上的表达。

为什么GPT的Multi-task learning好呢?

如何上个问题明白了,这个问题其实很简单了。Multi-task learning其实指的就是我们同时对网络层的两个输出进行优化,即同时优化前面提到的Text prediction和Task classifier.

对于Task classifier,我们是在指定的task上来对它进行优化和调整,这样我们就能完成下游网络的objective。

而仍然对Text prediction来进行优化,这样就相当于:我们根据小的corpus(比如特定domain的语料)来对网络层进行fine-tune。这样我们就能得到更好的representation了。也因此,在更好的representation下,我们训练task classifier的速度和效果也相应的能够更好了。

如何理解Bert的Mask方式(Masked LM)?

作者:NLP与人工智能
链接:https://www.jianshu.com/p/46cb208d45c3
BERT 在训练时只预测 [Mask] 位置的单词,这样就可以同时利用上下文信息。但是在后续使用的时候,句子中并不会出现 [Mask] 的单词,这样会影响模型的性能。因此在训练时采用如下策略,随机选择句子中 15% 的单词进行 Mask,在选择为 Mask 的单词中,有 80% 真的使用 [Mask] 进行替换,10% 不进行替换,剩下 10% 使用一个随机单词替换。例如句子 “my dog is hairy”,选择了单词 “hairy” 进行 Mask,则:

  • 80% 的概率,将句子 “my dog is hairy” 转换为句子 “my dog is [Mask]”。
  • 10% 的概率,保持句子为 “my dog is hairy” 不变。
  • 10% 的概率,将单词 “hairy” 替换成另一个随机词,例如 “apple”。将句子 “my dog is hairy” 转换为句子 “my dog is apple”。

如上,这是论文里解释的翻译。其实乍看一下还是不容易理解的。
我们对比一下Bert和ELMO、GPT,他们在pre-train的策略上是有很大不同的。Bert通过[Mask]标记来表示要预测的词,然后输入Net进行预测。这样的策略其实很好理解,因为它考虑到了上下文的信息(Context Before and Context After),这一点也是它与ELMO、GPT很重要的一点区别。

而对于ELMO、GPT而言(这里ELMO我们只考虑单个LSTM网络,也就是说它是单向的,只考虑了Context Before或者Context After),它们都是直接通过输入W的Context Before或者Context After来完成Prediction的,W为需要预测的词。所以他们可以直接fine-tune,因为他们并没有对input tokens进行改动。

正是由于Bert在pre-train时对input tokens进行了改动,所以它不能直接进行fine-tune了(因为模型会被训练去针对[Mask]标记)。为了解决这个问题,所以作者采用了如上的trick:被选中的需要预测的单词并不是真的被替换成了[Mask]。举个例子,对于句子:Donald Trump is the president of the United States. 我们想要让模型去预测“President”这个word。那么我们在pre-train的时候,输入给模型的tokens可能有如下三种:
带[Mask]的

Donald Trump is the [Mask] of the United States

以及不带[Mask]的原句子

Donald Trump is the president of the United States

以及替换为other的句子

Donald Trump is the hero of the United States

注意,以上这三个句子,我们都要求让模型去预测位置5上的单词(“president所在位置”)。于是,通过这样的training,我们就能够bias模型,让其不针对[Mask]来进行预测了。这样也在一定程度上,能够让Model对别的token也进行预测。

你可能感兴趣的:(自然语言处理,人工智能,机器学习)