九、BERT 扩展

9.1 BERT-wwm-ext

  1. 原始版本的 BERT 采用了WordPiece tokenize 来预处理,即把每个单词拆解一些 wordpiece token

    • wordpiece token 是由 wordpice model:WMP 生成的,最初是为了解决谷歌语音识别系统遇到的日语/韩语分割问题。该模型是数据驱动,并且确保任何可能的字符序列的确定性分割。

      如:文本 Jet makers feud over seat width with big orders at stake 被分割成的 wordpiece token 为:

      1. _J et _makers _fe ud _over _seat _width _with _big _orders _at _stake

      其中_ 表示单词的开始标记。

    • 这种预处理为 BERT 带来一个严重的问题:有可能仅仅对一个单词的某个部分 wordpiece token 执行了 mask。此时 MLM 模型预测的只是单词的一部分,相当于模型对一个错误的目标进行预测。这非常不利于模型的学习。

    有鉴于此,谷歌后续发布了 BERTWhole Word Masking:WWM 版本 BERT-WWM。在该版本中,一个单词要么没有被 mask、要么该单词所有的 workpiece token 都被 mask

    事实上,百度也提出了类似思想的 ERNIE 模型。

  2. BERT-wwm-extBERT-WWM 的中文版本,该模型对中文的整个汉语单词而不是单个汉字进行mask ,在最新的中文维基百科上训练。

    • 仅仅利用中文维基百科训练,没有利用任何额外的数据,也未执行繁体-简体转换。因为该模型是为简体中文、繁体中文提供一个通用的 NLP 模型。

    • 其目标是:在不改变现有 BERT 的网络结构、超参数的情况下,为中文 BERT 提供简单的、可扩展性的方法从而提高模型的能力。

    • 论文的主要贡献:

      • 预训练好了一个中文 BERT-WWM 模型供人们使用。
      • BERT/BERT-WWM/ERNIE 上做了一些实验,验证该方法的有效性。
      • 给出了中文 NLP 预训练的一些技巧。
  3. 数据预处理:

    • 下载最新的 wikipedia dump 并用 WikiExtractor.py 预处理,最终解压成 1307个文件。其中包含简体中文、繁体中文,无需执行繁体到简体的转换。

    • 清除 html 标记并拆分文档,最终得到 1360万行文本。

    • 通过哈工大的 LTP 分词工具来分词

    • 使用 create_pretraining_data.py 将文本转换成预训练样本,从而作为 BERT 的输入。

      一共生成两组训练集,其中一组样本的最大长度为 128 个 token,另一组样本的最大长度为 512 个 token

    • 采用 BERT-WWM 相同的网络结构和超参数(如 mask 比例)。

    预处理的例子如下所示:

    九、BERT 扩展 - 图1

  4. 可以将 BERT-wwm-ext 视为 BERT 的一个添加了单词边界的补丁版,而不是一个新的模型。

    • 预训练阶段:直接参考 BERT
    • 微调阶段:直接使用 BERT-wwm-ext 替代原来的中文 BERT 预训练模型,甚至不需要修改配置文件。
  5. 预训练参数:

    • 使用 LAMB 优化器替代 BERTAdam 权重衰减优化器。

    • 首先在最大长度 128 的样本上训练,batch-size = 2560,初始化学习率 1e-4warm-up 比例 10%,训练 10万步。

      然后在最大长度 512 的样本上训练,batch-size = 384,初始化学习率 1e-4warm-up 比例 10%,也训练 10万步。

    预训练语料及其参数如下表所示:

    九、BERT 扩展 - 图2

  6. 中文微调任务:涵盖了从 sentence-leveldoc-level 、各种文本长度的任务。

    • 机器阅读理解 Machine Reading Comprehension:MRC :从给定文本中提取出连续的片段来回答问题。

      数据集:

      • CMRC 2018:由中国信息处理学会、 IFLYTEK 和哈工大发布的机器阅读理解数据集。
      • DRCD:由 Delta 研究所发布的繁体中文机器阅读理解数据集,通过工具将它转换为简体中文。
      • CJRC:来自中国法律判决文件的数据集,类似 CoQA。其中包括 yes/no 二元答案问题、span-extraction 问题、以及没有答案的问题。
    • 命名实体识别 Named Entity Recognition: NER:识别出文本中的命名实体。其中命名实体的标签包括:O, B-PER, I-PER, B-ORG, I-ORG, B-LOC, I-LOC

      使用 seqeval16 来评估模型在 Precision,Recall,F-score 方面的得分。

      数据集:

      • People Daily :人民日报网站收集的新闻数据,包含官方正式新闻。
      • MSRA-NER:微软亚洲研究院发布的命名实体识别数据集。
    • 自然语言推理 Natural Language Inference:NLI :判定两个给定句子之间的蕴含关系。

      数据集:XNLI

    • 情感分析 Sentiment Analysis:SA :判定给定的句子情感是积极的还是消极的。

      数据集:

      • ChnSentiCorp 数据集。该数据集包含酒店、书籍和 PC 等多个领域的评论。
      • Sina Weibo 数据集:包含12万个带有正面、负面情感标签的新浪微博短文本。
    • 句子语义匹配 Sentence Pair Matching:SPM :判断给定两个句子是否语义相似。

      数据集:

      • LCQMC :哈工大 2018年发布的语义相似数据集
      • BQ Corpus:由哈工大和 WeBank 在 2018年 EMNLP 上发布的语义相似数据集
    • 文档分类 Document Classification:DC:判断一篇文章属于哪个类别。

      数据集:THUCNews:包含不同主题(金融、体育、科技…)的新浪新闻,是 THUCTC 的一部分。

    为公平起见,对同一个任务的不同模型BERT/BERT-wwm-ext/ERNIE 采用相同超参数(如下图所示),其中 † 表示该数据集在 BERT 中也被评估, ‡ 表示该数据集在 ERNIE 中也被评估 。

    九、BERT 扩展 - 图3

    为确保结果可靠性,每个任务进行十次相同的实验并给出最高分和平均分(括号里给出的得分)。其中最佳初始化学习率通过验证集来挑选。

    • 机器阅读理解 MRC 结果:

      • 最佳初始化学习率:

        1. BERT BERT-wwm ERNIE
        2. CMRC 数据集: 3e-5 3e-5 8e-5
        3. DRCD 数据集: 3e-5 3e-5 8e-5
        4. CJRC 数据集: 4e-5 4e-5 8e-5
      • ERNIEDRCD没有表现出竞争力,说明它不适合处理繁体中文文本。

        检查 ERNIE 的词汇表之后发现繁体中文字符被删除了,因此导致它在繁体中文任务上性能较差。

      • CJRC 中,BERT-wwmBERTERNIE 有所改善但是不是很显著,有两个原因:

        • CJRC 中的文本是以专业的方式撰写。这说明专业领域的任务需要进一步的专业适配。
        • 在专业领域,中文分词器的分词准确率也有所下降。这导致依赖于中文分词的 ERNIE/BERT-wwm 性能下降。

      九、BERT 扩展 - 图4

      九、BERT 扩展 - 图5

      九、BERT 扩展 - 图6

    • 命名实体识别 NER 结果:

      • 最佳初始化学习率:

        1. BERT BERT-wwm ERNIE
        2. 人民日报 数据集: 3e-5 3e-5 5e-5
        3. MSR-NER 数据集: 3e-5 4e-5 5e-5
      • 平均而言 ERNIE 性能最好,因为 ERNIE 采用了更多的训练数据。

      九、BERT 扩展 - 图7

    • 自然语言推理 NLI结果:

      最佳初始化学习率:

      1. BERT BERT-wwm ERNIE
      2. XNLI 数据集: 3e-5 3e-5 5e-5

      九、BERT 扩展 - 图8

    • 情感分析 SA 结果:

      最佳初始化学习率:

      1. BERT BERT-wwm ERNIE
      2. ChnSentiCorp 数据集: 2e-5 2e-5 5e-5
      3. 新浪微博 数据集: 2e-5 3e-5 3e-5

      九、BERT 扩展 - 图9

    • 句子语义匹配 SPM 结果:

      最佳初始化学习率:

      1. BERT BERT-wwm ERNIE
      2. LCQMC 数据集: 2e-5 2e-5 5e-5
      3. BQ 数据集: 2e-5 3e-5 3e-5

      九、BERT 扩展 - 图10

    • 文档分类 DC 结果:

      最佳初始化学习率:

      1. BERT BERT-wwm ERNIE
      2. LCQMC 数据集: 2e-5 2e-5 5e-5

      九、BERT 扩展 - 图11

  7. 中文 NLP 任务经验技巧:

    • 初始学习率是最重要的超参数。应该永远对其择优,从而获得能力更强的模型。
    • 由于 BERTBERT-wwm 在维基百科上训练,因此它们在正式文本上表现较好;而 ERNIE 在包括网络文本在内的更大数据的训练,因此对微博等非正式文本更有效果。
    • 处理繁体中文时,选择 BERT 或者 bert-wwm

