参考链接:
https://www.zhihu.com/question/322034410/answer/794201004
elmo通过双向lstm构造了双向
gpt利用了transformer中的decoder结构,且目标是语言模型,通过上文预测下文,无论是decoder的天然mask结构(掩盖下文),还是学习目标本身(通过上文预测下文),导致gpt本身是单向的模型
bert如何解决呢:
1、首先利用transformer的encoder部分,天然双向,词与词之间两两组合
2、利用MLM(mask language model)模型,加强模型对上下文的认知
BERT 作者表示受到完形填空任务的启发(其实我认为这里确实如@张俊林所言,有 CBOW 的影子,结合 CBOW 思考 BERT 的处理方式会非常好理解),不再是 GPT 中预测整个输入句子的输出,而是改为只预测这个句子中的某个词,并且把输入中这个词所在位置挖空并用"[MASK]"替换,随后输出层在被挖掉的词位置,接一个分类器得到被mask掉的词概率大小。
mask策略:
选取语料中所有词的15%进行随机mask
选中的词在80%的概率下被真实mask
选中的词在10%的概率下不做mask,而被随机替换成其他一个词
选中的词在10%的概率下不做mask,仍然保留原来真实的词
mask策略意图:
为什么还要有一部分的 mask 输入一个实际的词,这样做的好处是尽量让训练和finetune的时候输入保持一致,因为finetune的时候输入中是没有“[MASK]”标记的,对于保留为原来的真实词,也就是真的有10%的情况下是泄密的(占所有词的比例为15% * 10% = 1.5%),作者说这样能够给模型一定的bias,相当于是额外的奖励,将模型对于词的表征能够拉向词的真实表征(此时输入层是待预测词的真实embedding,在输出层中的该词位置得到的embedding,是经过层层Self-attention后得到的,这部分embedding里多少依然保留有部分输入embedding的信息,而这部分就是通过输入一定比例的真实词所带来的额外奖励,最终会使得模型的输出向量朝输入层的真实embedding有一个偏移,而如果全用mask的话,模型只需要保证输出层的分类准确,对于输出层的向量表征并不关心,因此可能会导致最终的向量输出效果并不好);最后,BERT对选中的词在10%的概率下不做mask,而是被随机替换成为一个其他词,这样做的目的,BERT也给出了他们的解释,也就是上方原文引用部分的第一段:因为模型不知道哪些词是被mask的,哪些词是mask了之后又被替换成了一个其他的词,这会迫使模型尽量在每一个词上都学习到一个全局语境下的表征,因而也能够让BERT获得更好的语境相关的词向量(这正是解决一词多义的最重要特性)。
简单来讲:
1、为什么要做mask:
为了理解双向的语义
2、为什么要保留原来的词:
为了训练和finetune的一致性,因为fineturn阶段是没有mask标记的,所以如果没有原来的词,全都是mask的话,模型的目标为倾向于学习的分类目标,而不是词向量的表达。
3、为什么要随机替换原来的词
因为模型不知道哪些词是被mask的,哪些词又被替换成了另外一个的词,所以会迫使模型在尽量在每一个词上都学习到一个全局语境下的表征
网友评论