序列标注 | (6) 多标准中文分词

多标准中文分词

一、背景

中文分词

中文分词是中文自然语言处理的基础任务,旨在辨别由连续字符组成的中文句子中的词边界。
大多数方法把中文分词转换为一个基于字符的序列标注问题,其中输入句子中的每个字符被标注为一个标签用以表示它在目标词中的位置。

多标准中文分词

尽管一些基于神经网络的中文分词方法取得了很大的进步,但是这些方法严重依赖于大规模高质量的标注语料库。而构建高质量中文分词标注语料库有两个主要挑战:1)需要语言学专家,代价非常高;2)基于不同的语言学观点会产生多个不同的分词标准。因此,现有的中文分词语料库的分词标准是不同的。如下表所示,对于同一句话,它们的分词结果是不同的:
序列标注 | (6) 多标准中文分词
尽管不同语料库的分词标准不兼容,但是它们共享一些公共知识,从一个分词标准中学到的公共知识可以促进其他分词标准。现有的大多数方法致力于提高在单个分词标准上的性能,如果不能充分利用所有具有不同分词标准的语料库,这将会是一种资源的浪费。如何高效的利用这些资源是一个巨大的挑战,多标准中文分词问题应运而生。

目前多标准中文分词方法主要分为两类:多任务学习框架和统一框架。

1)多任务学习框架把多标准中文分词问题看作是一个多任务学习问题,把每个标准看作是单个任务。其中一个共享层用于捕获所有标准共性的特征(公共知识),每个标准对应一个私有结构(私有encoder、decoder等),用于捕获每个标准特有的特征。多任务学习可以学习共享知识,但是不够高效。由于每个标准都对应一个私有结构,模型复杂度比较高。其实没必要为每个标准都构建一个对应的私有结构,因为不同的标准会有部分重叠,如上表中 CTB和MSRA对“林丹”的切分是相同的。因此,产生了统一框架。
2)统一框架相对来说简洁很多,它没有私有结构,对于所有标准采用一个全共享模型,一般在输入时指定一个标准提示符,用于表明当前输入的句子属于哪个标准。

神经中文分词基础模型

中文分词一般看作是一个基于字符的序列标注问题。具体地,对于输入句子中的每个字符X={x1,x2,...,xT}X=\{x_1,x_2,...,x_T\}被标注为一个标签yL={B,M,E,S}y\in L=\{B,M,E,S\},表示一个单词的开始、中间、结束以及单字符词。中文分词的目标是从所有可能的标注序列中找到使得下式概率最大的那个:
序列标注 | (6) 多标准中文分词
神经中文分词方法可以大大减少特征工程,大体可以分为三部分:1)字符嵌入层(unigram、bigram等) 2)encoder用于提取上下文特征(CNN、BiLSTM、transformer、Bert等) 3)decoder用于进行标签推理(CRF、MLP(softmax)等)

接下来介绍基础神经分词模型:BiLSTM-CRF、BiLSTM-softmax

1)嵌入层:把输入句子中的每个字符映射为一个分布式嵌入向量。xt>extRdex_t -> e^{x_t}\in R^{d_e}
2)编码层:为每个字符提取上下文特征。
序列标注 | (6) 多标准中文分词
3)解码层:
CRF:
序列标注 | (6) 多标准中文分词
MLP(softmax):
序列标注 | (6) 多标准中文分词

二、主要方法

假设有M个具有不同分词标准的语料库,DmD_m是第m个语料库有NmN_m个样本:
序列标注 | (6) 多标准中文分词
Xi(m),Yi(m)X^{(m)}_i,Y^{(m)}_i分别是第m个语料库中的第i个句子和对应的真实标注序列。

主要方法分为两类,一个是基于多任务学习框架,另一个是基于统一框架。

多任务学习框架

1)《Adversarial Multi-Criteria Learning for Chinese Word Segmentation 》 ACL 2017

