放牧代码和思想
专注自然语言处理、机器学习算法
    愛しさ 優しさ すべて投げ出してもいい

#EMNLP21#抗噪自监督中文分词

目录

很久没有关注中文分词,今年恰好开会听了这篇清华领衔的长论文,分数相当不错。而且还引用了我的第一篇论文,于是简要介绍一下。虽然仰慕已久,但我与论文作者们并无私交。本文仅代表我的个人观点,如果有任何理解或表述错误,都是我的责任,与原作者无关。图片表格的版权归原作者所有,欢迎阅读原论文

emnlp2021_me_slides.jpg

这篇论文的出发点是中文分词模型在每个迭代中看到的都是静态数据集,并且中文分词数据集中存在大量标注错误(噪音)。作者提出给每个句子与可能的分词序列估计一个质量评分,利用这个质量评分去指导下一轮的训练。在数据集有噪音的环境下,如果一个句子的分词质量评分非常高,那么它的重要性也会变得非常大,在接下来的学习中会得到更高的注意。

方法

具体说来,作者的方法分为4个步骤。

常规训练

利用BERT和CRF损失在黄金数据上训练一个常规的分词器。

MLM

mask一些单词,也就是将分词结果中选取的一个单词的连续2个字符替换为MASK。如果单词仅一个字符,则仅mask这个字符。将原句子和mask掉的句子输入BERT编码或预测,计算这些字符在mask前后的embedding的相似度。如果很相似就说明这句话的分词质量好,反之则说明分词质量不好。因为把一个词mask掉2个字符(正确分词时一定mask一个词,虽然不一定完全mask掉)MLM相对难猜,mask与truth不相似,而mask两个词各1个字符(由于分词错误)则容易猜多了。

例如:

2021-11-07_18-42-28.jpg

如果分词错误,mask input为 小明喜[M][M]巧克力,很容易猜出mask掉的为“欢”和“吃”。相反,如果分词正确,mask input为 小明[M][M]吃巧克力,那么mask掉的究竟是喜欢还是讨厌,就很难猜了。

具体说来,分词质量用如下方式衡量:

2021-11-07_18-29-34.jpg

其中$\mathbf{x}_m$$\mathbf{x}_m^s$分别是mask和答案的embedding,$\Delta$是$1$减去相似度,$M$是所有可能的mask的句子。

利用minimum risk training继续训练

这部分就是标题所指的自监督了,脱离黄金标注(因为数据集有噪音)。载入已训练的分词模型,遍历所有可能的切分结果,通过分词质量给每个切分结果分配不同的权重,继续利用MRT训练:

2021-11-07_18-42-59.jpg

其中,$P$是分词损失,乘以质量评分$q$起到了re-weighting的作用。MRT要求遍历$Y$,也就是所有可能的切分结果,在计算上是不可行的。所以作者采样了一个子集$Q$,并且重新归一化子集的分布:

2021-11-07_18-52-00.jpg

其中,$\alpha$控制分布的sharpness。于是损失函数变为:

2021-11-07_18-53-24.jpg

我觉得这里的采样还可以进一步优化,因为分词器的预测准确率已经90%以上了,可以在预测分词的结果上加入少量的perturbation,比均匀随机采样要好。用了CRF的话,可以在Viterbi上搞个beam search取top K。不知道作者具体试验时用没用到类似的技巧。

由于式(3)的分母变小了,所以$Q$变大了,导致正确切分受到的惩罚变大了,相应的概率就变小了。怎么办呢?作者把NLL又加回来了,作为一个“正则项”:

2021-11-07_18-57-00.jpg

试验

看上去在SIGHAN以及我收集的多标准中文分词语料上的表现非常突出:

2021-11-07_18-59-32.jpg

但其实2019及以前的paper都没有用上BERT,所以具体提升还有争议。作者的试验拆分了开发集,如果按05年流传下来的惯例不拆分开发集的话,HanLP的BERT无CRF也能在PKU上跑到96.7。

作者还做了一些抗噪的试验,随机将10%的BMES打乱,展示了该方法非凡的抗噪能力:

2021-11-07_19-04-24.jpg

评价

长度为2的不跨词mask设计得很巧妙,要知道中文词语的平均词长在1.5左右。这些细节如果不是长年做中文分词的人,很难想到。而利用自监督去包容数据集中可能的噪音,也是非常聪明的想法。采样时的rescaling也体现出了作者团队中严谨的一面。总之,的确是篇好论文。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » #EMNLP21#抗噪自监督中文分词

我的作品

HanLP自然语言处理包《自然语言处理入门》