论文阅读
bert是google提出的一种基于transformer的深度语言模型,其最大的特点一是使用transformer作为特征提取器,替换了之前的RNN;二是双向编码的深度模型。了解该模型最直接的方式就是阅读论文原文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding。
模型解析
bert模型是一种基于transformer多层堆砌的深度语言模型,其深度可以达到L = 24 层。相较于之前深度模型GPT和EMLo,bert的创新一方面是使用transformer作为特征提取器,另一方面是实现了真正的双向编码。但是bert最大的创新点在于它的预训练,为了使模型适用于token-level的任务,bert采用了Masked LM作为一个预训练任务,另外,为了使模型适用于sentence-level的任务,bert同时采用了下一句子预测作为一个预训练任务。关于模型的详细介绍可以参考文献:NLP必读:十分钟读懂谷歌BERT模型 和【NLP】Google BERT详解。
模型实战
bert模型采用一种预训练+微调的方式训练模型,使用非常方便,对于大部分任务而言,使用预训练的模型,在bert最后的隐藏层的输出上加上一层网络层,然后使用自己的数据集微调模型参数就可以达到非常不错的效果。使用bert做文本分类任务的可以参考相关文献:BERT使用详解(实战)。
源码阅读
bert源码中比较重要的两个脚本文件是modeling.py和run_classifier.py,其中文件modeling.py定义了BertModel,基于transformer的模型架构在这个文件实现,而文件run_classifier.py定义了基于bert模型的输出构建自己数据上微调模型的一些方法。可以参考文献一行行阅读源码:BERT系列(一)——BERT源码分析及使用方法 和 BERT实战(源码分析+踩坑)。
参考文献:
- https://arxiv.org/pdf/1810.04805.pdf
- https://zhuanlan.zhihu.com/p/51413773
- https://zhuanlan.zhihu.com/p/46652512
- https://www.jianshu.com/p/bfd0148b292e
- https://zhuanlan.zhihu.com/p/82131880
- https://zhuanlan.zhihu.com/p/58471554