序列标注 | (7) 融入字典知识的神经中文分词

融入字典知识的神经中文分词

一、背景

当前基于深度神经网络的中文分词方法直接从标注样本/句子中学习相关信息,缺乏处理稀有词以及和训练集来自不同领域的数据的能力。OOV(Out-of-vocabulary)问题是监督学习最主要的问题。

例如,中文句子“人工智能最近很火”,它的正确分割是“人工智能/最近/很火”。然而,如果“人工智能”没有出现在标注数据中或仅仅出现了几次,那么将有很大的概率该句子会被分割为“人工/智能/最近/很火”,因为“人工”和“智能”在标注数据中出现的频率很高。

对于稀有样例处理和领域偏移问题,人类知识可以提供有价值的信息。字典中既含有常见的词语,也含有不经常出现的词语, 所以将字典融入到神经网络模型中,可以使得模型能够更好地处理常见词、稀有词和领域专有词等。
序列标注 | (7) 融入字典知识的神经中文分词

二、 主要方法

1)《Neural Networks Incorporating Dictionaries for Chinese Word Segmentation》 AAAI 2018

本文提出了两个模型结构:
Model I:
序列标注 | (7) 融入字典知识的神经中文分词
首先,将输入句子中的每个字符xix_i转换为向量表示exie_{x_i},输入到一个Bi-LSTM中提取特征;同时为每个字构造对应的特征向量tit_i,输入到另一个Bi-LSTM中提取特征。然后将两部分特征拼接在一起,再接一个CRF层进行解码。

特征向量构造方法:
tit_i是输入句子中第 i 个字符xix_i对应的特征向量。对xix_i构造以下8个特征模版:
序列标注 | (7) 融入字典知识的神经中文分词
对于输入句子中的每个字符,按照上述模版提取对应的子序列,如果提取的子序列出现在了给定的词典中,该子序列对应的位置标为1,否则标为0,最后为每个字符生成一个8维的特征向量。如下例所示(对于“委”这个字符):
序列标注 | (7) 融入字典知识的神经中文分词
Model II:
特征向量tit_i表示不同的边界候选。在不同边界候选下,建模字符xix_i的权重应该是不同的,而传统的LSTM,对于输入句子中的不同字符/不同时刻,权重是共享的。因此,本文提出了Model II。
序列标注 | (7) 融入字典知识的神经中文分词
如上图所示,底部的Bi-LSTM,用于为顶部的Bi-LSTM对应位置生成一个权重,从而使顶部Bi-LSTM对于输入句子中的不同字符,权重是不同的。

底部Bi-LSTM的输入是每个字符对应的特征向量,计算过程如下(下式中的g表示顶部LSTM单元中各个门,g{i,f,o,c~}g\in \{i,f,o,\widetilde{c}\}):
序列标注 | (7) 融入字典知识的神经中文分词
上式中蓝框中的部分是顶部Bi-LSTM原始的计算过程,其中参数Wg,UgW_g,U_g对于各个字符是权重共享的;红框中的部分是由对应位置的底部Bi-LSTM生成的权重,对于每个字符生成的权重是不同的,让生成的权重对共享权重进行修改,从而使顶部Bi-LSTM对于输入句子中的不同字符,权重是不同的。

2)《Neural Chinese word segmentation with dictionary 》Neurocomputing 2019

前一篇工作需要手工设计特征模版,而且多引入了一个BiLSTM,增加了模型参数,使模型训练更困难。本篇工作做了一些改进,提出了一种end2end的融入字典信息的神经中文分词方法,不需要任何特征工程。

提出了两种融入字典信息的方法,一种是伪标注数据生成;另一种是构造额外的单词分类任务,进行多任务学习。最后本文把两种方法组合在一起,模型性能取得了进一步提高。

基本结构:
和之前工作不同的是,本篇工作指出局部上下文信息对于中文分词很重要,因此采用CNN对输入句子中的每个字符学习上下文表示。基本模型结构如下所示:
序列标注 | (7) 融入字典知识的神经中文分词
其中,wRk×Dw\in R^{k\times D}是卷积核,D是字符嵌入向量的大小,k是卷积核的大小。每个字符的隐藏状态hiRFh_i\in R^F,F是卷积核的数量。然后将hih_i输入到CRF层进行标签推理。

