阅读材料
关于BERT的解读有很多,我在学习的时候主要阅读了以下的几篇分享:
- BERT原始论文,BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- ELMo原始论文 Deep contextualized word representations
- nlp的巨人肩膀
- The Illustrated BERT, ELMo, and co
- Transformer的可视化
- The Annotated Transformer
关于Pre-train
作者在Github的BERT的README里提到了几点需要注意的事项:
- 如果domain的数据集够大,可以在BERT Google model基础上进行额外的pre-training,也可以理解为对BERT原始的语言模型进行fine-tuning
- BERT的paper中pre-train的lr为1e-4,如果进行额外pre-training 应该设小一点的lr,如2e-5。我自己的实验也表明了,lr=1e-4会得到比较差的结果。但是
- sequences 越长带来的显存压力越大,而且是和sequence length的平方呈线性相关。
关于fine-tune Google的原始语言模型
用Domain数据集对Google的原始语言模型进行fine-tuning,之后再训练任务的方式(即ULMFit论文采用的模式)不一定会有效果。
我的实验发现,这种方式对于小数据集有比较大的提升,但是对大数据集基本没差异。猜测,
- 一方面,对于大数据集,BERT在训练任务的同时就完成了在Domain上的fine-tuning。
- 另一方面,即便是Domain相关的语料,但是其中大部分的字词都是和Domain无关的,相关的仅仅是部分实体,因此再基于这份语料训练语言模型,其实已经起不到多大的作用。
还有一个方式是改造BERT里的Masked Language Model任务,BERT是随机Mask一些token来预测,但是对于中文其实是Mask了一些的字(因为BERT的谷歌模型对中文是按字来处理的)。或许我们选择Mask Domain下的一些entity来预测的方式能更好地学习Domain下的语言模型。近日,百度也放出的工作ERNIE也是采用的这种思想,其在中文多项任务上超过了BERT。
ERNIE模型的一个例子如下:
Learnt by BERT :哈 [mask] 滨是 [mask] 龙江的省会,[mask] 际冰 [mask] 文化名城。
Learnt by ERNIE:[mask] [mask] [mask] 是黑龙江的省会,国际 [mask] [mask] 文化名城。
复制代码
ERNIE使模型根据上下文就能推断出整个实体。当然ERNIE还引入了对话语料来改造 Next Sentence Prediction的任务。ERNIE的论文还没有放出,后续可以关注一下。
欢迎访问个人博客Alex Chiu的学习空间