9.2 RoBERTa

  1. 预训练模型能够显著的提升任务效果,但是不同预训练模型的比较非常困难。

    • 首先,每个预训练模型的训练成本很高,无法一一训练并进行比较。
    • 其次,不同预训练模型通常是在不同规模大小的数据集上训练的,难以评估效果的好坏是预训练模型引起的还是预训练数据引起的。
    • 最后,超参数的选择对预训练模型的表现影响很大。同一个预训练模型的不同超参数,其比较结果会有很大不同。
  2. RoBERTa 主要工作是复现 BERT,然后对 BERT 的模型架构、训练目标、训练细节(如数据集大小、训练时间)的重要性进行探索,从而提出了改进方案,这个改进方案称为 RoBERTa

    主要修改:

    • 更大的 batch size、更多的数据、更长的预训练时间
    • 移除 NSP 任务
    • 使用更长的输入序列
    • 使用动态 mask
  3. RoBERTa 采用 160 G 训练文本,远超 BERT16G 文本,其中包括:

    • BOOKCORPUS 和英文维基百科:原始 BERT 的训练集,大小 16GB
    • CC-NEWS:包含2016年9月到2019年2月爬取的6300万篇英文新闻,大小 76 GB(经过过滤之后)。
    • OPENWEBTEXT:从 Reddit 上共享的 URL (至少3个点赞)中提取的网页内容,大小 38 GB
    • STORIESCommonCrawl 数据集的一个子集,包含 Winograd 模式的故事风格,大小 31GB