这篇论文提出了三种不同的模型结构,如下图所示:
序列标注 | (6) 多标准中文分词
黄色block代表共享层(BiLSTM),灰色部分代表私有层,每个标准对应一个(BiLSTM、CRF)。
Model I:
把共享层和私有层看作是两个并行的层。对于语料库m,私有层和共享层隐藏状态计算如下:
序列标注 | (6) 多标准中文分词
把共享层和私有层的隐藏状态拼接来计算CRF层的得分函数:
序列标注 | (6) 多标准中文分词
Model II:
把共享层和私有层设置为一个堆叠的结构。私有层把共享层的输出作为输入。对于语料库m,私有层和共享层隐藏状态计算如下:
序列标注 | (6) 多标准中文分词
CRF层的得分函数计算如下:
序列标注 | (6) 多标准中文分词
Model III:
可以看作是前两个模型的结合,共享层和私有层是一个堆叠的结构。隐藏状态的计算和Model II一样,CRF层的得分函数计算和Model I一样。

目标函数(最大化):
序列标注 | (6) 多标准中文分词
对抗训练:
尽管上述共享-私有模型把特征空间分为了私有特征空间和公共特征空间,但不能保证二者之间没有交叠。我们希望共享层提取的特征全都是各个不同标准共性的特征,因此提出对抗训练。以Model III为例,加入对抗训练后的结构如下所示:
序列标注 | (6) 多标准中文分词
大体思路是设置一个判别器,基于共享特征(各个字符对应的共享特征直接取平均)来分辨出当前输入句子来自哪个标准(在共享特征后加一个softmax输出层在各个标准上进行分类)。
对抗训练损失:判别器尽可能的判断出当前输入的句子来自哪个标准,因此要最大化如下的似然概率:
序列标注 | (6) 多标准中文分词
生成器旨在生成一个共享特征,使得判别器无法基于该生成的共享特进行准确的判断,二者形成一个对抗。因此,最大化如下的熵(熵越大,判别器输出的概率分布越分散,从而使判别器无法准确预测):
序列标注 | (6) 多标准中文分词
训练(组合分词任务目标函数和对抗目标函数):
序列标注 | (6) 多标准中文分词
2)《Toward Fast and Accurate Neural Chinese Word Segmentation with
Multi-Criteria Learning 》 arxiv 2019

序列标注 | (6) 多标准中文分词
这篇工作用预训练语言模型Bert引入外部语言知识,来提取字符的上下文特征。相较于BiLSTM,特征表示能力更强,可以并行处理。考虑到性能和速度的权衡,该工作对Bert进行了修剪,还采用了一些量化(混合精度,节省显存等)、编译器优化的技巧来提高计算效率。
在使用Bert提取完字符上下文特征后,添加一个领域映射层,每个标准对应一个私有层(MLP)用于提取标准特定的特征,所有标准对应一个公共层(MLP)用于提取所有标准公共的特征。对于每个标准,将私有层的隐藏状态和公共层隐藏状态拼接,再输入到CRF中,计算得分函数。

统一框架

1)《Effective Neural Solution for Multi-Criteria Word Segmentation 》arxiv 2018

这篇工作提出了一个简单优雅的方式,主要借鉴自多语言翻译任务,不需要设计任何私有encoder-decoder结构。只需要在输入句子的首尾添加两个token,用来表示输入句子对应的语言。实践证明这是一个简单可行的方案。

同理可以迁移到多标准中文分词上,只需要在输入句子的首位添加两个token,用来表示输入句子来自哪个标准/语料库。
序列标注 | (6) 多标准中文分词
这两个附加的token可以看作是正常句子中的一个字符,可以把来自不同语料库的句子无缝放在一起进行训练。这两个token用于携带和标准相关的信息,从而影响每个字符的上下文表示,最后生成和目标标准匹配的分割决策。注意 这两个token只参与字符的上下文表示,不参与分数计算(即不用对它们进行标签预测)。

