0%

ernie研究

简介

本文假定读者已经阅读过 BERT 与 ERNIE 的论文。

ERNIE 掩蔽策略

ERNIE 针对无切分(unsegmented)的语言(如中文),提出了一种 MLM 的数据增强(数据增强)策略:

我们将一个短语或一个实体作为一个单元,通常由多个单词组成。在单词表示训练期间,同一单元中的所有单词都被屏蔽,而不是仅一个单词或字符被屏蔽。以这种方式,在训练过程中隐式地学习了短语和实体的先验知识。

简单概括,ERNIE 会利用分词的信息,在词的粒度(短语级别)做掩蔽,通过这种策略可以使模型隐式地学习到词粒度的知识。与之相对的,BERT 的基本掩蔽策略是基于基础语言单元粒度的(basic language unit,在中文里对应输入的每一个字):

它将句子视为基本语言单位的序列,对于英语,基本语言单位为单词,对于中文,基本语言单位为汉字

词组是一小部分单词或字符,一起充当概念单元……并使用一些依赖于语言的细分工具来获取其他语言(例如中文)的词/短语信息。

原始解析

通过简单的转换逻辑,可以直接把 ERNIE 与 BERT 在模型结构上没有明显的区别。可以将其发布到 ERNIE 与 BERT 在模型结构上没有明显的区别。

主要的差异在 MLM 的数据预先逻辑部分:

  • BERT 的数据预处理的输入是若干个 txt 文本,输出是带 NSP,MLM 标注的序列数据集,详见BERT 系列:数据重新编码解析一文。
  • ERNIE 的数据初步分为两个阶段:
    • 训练前的数据准备:建立序列与标记分词边界信息。
    • 训练过程中的数据准备:在每个纪元,基于分词边界信息动态构建 MLM 标注。

构建序列与标记分词边界信息

这一步的输出是一个 txt 文件:

每个样本由 5 个’ ;‘的分隔词组成,数据格式:token_ids; sentence_type_ids; position_ids; seg_labels; next_sentence_label;其中seg_labels表示分词边界信息:0 表示词首,1 表示非词首,-1 为占位符,其对应的词为CLS或者SEP

ERNIE 没有开源步骤步的代码。个人建议,可以重复 BERT 的预编码转换序列,然后利用百度的词法分析 API 加入分词边界信息。

动态打造 MLM 标注

论文的3.2 知识整合小节里提到:

我们提出了一种多阶段的知识掩盖策略,而不是直接添加知识嵌入,而是将短语和实体级知识集成到语言表示中。

通过阅读代码,实际上这个所谓的多阶段知识掩盖策略的逻辑是:在每个时代,以某个概率(这个值没给)随机选择mask_word或者mask_char模式。mask_word模式后续会走短语级掩盖逻辑,会利用分词边界信息;mask_char模式后续会走的基本级别掩蔽的逻辑,不会利用分词边界信息。

论文的3.2.2 短语的级遮蔽里提及:

在短语级掩码阶段,我们还使用基本语言单元作为训练输入,这与随机基本单元掩码不同,这次我们随机选择句子中的几个短语,对同一短语中的所有基本单元进行掩码和预测

短语级屏蔽的实现见:

  1. 与 BERT 相对的,ERNIE 这一步是在每个时代动态生成的,且 Masking 的数量没有上限(没有max_predictions_per_seq的限制)。
  2. 基于分词信息,以词为单位决定是否触发 masking 逻辑。
  3. 对于每个需要 mask 的字符串(一个词),遍历其中每个输入(字符)
    1. 80%的概率,把输入替换为[MASK]
    2. 10%的概率,把输入替换为随机的令牌。
    3. 10%的概率,维持输入不变。