# Fiction-Bert

ACL 2020《Don't Stop Pretraining: Adapt Language Models to Domains and Tasks》中指出：预训练语言模型的预训练语料与下游任务词汇领域差别越大，在特定领域继续预训练就越有必要，并加以大量实验验证该想法的正确性。

为了在米读小说中的业务场景下取得更好的效果，我们从米读小说的书库中收集了所有在架书籍的前一百章内容作为预训练语料，共计15G。

ICLR 2020 的一项工作《LARGE BATCH OPTIMIZATION FOR DEEP LEARNING: TRAINING BERT IN 76 MINUTES》，提出了一种新型优化器LAMB，更好地支持large batch，以及更快地收敛模型。\
\
我们基于哈工大开源的roberta-wwm模型参数，在米读小说语料上继续预训练。

与原始roberta预训练方式有以下几点不同：

* 采用了whole word mask(wwm)方式，更好地支持中文语言形式。
* 由于计算资源有限，roberta将预训练语料重复10次，我们没有进行重复。
* 采用了LAMB优化器，而不是ADAM。

在使用LAMB优化器时，踩了一个坑，这里记录一下：

根据论文中的指导，对于不同的batch\_size，需要采用不同的Learning Rate以及Warmup Ratio。bert对于Learning Rate特别敏感，不论是在预训练阶段还是fine-tune阶段，Learning Rate的影响是至关重要的。

在第一次预训练的时候，将batch\_size调小后，没有将learning\_rate一并修正，导致训练后的预训练模型，在小说ner下游任务中，F1值不增反减4个点。

![《LARGE BATCH OPTIMIZATION FOR DEEP LEARNING: TRAINING BERT IN 76 MINUTES》](https://576935259-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MDzFHPbPyJ1xwxFkx0K%2F-MM53EVODfNLr1Ox8PCG%2F-MM5CJx9UQM6WPVkI5u8%2Fimage.png?alt=media\&token=a1b65bd5-2bc1-4e3e-9182-f2ee96a4d54e)

我们使用2张V100，max\_len=512，batch\_size=256。

根据上表所列，推测出合适的learning\_rate=0.000442，warmup ratio=1/640