9.2.1 实验探索

  1. 静态 mask VS 动态 mask

    • 原始静态 mask:在预处理的时候对整个数据集执行一次 mask,后续的每个训练步都采用相同的mask。这是原始 BERT 的做法。

    • 修改版静态mask:在预处理的时候将数据集拷贝 10 次,每次拷贝采用不同的 mask 。同时每个拷贝被训练 4 个 epoch

      这等价于原始的数据集采用10种静态 mask 来训练 40个 epoch

    • 动态 mask:并没有在预处理的时候执行 mask,而是在每次向模型提供输入时动态生成 mask

    不同模式的实验效果如下表所示。其中 referenceBERT 用到的原始静态 maskstatic 为修改版的静态mask

    九、BERT 扩展 - 图12

  2. 使用 NSP VS 抛弃 NSP

    • SEGMENT-PAIR + NSP:输入包含两部分,每个部分是来自同一文档或者不同文档的 segmentsegment 是连续的多个句子),这两个 segmenttoken 总数少于 512 。预训练包含 MLM 任务和 NSP 任务。

      这是原始 BERT 的做法。

    • SENTENCE-PAIR + NSP:输入也是包含两部分,每个部分是来自同一个文档或者不同文档的单个句子,这两个句子的token 总数少于 512 。预训练包含 MLM 任务和 NSP 任务。

    • FULL-SENTENCES:输入只有一部分(而不是两部分),来自同一个文档或者不同文档的连续句子,token 总数不超过 512 。如果跨文档,则在文档末尾添加文档边界token

      预训练不包含 NSP 任务。

    • DOC-SENTENCES:输入只有一部分(而不是两部分),来自同一个文档的连续句子,token 总数不超过 512 。

      预训练不包含 NSP 任务。

    不同方式的效果如下图所示。结果表明:

    • 使用 SENTENCE-PAIR + NSP 有损于下游任务。猜测的原因是:单个句子对于长期依赖性建模效果不好。

    • 移除 NSP 任务相比原始 BERT 效果更好。猜测的原因是:原始 BERT 实现采用的是 SEGMENT-PARI 输入,但是移除了 NSP 任务。

    • 在移除 NSP 的两种策略中,DOC-SENTENCES 效果比 FULL-SENTENCES 更好。

      但是 DOC-SENTENCES 策略中,位于文档末尾的样本可能小于 512 个 token。为了保证每个 batchtoken 总数维持在一个较高水平,需要动态调整 batch-size

    九、BERT 扩展 - 图13

  3. 更大的 batch-size

    Neural Machine Translation:NMT 任务研究中发现:当学习率适当增加、batch-size 非常大时,可以提高训练速度、提升模型能力。

    经过实验观察发现,大的 batch-size 对于 BERT 也有类似帮助。

    注:在相同的训练代价下,其中 训练代价 = steps x batch_size

    九、BERT 扩展 - 图14

  4. BPE 文本编码:Byte-Pair Encoding:BPE 是字符级和单词级表示的混合,它不是完整的单词而是 sub-word 单元。

    BPE 通过训练语料库的统计分析得到的,其词表大小通常在 1万到 10万之间。

    有两种 BPE 实现方式:

    • 基于 char-level :原始 BERT 的方式,它通过对输入文本进行启发式的词干化之后处理得到。
    • 基于 bytes-level:与 char-level 的区别在于bytes-level 使用 bytes 而不是 unicode 字符作为 sub-word 的基本单位,因此可以编码任何输入文本而不会引入 UNKOWN 标记。

    当采用 bytes-levelBPE 之后,词表大小从3万(原始 BERTchar-level )增加到 5万。这分别为 BERT BASEBERT LARGE 增加了 1500万和2000万额外的参数。

    有研究表明,这样的做法会导致轻微的性能下降。但是 SoBERTa 的作者相信:这种统一编码的优势会超过性能的轻微下降。

  5. 汇总这些改进点即可得到一个更稳定Roustly、更好optimizedBERT 实现 approch,称之为 RoBERTa 。其中包括:动态掩码、抛弃 NSPFULL-SENTENCES、更大的 batch-sizebytes-level BPE

    除此之外还包括一些细节,包括:更大的预训练数据、更多的训练步数。

    九、BERT 扩展 - 图15

