前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YYDS!一个针对中文的预训练模型

YYDS!一个针对中文的预训练模型

作者头像
NewBeeNLP
发布2021-08-20 17:18:15
2.1K0
发布2021-08-20 17:18:15
举报
文章被收录于专栏:NewBeeNLPNewBeeNLP

作者 | 周俊贤 整理 | NewBeeNLP

相信做中文NLP的同学和朋友们,对哈工大和科大讯飞的发布的一系列中文预训练模型并不陌生,github项目地址为https://github.com/ymcui/。它们根据各个预训练原论文的基础上,基于中文语料,发布了诸如BERT、RoBERTa、ELECTRA、XLNet等模型,极大推动了中文NLP的发展。

不同的预训练模型用了不同的tricks,但由于论文的发表主要是以英文为主的,这些tricks移植到中文,是否还是有效的?于是,他们在2020年也发表了一个新的预训练模型,叫MacBERT,只针对中文,在各种中文评测任务都表现突出。

下图很好地概述了各种预训练模型的区别。

MacBERT的全称是MLM as correction BERT,可以看到MacBERT主要是修改BERT的MLM的任务。论文全称及连接:《Revisiting Pre-Trained Models for Chinese Natural Language Processing》[1]

项目地址:https://github.com/ymcui/MacBERT

4-gram masking for word-level

在BERT和RoBERTa的英文版里面,都采用的是WordPiece,具体的看下图。最小的token切分单位并不是单个英文词,而是更细粒度的切分,如图中predict这个词被切分成pre、##di、##ct(##表现不作为一个完成的单词,而是某个单词的非开头部分),三个token,这种切分方式的好处在于能缓解未见词的问题,也更加丰富了词表的表征能力(如embedding可能会被切分成em、##bed、##d、##ing,其中##bed和bed在BERT的词表中是两个不同的token,代表不一样的意思)。

但对于中文来说,并没有这种WordPiece的切分法,想想,中文最小单位就是字,并不能像英文一样,再把词切分成字母的组合,当然也有人讨论把中文字按照偏旁或拼音进行进一步的切分,这个就不在本次的讨论范围内了。

Whole word masking(wwm),虽然token是最小的单位,但在【MASK】的时候是基于分词的,还是如下图的例子,“使用语言模型来预测下一个词的概率。”进行tokenizer后,变成“使 用 语 言 模 型 来 预 测 下 一 个 词 的 概 率 。”。

论文中,使用中文分词工具LTP来绝对词的边界,如分词后的结构是“使用 语言 模型 来 预测 下一个 词 的 概率 。”。在【MASK】的时候,是对分词后的结构进行【MASK】的,如不能只【MASK】语这个token,要不就把“语 言”都【MASK】掉,N-gram Masking的意思是对连续n个词进行【MASK】,如图中把“语 言 模 型”都【MASK】了,就是一个2-gram Masking。「虽然【MASK】是对分词后的结果进行,但在输入的时候还是单个的token。」

MacBERT采用基于分词的n-gram masking,1-gram~4gram Masking的概率分别是40%、30%、20%、10%。

用相似词代替【MASK】

大家吐槽BERT的其中一点是语训练时的输入和应用于下游任务时不一样,具体的预训练时是大概有15%的token被【MASK】token替代掉,作为输入的,但应用于下游任务时,是没有【MASK】作为输入的,这种差异会极大的影响BERT的性能。

作者采用了利用相似词来代替被【MASK】掉的词,怎么决定相似词?用的是叫Synonyms这款工具,这款工具也是基于word2vec计算的。举个例子,现在“语 言”这两个token作为一个词,被随机挑选到进行【MASK】了,然后用Synonyms计算离它最近的词,为"言 语",那在输入的时候,就用“言 语”来代替。

当然也存在一种情况,被【MASK】掉的词没有近义词(这里可能有人有疑问,用word2vec计算余弦相似度的时候一定会能返回最近的一个的啊,也就是所有词都能找出离它举例最近的一个词,但是假如就算最近,但是它们的距离也很远的情况下,我们就认为这个词没有近义词,我们可以卡个阈值),这种情况下,我们用随机词代替【MASK】。

最终,MacBERT的输入如下,对基于分词后的结果随机挑选15%的词进行【MASK】,其中的80%用同义词代替,10%用随即词代替,10%保持不变,然后预测被选为【MASK】的词,可以看到,这样,预训练的时候,再也没有【MASK】的身影了。

对于NSP任务,采用同ALBERT一样的sentence-order predicion(SOP),预测这两个句子对是否是连续的。

实验设置

作者除了采用中文维基百科外(这也是原生中文BERT采用的训练语料),还采用了其它中文百科全书、新闻、问答网站,加起来一共5.8个词。

为了能利用到其它预训练模型的信息,MacBERT并不是从头开始训练的,而是用谷歌官方的Chinese BERT-base进行参数初始化,但是对于large版本,是重新训练的,因为谷歌官方没有发布Chinese BERT的large版本。下图为与其它预训练模型的细节对比。

分别采用了三种类型的任务来进行评测,包括机器阅读理解、单句字的文本分类和文本对分类,结果自然都是非常不错的。

消融实验

我认为每篇论文里面,消融实验是很重要的部分,因为它能再次显示出作者提出方法的动机。

这里w/o Mac表示去掉同义词替换,w/o NM表示去掉N-gram masking,实验表示,去掉它们都会损害性能。除此之外,实验还表明NSP-like任务相对MLM任务来说,对模型没那么重要(这也提醒我们应该花更多时间研究改进MLM任务上),SOP任务要比NSP任务要好。

为了讨论改进MLM任务的影响,采用了下面四种对比,首先我们沿用前面的对15%的words进行【MASK】,其中的10%用原来的token代替

  • MacBERT:80%用同义词代替,10%用随机词;
  • Random Replace:90%用随机词代替;
  • Partial Mask:同原生的BERT一样,80%用【MASK】代替,10%用随机词;
  • ALL Mask:90%用【MASK】代替。

实验结果自然是MacBERT表现最好,除此之外,预训练时,保留【MASK】作为输入会极大地影响下游任务的性能。甚至把【MASK】用随机的token代替(即Random Replave),都会比原生BERT(即Partial Mask)要好。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NewBeeNLP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者 | 周俊贤 整理 | NewBeeNLP
  • 4-gram masking for word-level
  • 用相似词代替【MASK】
  • 实验设置
    • 消融实验
    相关产品与服务
    NLP 服务
    NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档