转载

Bert论文理解

Bert论文理解

关于Bert, 最近实在太火了,我看了Bert的原论文、Jay Alammar(博客专家)关于BERT的介绍、

还有知乎张俊林大佬写的从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

稍微有点理解,所以记录下来。

Bert的网络结构

? Bert是一个通用的预训练模型,可以先在海量的未标注数据上,训练Bert模型,得到Bert的参数,之后

在下游任务中,利用标注的数据,对Bert模型进行微调(fine-tuning)。我做过的一个中文命名实体识别

任务:使用google在海量的中文语料中训练出的Bert模型,得到中文字向量。然后字向量作为双向LSTM输入,

最后双向LSTM的输出作为softmax层的输入,用于分类。

? 官方的Bert模型分为两种,一个是 B e r t b a s e Bert_{base} 、一个是 B e r t l a r g e Bert_{large} B e r t b a s e Bert_{base} ,transformer encoder有12层

(L=12),隐藏层维度768维(H=768), 头自注意力机制数量为12(A=12),共有110M个参数。 B e r t l a r g e Bert_{large} :L=24、H=1024、A=16, 共有340M个参数。准确得来说,Bert模型就是一个12(24)层的transformer encoder。

Bert的输入输出

Bert输入可以是单个连续的句子(论文里面提到其实不一定需要真实的句子,只要是连续的片段就可以),也是

连续的两个句子。句子的开头是**[CLS]**标识,标识句子的开头,如果输入的是两个连续的句子,则两个句子中间用

**[SEP]标识隔开,并且会有单独的标识来标记那些tokens属于句子A, 那些tokens属于句子B。[CLS]**最后隐藏层的输出为C向量,后续用于句子的分类任务等。每个Tokens的最后的隐藏层输出为 T T

在输入Bert模型前,词都需要向量化,论文中词向量化融合了Position EmbeddingsSegment Embeddings, Token Embeddings, 其中Tokens Embeddings使用的是WordPiece Embeddings(使用的过程中发现其会将一个单词切分)。

Bert的预训练任务

为了获得Bert模型参数,论文中进行了两个无监督任务,一个是Masked LM, 一个是Next Sentence Prediction

  • Masked LM

    Masked LM任务是随机mask一定比例的tokens,之后预测这些tokens. 和完形填空有点像。实验中,随机mask掉15%的WordPiece形式的tokens。Masked LM任务有一个缺点:预训练和微调之间的不匹配,因为

    微调阶段看不见在预训练阶段masked掉的token。为了解决这个问题,被选择mask的tokens,训练的时候

    有80%的时间处于masked状态,10%时间处于原来未改变的状态,10%的时间处于随机状态。

  • Next Sentence Prediction

    许多下游任务,包括QA等都是依靠理解两个句子之间的关系。为了使模型能理解句子之间的关系,所以进行了Next Sentence Prediction任务。任务的每个输入包含两个句子,句子A、句子B,50%的时间句子B是句子A的下一句。上文提到的C向量在NSP任务中就是用来判断句子B是否是句子A的下一句。

问题

Bert为什么强调双向的Transformer?

Bert使用的是Transformer的encoder,encoder过程中,自注意力机制可以编码两边单词。可能是为了强调对比于GPT, GPT使用的是Transformer的decoder,decoder过程中,右边的单词被mask调了,所以自注意力机制只能看见左边的单词。

参考

bert原论文地址

The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning)

从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史

正文到此结束
本文目录