9.2.2 实验结果

  1. 在微调实验中,BERT,RoBERT, XLNET 都采用了 BERT LARGE 的网络参数:九、BERT 扩展 - 图16 ,参数总量大约 3.55 亿。

  2. 微调任务:

    • General Language Understanding Evaluation: GLUE:是一组各种 NLP 文本任务。

    • Stanford Question Answering Dataset:SQuAD:一个大型阅读理解数据集,包含 SQuAD 1.1SQuAD 2.0 。其中 SQuAD 1.1 中的问题总是有答案,而 SQuAD 2.0 中的问题可能没有答案。

    • ReAding Comprehension from Examinations: RACE:包含了12到18岁中国初中、高中英语考试中的近10万个问题,答案由人工专家生成。

      涉及到挑战性的推理问题,所以它是最困难的阅读理解数据集之一。另外,该数据集每篇文章平均超过300个段落,远远超过其它流行的阅读理解数据集(如 SQuAD ) 。 因此该数据集对于长文本理解来说是个具有挑战性的 baseline

  3. GLUE 微调结果:

    目前有两种微调策略:

    • single-task:基于每个GLUE 任务的标记数据来训练该任务。
    • multi-task:基于多个 GLUE 任务的标记数据来多任务训练,然后再微调具体的任务。

    RoBERTa 执行的是 single-task 微调策略,其结果如下图所示。其中:

    • RoBERTaensembles 基于 single-task 得到的多个模型的集成。这种方式在 9 个任务中的 4 个做到了 SOA

      论文作者预期:一旦使用多任务微调策略,则 RoBERTa 的成绩会更好。

    • QNLI 通常都被视为一个二分类问题,但是近期的研究将其视为 ranking 问题。 RoBERTa 也延续了 ranking 的思路。

    • 论文使用 SupserGLUEWNLI 来替代 NLI

    • single-taskdev 上,RoBERTa 在所有 9 个任务都取得了 SOA

    九、BERT 扩展 - 图17

  4. SQuAD 微调结果:

    BERTXLNet 都使用额外的高质量标记数据来扩充训练集,而 RoBERTa 仅使用指定的标记数据。

    结果如下图所示,其中 † 表示依赖于额外的标记数据。

    九、BERT 扩展 - 图18

  5. Race 微调结果:

    九、BERT 扩展 - 图19