本次分享的论文MacBERT,来自哈工大SCIR实验室,收录于Findings of EMNLP 子刊,全名为Revisiting Pre-Trained Models for Chinese Natural Language Processing,即中文自然语言处理的预训练模型再访。
论文地址:Paper
该篇论文主要做了以下三方面的工作:
(1)大量的实证研究,以重新审视中文预训练模型在各种任务上的表现,并进行了细致的分析。
(2)提出了一个新的预训练模型MacBERT,通过用其相似的单词来掩盖单词,从而缩小训练前和微调阶段之间的差距。
(3)为了进一步加快对中文NLP的研究,创建了中文预训练模型系列并发布到社区。
本文章仅针对该论文的第二个工作进行介绍,即介绍预训练模型MacBERT。MacBERT模型保持了与BERT相同的训练前任务,但做了一些修改,具体如下:
1、使用全词掩蔽和N-Gram掩蔽策略来选择候选tokens进行掩蔽,从单字符到4字符的掩蔽百分比为40%、30%、20%、10%。
2、原始BERT模型使用[MASK] token进行掩蔽,但是[MASK] token在微调阶段从未出现,这会造成预训练任务与下游微调任务不一致;因此该论文建议使用类似的单词来掩蔽需要被掩蔽的单词。
类似的单词可以通过同义词工具包(Synonyms)获得,该工具包是基于word2vec相似度计算来获取同义词的。
选择一个N-gram进行掩码时,该论文将分别找到相似的单词。在极少数情况下,当没有相似的词时,会降级使用随机词替换。
3、使用15%的百分比输入单词进行掩蔽,其中80%将替换为相似的单词,10%将替换为随机单词,剩下的10%将保留原始单词。
4、该论文使用ALBERT提出的句子顺序预测(SOP)任务替换BERT原始的NSP任务,通过切换两个连续句子的原顺序创建负样本。
注意:该论文对MacBERT模型进行预训练时使用了扩展数据。并且为了识别汉语词语的边界,使用LTP进行中文分词。
这里有一个问题,就是模型对单字符的概率是40%,对于英文来说,比较容易找到单个字符的同义词
,但是单个字符对于中文来说,大概率是无法找到同义词的,因此笔者并不理解要如何去操作。
难道要把这么多找不到同义词的使用随机替换吗?显然应该没有这么简单,可能需要源码放出来的时候,才能知道。
或者有理解的小伙伴,可以再评论中解答一下,也可以加我微信或私聊我。
训练参数
Base模型参数如下:
Large模型参数如下:
各个任务上MacBERT模型微调效果
阅读理解任务
CMRC2018数据集效果如下:
DRCD数据集效果如下:
CJRC数据集效果如下:
句子对匹配任务
XNLI、LCQMC、BQ Corpus数据集效果如下:
分类任务
情感分类任务ChnSentiCorp数据集效果如下:
文档分类任务THUCNews数据集效果如下:
消融实验
为了对比,上述提出改进点的效果,进行消融实验,结果如下图所示:
可以看出,上述提出的改进点,对于预训练语言模型来说,都有一定的提升。
总结
等论文code开源。看一下在中文数据下,单个字符是如何找到同义词的。
推荐几篇笔者文章: