BERT:Bidirectional Encoder Representations from Transformers

本文是在transformer(attention is all you need)的基础上的,可参考博主之前博客:paper:Attention Is All You Need
之前已经有很多blog介绍了,这里引用一下,剩下的主要记录下自己的认识和体会

模型分析:

  • BERT详解
  • bert *博主推荐*
  • 从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史 *博主推荐*
  • 博主详细注释版本代码
  • 谷歌BERT模型深度解析
  • 干货 | BERT fine-tune 终极实践教程

模型代码解读:

  • 官方源码
  • 谷歌BERT预训练源码解析(一):训练数据生成
  • 谷歌BERT预训练源码解析(二):模型构建
  • 谷歌BERT预训练源码解析(三):训练过程
  • 源码解读系列

关于BERT其他相关资料:

  • 其他资料汇总

paper 作者的一些issue

  • paperauthor

questions:

  • Why 15% is masked rather all of the word like word2wec?
  • when fintune,why get_pooled_output layer just use the first tokens’ output?

tricks:

  • initilizer: tf.truncated_normal_initializer(stddev=initializer_range)
  • embedding size 一般设置成了hidden_size
  • loss = loss+1e-5

不同:

  • self attention之后添加projection ,也就是transformer:multi head attention + add&norm + ffn layer + add&norm,而在bert中变成了:multi head attention + projection layer + add&norm + ffn layer + add&norm
  • layer norm的结构稍有变化
  • ffn layer中的激活函数改为gelu

model整体流程图:
BERT:Bidirectional Encoder Representations from Transformers_第1张图片
详细流程:

  1. word_embedding+sentense_mask_embedding+position_embedding
  2. layer_norm_and_dropout
  3. get mask attention
  4. multi head self attention
    • Q、K、V dense layer
    • self attention = s o f t m a x ( Q K d m o d e l ) V softmax(\frac {QK}{\sqrt{d_{model}}})V softmax(dmodel QK)V 中间包括:self attention + mask attention和dropout
    • projection + dropout
    • layer norm+residual
    • ffn layer :intermediate (dense layer(激活函数gelu))+output(dense layer)+dropout
    • layer norm+residual 这里得到sequence output
  5. 取sequence output中每个case的第一个输出向量(CLS对应的向量),并经过dense layer(激活函数为tanh),得到pooled_output
  6. sequence output中取出mask的位置的vector,过dense layer,激活函数为gelu,并对结果进行layer_norm,得到结果mask output
  7. matmul(mask output,embedding table)+bias,后交叉熵损失函数mask_loss
  8. pooled_output过dense layer,然后交叉熵函数得到sequence_loss
  9. 最终的loss=mask_loss+sequence_loss

特色:

  • mask language model 双向,从unidirection到 比direction,which allows us
    to pre-train a deep bidirectional Transformer;(对比gpt和elmo)
  • 在此基础上添加“next sentence prediction”

你可能感兴趣的:(自然语言处理,tensorflow,深度学习,自然语言处理)