1.原文解读
- Bidirectional Encoder Representations from Transformers,bert,根据字面意思,训练的其实还是一个embedding,而且还是一个字级别的word embedding,通过这个embedding,有两种用法,一种是将其作为特征,训练特定的任务时候,不学习这些参数,通过设计特定的架构来实现不同的任务,第二种是将其作为骨干网络,然后加简单的全联接层和softmax来实现其他特定的任务。
- 感觉主要的贡献,其实是设计了两个“无监督”的task,去学习这些embedding,有点像数学建模?第一个是Masked LM,训练的其实是一个随机的完型填空任务,通过训练这个任务,来学习每个词也就是token的embedding表达,完型填空学的可能是句子内的词之间的一个关系。另一个任务是 Next Sentence Prediction,输入两个句子,判断第二个句子是不是前一个句子的下一个句子,数据很好建立,正样本可以直接去两个连续的句子得到,负样本在不是连续的句子的语料中,随机选一个就好,论文说学习的是句子间的关系。总感觉少了点什么,设计一个更好的task,是不是就能更好的学习句子之间的关系了?或者类似n-gram的意思,多学几个效果会更好?
- 训练Masked LM时,抽取15%的词汇来做完型填空,其他的不用,做完型填空时,80%几率用mask代替,做完型填空task,来学词的embedding,10%用其他词来替换,10%用原来的词。为啥不全部用mask替换呢?做完型填空任务时,输入的时候会有mask这个token,就是根据这个token的embedding,来预测原始的mask代表的是哪个词的,这里学到的可能是上下文词与缺失的这个mask的关系,那么在fine-tuning阶段做特定的任务是,希望得到的embedding最重要的是没个词真正代表的意思,而不仅仅是上下文得到的信息。还有 10% random token 是因为如果都用原 token,模型在预训练时可能会偷懒,不去建模单词间的依赖关系,直接照抄当前词???总感觉有些牵强。
来自https://zhuanlan.zhihu.com/p/46833276 - 不同的任务只需要在bert基础上做一些简单的修改,然后fine-tuning就行,例如SQuAD,其实就是预测一个start位置和end位置,NER任务就是预测每个token属于哪一类的问题,详细见:
2.其他的一些阅读资料
- NLP常见任务:http://mamicode.com/info-detail-2566121.html
- BERT解析:https://www.cnblogs.com/huangyc/p/9898852.html
- 如何评价 BERT 模型?:https://www.zhihu.com/question/298203515/answer/509923837
- 论文解读:BERT模型及fine-tuning:https://zhuanlan.zhihu.com/p/46833276
- 使用预训练语言模型BERT做中文NER:https://github.com/ProHiryu/bert-chinese-ner