《ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information》
Zijun Sun, Xiaoya Li, Xiaofei Sun, Yuxian Meng, Xiang Ao, Qing He, Fei Wu and Jiwei Li
ACL 2021
https://github.com/ShannonAI/Ch
参考内容:https://zhuanlan.zhihu.com/p/386010496
官方给出的解释超级详细↑,本篇主要属于自己的记录,加深个印象,求轻吐槽!!!∑(゚Д゚ノ)ノ
问题:最近的中文预训练模型都忽视了中文的两个重要方面:字形、拼音,这两方面都含有对语言理解非常重要的句法和语义信息。
本文:ChineseBERT
在大规模未标记的中文语料库上进行预处理后,性能有所提升。
在很多中文中文自然语言处理任务上,达到了SOTA水平。
大规模预处理的中文自然语言处理模型
利用汉字的字形和拼音信息,来增强模型从表面字符形式中捕捉上下文语义和消除汉语多音字歧义的能力。
在广泛的中文自然语言处理任务中取得了显著的性能提升。
在训练数据较少的情况下比普通的预训练模型表现更好。
训练一个规模更大的ChineseBERT
大规模预训练模型,已经成为各种自然语言处理任务的基础。除了英语自然语言处理任务外,对汉语也很有效。但由于预训练模型是为英语设计的,所以缺少了汉语方面的两个重要特征,字形和拼音。
汉字是一种意音文字(偏旁部首氵),故字形会带有语义。有团队研究过,将字形融入到神经模型中,但没有大规模的预训练( (Sun et al., 2014; Shi et al., 2015; Liu et al., 2017; Dai and Cai, 2017; Su and Lee, 2017; Meng et al., 2019))。
拼音在建模语义和语法信息方面至关重要,这些信息不能通过上下文或字形嵌入来获取。多音字会有不同含义,如“乐”,拼音有助于识别字符的词性。字形嵌入和字符标识嵌入都指向同一个字符标识,不包含发音信息。
对于每个汉字字符,字嵌入(Char Embedding)、字形嵌入(Glyph Embedding)和拼音嵌入(Pinyin Embedding)首先进行串联,然后通过全连接层映射为一个D维嵌入,从而得到融合嵌入(Fusion Embedding)。
融合嵌入与位置嵌入相加,形成BERT模型的输入。
因为这里没有使用NSP预训练任务,所以省略了segment embedding。
在预训练阶段使用了全词掩码(Whole Word Masking, WWM)和字符掩码(Char Masking, CM)
模型的输入是可学习的绝对位置嵌入和融合嵌入的相加,其中融合嵌入基于对应字符的字符嵌入、字形嵌入和拼音嵌入。
字符嵌入的方式类似于BERT中使用的token embedding,但是是在字符粒度上。
根据 Meng et al. (2019) 使用三种中文字体,将仿宋、行楷和隶书这三种字体的图像向量化,每个图像都是24*24的大小。
与Meng et al. (2019)不同的点:Meng使用的是CNNs将图片转化为字符的表示,而这里使用的是全连接层。
首先将24×24×3的向量转化为2,352的向量,然后输入至全连接层来获取字符向量。
首先使用pypinyin将每个汉字的拼音转化为罗马化字的字符序列,其中也包含了音调。
pypinyin是一个结合机器学习模型和基于字典的规则来推断给定上下文中字符的拼音的系统。
比如对汉字“猫”,其拼音字符序列就是“mao1”。对于多音字如“乐”,pypinyin能够非常准确地识别当前上下文中正确的拼音,因此ChineseBERT直接使用pypinyin给出的结果。
在拼音序列上应用宽度为2的CNN模型,然后使用最大池化来导出最终的拼音嵌入。
这使得输出维度不受输入拼音序列长度的影响。输入拼音序列的长度固定为8,当拼音序列的实际长度未达到8时,剩余的槽用特殊字母“-”填充。
将汉字的字符嵌入、字形嵌入与拼音嵌入拼接在一起,形成一个3D维向量,然后通过融合层(全连接层),映射为一个D维向量,就得到了该汉字对应的融合嵌入。
每个汉字的相应上下文表示。
预训练数据来自CommonCrawl,在经过数据清洗后(移除带有很多英语的文本、过滤html标签等),用于预训练ChineseBERT的数据规模为约4B个汉字(大约有10%的高质量数据被保留下来)。
使用LTP toolkit识别词的边界。
ChineseBERT综合使用两种掩码策略:全词掩码(Whole Word Masking, WWM)与字掩码(Char Masking, CM)。
字掩码: Li et al. (2019b)建议使用汉字作为基本输入单位可以缓解汉语中的词汇之外问题,因此采用在给定上下文中屏蔽随机字符的方法。
全词掩码:中文中的大量单词由多个字符组成,对于这些字符,CM策略可能太容易被模型预测故做全词掩码,减轻了CM策略容易预测的缺点。
“我喜欢紫禁城”在掩码词“紫禁城”之后就是“我喜欢[M][M][M]”,而非“我喜欢[M]”。
因与原始BERT在输入层结构不同,故从头开始训练。
为了习得短期上下文与长期上下文,ChineseBERT在Packed Input与Single Input之间交替训练,前者是将模型的输入扩展到最大长度512,后者则将单个句子作为输入。Packed Input作为输入的概率为0.9,Single Input作为输入的概率是0.1。
无论是Packed Input还是Single Input,都在90%的时间使用WWM,在10%的时间使用CM。除此之外,ChineseBERT还使用了动态掩码策略,避免重复的预训练语料。
每个词/字符的屏蔽概率为15%。
如果选择了第i个单词/字符,80%[mask],10%的时间用随机单词/字符替换它,10%保持原样。
ChineseBERT有base和large两个版本,分别有12/24Transformer层,输入向量维度分别是768/1024,每层head数量为12/16。使得我们模型在模型尺寸方面与其他BERT风格的模型相当。
Base模型:
Large模型:
经过预处理后,该模型可以直接用于以与BERT相同的方式对下游任务进行微调。
ERNIE:采用多种掩码策略,包括token级、短语级和实体级,用大规模异构数据进行BERT预处理。
BERT-wwm / RoBERTa-wwm:在官方预训练的中文BERT/RoBERTa模型的基础上,继续使用全字屏蔽预训练策略进行预训练。 后文省略wwm
MacBERT:使用MLM-As-Correlation (MAC) 预训练策略和句子顺序预测( sentence-order prediction (SOP) task),对RoBERTa进行了改进。
BERT和BERTwwm没提供大版本,因此省略了相应的性能。
所提出模型的训练步骤明显小于基线模型。
基于给定上下文回答问题的能力。
CMRC 2018 (Cui et al., 2019b) and CJRC (Duan et al., 2019) .
确定假设和前提之间的蕴涵关系。
Cross-lingual Natural Language Inference (XNLI) dataset (Conneau et al., 2018)
模型需要将一段文本分类到指定的类别中。
THUC- News (Li and Sun, 2007) and ChnSentiCorp
模型被要求确定给定的句子对是否表达相同的语义。
the LCQMC (Liu et al., 2018) and BQ Corpus (Chen et al., 2018) datasets
该模型被要求识别一段文本中的命名实体,这被形式化为序列标记任务。
OntoNotes 4.0 (Weischedel et al., 2011) and Weibo
将文本分成单词,并被形式化为基于字符的序列标记任务。
PKU and MSRA datasets
使用中文命名实体识别数据集OntoNotes4.0对base版本模型进行分析
在相同的数据集上预处理了不同的模型,具有相同的训练步骤数和相同的模型大小。
- (移除某一组件)
无论是去除字形嵌入还是拼音嵌入都会导致性能下降,而去除两者对F1值的负面影响最大,大约下降了2个点。
随机抽样10%∞90%的训练数据,同时保持有实体的样本比例。
执行每个实验五次,并在测试集上报告平均F1值。
在训练数据不到30%的情况下,ChineseBERT的提升是轻微的,超过百分之三十后,刑恩能够提升更高。因为汉语拼音仍然需要足够的训练数据来完全训练字形和拼音嵌入,训练数据不足会导致训练不足。
与英语不同,汉语在句法、词汇和发音方面有其独特的特点。所以预训练模型应当与汉语特征相对应。