目录
1、模型结构
最近在看2021年的acl时,发现了一个最新的中文预训练模型,论文名称为:ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information。该模型在原有bert类模型中结合了中文的字形和拼音两种具有中国语言特色的特征,使该预训练模型在各种任务上都比原有模型有了明显提升。目前该论文也将实现的代码放在了github,大家有兴趣的可以去拜读这篇论文和代码。本篇文章对该论文进行一个简单的分享,并提出自己的一些观点。
大规模预训练模型在很多自然语言处理任务中都大放异彩,如:自然语言理解、文本分类、问题回答等。但是Bert作为为英语语言设计的预训练模型,它在应用于中文任务时并没有考虑到中文本身的语言特点:字形和拼音。对于字形来说,汉字是有象形文字的,例如“江河湖海”都有三点水作为偏旁,因此在把它们放在向量空间时距离应该是很近的。对于拼音来说,一个字可能是多音字,而多音字一般都有不同的含义,所以我们需要使用到拼音信息帮我们去理解一个字或者词。
下面我们直接来看一下模型的构成。
1.1 整体结构
对于每一个字符,我们都会得到它的字符embedding、字形embedding和拼音embedding,然后我们将这三个D-dimension的embedding通过fusion模型(一个全连接层)合并成一个D-dimension的embedding。 我们得到的fusion embedding加上位置embedding就得到的了我们输入到bert模型的向量。
1.2 字形embedding
作者使用了仿宋、行楷和隶书3种字体来生成字形embedding。将字的图片分割成24*24个像素点,每个像素点的像素从0到255,这样输入三张图片就得到24*24*3的向量。这里文章中说将向量平坦成2352维向量,也就是28*28*3,这里猜测是每个边都加入了2个padding,目的是为了让字形embedding的长度与其他两种相同。最后2352维向量会经过一个全连接层得到一个784的embedding。
1.3 拼音embedding
对于拼音embedding,本文中用的是pypinyin这个python的依赖包。音调将直接接在拼音的后面,如上图所示的mao后面的一声。如果拼音的长度没有到8,则使用“-”字符来填充,最终将其转为维度为128的向量。然后我们将其输入到一个CNN网络中,CNN中kernal的宽度为2,最后接一个max-pooling层得到最终的拼音embedding(长度仍为768)。
1.4 fusion模型
在字符embedding、拼音embedding和字形embedding都得到后,我们就得到了一个3D维度的向量。通过一个全连接层,我们可以得到一个D维度的向量。我们将这个D维度的向量加上位置向量便得到了输入bert的向量。
到此为止,我们整个模型的结构便分享完了。下面我们继续看一下这篇论文都使用了哪些训练任务。
2、训练任务
2.1 预训练准备
作者使用CommonCrawl(https://commoncrawl.org/)数据集来进行预训练。
为了使预训练模型能够同时精准预测字和词,作者使用的mask策略有两种,WWM(Whole Word Masking)和CM(Char Masking)。
与其他中文预训练模型不同的是,作者没有基于官方的中文预训练模型来进行训练,而是从头开始训练。这里也不太明白作者为什么要完全从头训练,其实是可以使用一部分原本的模型的。为了增强模型长短项的依赖,作者在训练模型时同时输入了单个句子和多个句子。
2.2 六项训练任务
作者一共使用了6项训练任务:
MRC(Machine Reading Comprehension):在这个任务中,作者使用了CMRC2018和CJRC两个数据集,可通过https://github.com/CLUEbenchmark/CLUE找数据集。
NLI(Natural Language Inference):该任务作者使用的是XNLI数据集,可通过https://github.com/facebookresearch/XNLI找数据集。
TC(Text Classification):该任务作者使用的是THUCNews和ChnSentiCorp数据集,可通过http://thuctc.thunlp.org/和https://github.com/pengming617/bert_classification/tree/master/data)找数据集。
SPM(Sentence Pair Matching):该任务作者使用的是LCQMC和BQCorpus数据集。
NER(Named Entity Recognition):该任务作者使用的是OneNote4.0和weibo数据集。
CWS(Chinese Word Segmentation):该任务作者使用的是PKU和MSRA数据集
作者并没有使用NSP(Next Sentence Prediction)任务,因为之前有研究人员提出该任务对预训练模型没有什么帮助。