本文使用的模型结构是最基础的BiLSTM-CRF模型。之后的文章借鉴了本文中的这个方案,并提出了一些更复杂的模型。

2)《Switch-LSTMs for Multi-Criteria Chinese Word Segmentation 》AAAI 2019

本文提出了一个比较灵活的Switch-LSTM结构,把每个标准分割成若干个子标准,每个子标准用LSTM实现,当切分一个句子时,对于不同的单词这些子标准会自动切换。
序列标注 | (6) 多标准中文分词
模型结构如上图所示,Switch-LSTM包含K个LSTM 单元和一个switcher。在每个时刻t,根据switcher的状态向量atRKa_t\in R^K对K个LSTM单元的隐藏状态进行加权求和,得到最终的隐藏状态。具体计算如下:
序列标注 | (6) 多标准中文分词
其中,exte_{x_t}是输入句子中第t个字符嵌入向量,st,ks_{t,k}是在第t个字符的第k个LSTM单元计算的隐藏状态,eme_m是第m个标准/任务(语料库)对应的嵌入向量,at,ka_{t,k}是在第t个字符的第k个LSTM单元对应的权重。at,k,st,ka_{t,k},s_{t,k}进行加权求和得到第t个字符最终的隐藏状态。

上述式子是单向LSTM的计算过程,实际上可以是双向的。将前后向计算的最终隐藏状态通过一个线性变换层,再输入到CRF中,计算得分函数:
序列标注 | (6) 多标准中文分词
目标函数
序列标注 | (6) 多标准中文分词

3)《Multi-Criteria Chinese Word Segmentation with Transformer 》arxiv 2019

这篇工作和本部分工作1)差别不大,都是在输入句子中加入一个特殊的token来用来表示输入句子来自哪个标准/语料库。
不同的是它只在输入句子的头部加入一个特殊的token(当作一个正常的字符),和之前一样该token只参与上下文建模,不参与标签预测;另一个不同是采用transformer提取上下文特征。模型结构如下:
序列标注 | (6) 多标准中文分词
还有一个不同是embedding层,对于每个字符的嵌入向量,结合了unigram和bigram特征。(以及transformer结构特有的位置向量)
序列标注 | (6) 多标准中文分词
输入句子的token embedding为:
序列标注 | (6) 多标准中文分词
其中,e[m]e_{[m]}表示第m个标准对应的嵌入向量。

4)《Unified Multi-Criteria Chinese Word Segmentation with BERT 》arxiv 2020

序列标注 | (6) 多标准中文分词

本篇工作的模型结构如上图所示。
a. 对输入句子前加一个特殊的token x0x_0(字符),来示输入句子来自哪个标准/语料库:
序列标注 | (6) 多标准中文分词
b. 使用预训练语言模型Bert来对输入句子进行上下文建模:
序列标注 | (6) 多标准中文分词
c. 考虑输入句子中每个字符(除了x0x_0)的bi-gram特征:
序列标注 | (6) 多标准中文分词
d. Fusion Layer来融合Bert输出和Bi-gram特征:
序列标注 | (6) 多标准中文分词
其中hth_t是第t个字符对应的Bert编码后的隐藏向量,ete_t是第t个bi-gram嵌入向量。
e. Multi-head Attention: Fusion Layer仅仅是融合了对应时刻的Bert隐藏向量和bigram嵌入向量,没有考虑各个时刻/字符之间的上下文交互。使用Multi-head Attention得到上下文表示:
序列标注 | (6) 多标准中文分词
f. decoder没有使用CRF,而是直接使用MLP(softmax)做标签推理:
序列标注 | (6) 多标准中文分词
g. 为了防止标准信息在前向传播中丢失,添加了一个辅助的标准分类任务,基于隐藏状态h0h_0来预测/重构标准:
序列标注 | (6) 多标准中文分词
最后总损失是分词损失和标准分类损失相加:
序列标注 | (6) 多标准中文分词