关于Google Bert中的一些问题

1.Bert 中的双向transformer是什么

Bert中提出了一个双向transformer,看着感觉很神秘,但是看下论文中的图这个其实就是transformer中的encoder层,很普通的结构。

关于Google Bert中的一些问题_第1张图片可以看到gpt中用的是decoder结构,当前词语只能看到它前面的字,看不到它后面的字。ELMo虽然也是双向的,但是它是left-to-right和right-to-left分开训练再融合。实现过transformer或者encoder-decoder结构的都知道,做一个encoder结构肯定要比那种decoder结构的要容易的多,但是为什么之前没人这么做,这就引出了第二个问题。

2.双向深层表示中的自我可见问题

不知道这个问题有没有一个专业的名字,我自己叫它自我可见,我们以上面bert结构为例,任务是训练一个语言模型,目标是预测下一个词。如果是decoder的形式,深层网络每一时刻并不会包含后面的节点的信息。ELMo的双向LSTM也只是在各自方向上的深度,只能在最后一层将两部分信息融合。看下图,这是一个双向RNN的例子,如果只有一层那么没问题,但是假如我们做了深层RNN,比如两层,第二层的RNN将用到第一层的hidden信息,那么第二层在预测how的时候,实际上已经有了backward RNN中来的输出how的信息了。这也就是为什么ELMo只能在最后一层融合。

关于Google Bert中的一些问题_第2张图片

3.Bert的mask和input

关于Bert的介绍网上有很多,这里主要讨论下我认为比较有意思的两点,一点就是用mask来解决上面提到的自我可见问题。

首先就是input

关于Google Bert中的一些问题_第3张图片

token就是字符的embedding,position这里也是id值,通过网络来生成position而不是自己编码。这里segment embedding就是一个01标记,区分当前是第一句话还是第二句话。

mask

Rather than always replacing the chosen words with [MASK], the data generator will do the following: • 80% of the time: Replace the word with the [MASK] token, e.g., my dog is hairy → my dog is [MASK] • 10% of the time: Replace the word with a random word, e.g., my dog is hairy → my dog is apple • 10% of the time: Keep the word unchanged, e.g., my dog is hairy → my dog is hairy.

mask就是15%的概率随机遮挡文章中的一些词,然后预测不是预测下一个词,而是只预测mask位置的词。也就是说,如果一个词被mask了,那么输入的也是mask。只有遇到mask才输出预测这个词是什么。这样做是为了解决2中的问题,但是这样会减慢训练速度,不过Google强大的算力可以为所欲为了。只用mask的话,在实际应用中并没有mask标签,会导致训练的网络和实际应用有偏差,所以分别有10%的概率用原词和随机替换的词。

参考

https://medium.com/@plusepsilon/the-bidirectional-language-model-1f3961d1fb27

https://www.reddit.com/r/MachineLearning/comments/9nfqxz/r_bert_pretraining_of_deep_bidirectional/

https://github.com/Y1ran/NLP-BERT--ChineseVersion

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

https://github.com/Y1ran/NLP-BERT--ChineseVersion

你可能感兴趣的:(机器学习)