伪标注数据生成:
给定一个包含一系列中文单词的字典,随机采样U个单词,组成一个伪句子。例如,随机采样三个单词“很火”,“最近”和“人工智能”,然后组成伪句子“???????????????????????????????? 很火最近人工智能”。由于这些单词的边界是已知的,所以伪句子的标签可以直接推断出来“BEBEBMME”。重复上述采样过程直到得到NpN_p个伪句子。把伪句子添加到标注数据集中来提升神经中文分词的表现。由于伪句子和人工标注句子有不同的信息,因此训练时,给两种不同类型的训练数据的损失设置不同的权重:
序列标注 | (7) 融入字典知识的神经中文分词
多任务学习:
文本设计了一个附加的单词分类任务,用于判断一个中文字符序列是否是一个中文词。例如,字符序列“人工智能”是一个中文词,而字符序列“人重智新”就不是一个中文词。该分类任务的正样本直接从给定的中文字典中采样;负样本也是从字典中随机采样一个词,该词中的每个字符以概率p被替换为一个随机选择的字符。重复上述过程多次,直到得到指定数量的样本。该单词分类任务和中文分词任务,共享底层的嵌入层和CNN特征提取层,CNN后面接max-pooling层和sigmoid输出层进行二分类。模型结构图如下:
序列标注 | (7) 融入字典知识的神经中文分词
单词分类任务的损失函数如下:
序列标注 | (7) 融入字典知识的神经中文分词
其中,NwN_w是单词分类任务训练样本的数量,sis_i是第i个样本的预测分数,yiy_i是第i个样本的分类标签(1 or -1)。
联合训练中文分词模型和单词分类模型,通过联合训练,共享层可以捕获中文字典中的单词信息,从而提高中文分词的性能。最终的总损失函数如下,对每个任务的损失设置不同的权重:
序列标注 | (7) 融入字典知识的神经中文分词
组成上述两种融入字典信息的方法:
伪标注数据生成和多任务学习以不同的方式利用字典信息,可以将他们组合起来,更好的利用字典知识。组合后最终的损失函数如下:
序列标注 | (7) 融入字典知识的神经中文分词

3)《Subword Encoding in Lattice LSTM for Chinese Word Segmentation 》 NAACL 2019

基本思想:
在中文分词中引入子词(subword)信息,首次证明了神经分词中子词的有效性。
首先通过BPE(byte pair encoding)算法从原始数据中构建子词列表,然后使用Lattice LSTM结构将子词信息融入到character-level LSTM表示中。
序列标注 | (7) 融入字典知识的神经中文分词
子词信息可以用来消除字符歧义,如上图所示,子词 “学院”可以推出字符“学”应该是一个名词,而不是一个动词。

模型结构:
模型以character-level的BiLSTM-CRF为基础(黑色部分),lattice结构(红色部分)用来融入子词信息。
序列标注 | (7) 融入字典知识的神经中文分词
对于一个包含m个字符的输入句子s=c1,c2,...,cms=c_1,c_2,...,c_m, cic_i表示第 i个字符。 对于每个输入字符cic_i,将其对应的unigram字符表示ecie_{c_i}和bigram字符表示ecici+1e_{c_ic_{i+1}}进行拼接作为Bi-LSTM的输入:
序列标注 | (7) 融入字典知识的神经中文分词
使用BPE算法基于原始数据生成子词列表,保留子词列表中在给定字典中出现的子词(即保留一些合理的子词)。
lattice LSTM的输入有两部分,一个是子词wb,ew_{b,e}的嵌入表示,其中b表示子词的起始字符,e表示子词的终止字符;另一个是起始字符的隐藏状态hbh_b:
序列标注 | (7) 融入字典知识的神经中文分词
LSTMCell是LSTM单元的一个简化版本,只计算记忆向量cwb,ec_{w_{b,e}}cwb,ec_{w_{b,e}}链接到终止字符用于计算终止字符的隐藏状态。
如果某个字符有多个记忆cell输入,如上图中的“院”,他有两个子词记忆向量“学院”,”科学院“作为输入,此时为每个子词输入设计一个门,来控制它的贡献。
最后将隐藏状态输入到CRF层进行标签推理。