基于RNN的中文二分结构句法分析

2019-02-25 05:31王瑞波李济洪李国臣
中文信息学报 2019年1期
关键词:间隔短语节点

谷 波,王瑞波,李济洪,李国臣

(1.山西大学 计算机与信息技术学院,山西 太原030006;2.山西大学 软件学院,山西 太原030006;3.太原工业学院,山西 太原030008)

0 引言

句法分析是自然语言处理中常用的核心技术之一,许多自然语言处理任务都依赖于它。通常来说,句法分析的任务是将词的线性序列表示为一个句子,分析成一棵树结构的形式。

句法分析的理论大致上可以分为两类,一类是基于乔姆斯基提出的短语结构文法[1-3]的上下文无关文法(CFG),以及之后扩展的概率上下文无关文法(PCFG)[4-5],一般将这种分析方法称之为成分(constituency)句法分析,分析的结果是一棵短语结构树,叶子节点是词,树的所有的中间节点都是短语(成分);另一类是基于L Tesniere提出的依存语法理论,这种分析一般称之为依存(dependency)分析[2],依存分析的结果是一棵依存树,依存树描述的是句子中词语之间非对称的二元关系。本文所指的层次句法分析是前一种,即成分句法分析。

早期的成分句法分析大多是基于给定的文法(也称为产生式或规则)进行的。这种方法需要事先人工构建句法规则,容易实施。但缺点是不能解决句法多义性问题,且人工构建的句法规则通常不能覆盖全部的句子或短语的形式。为此,Briscoe[6]等提出了一个基于概率的自底向上的LR分析器,而Collins[7]则是在自顶向下的句法分析过程中使用概率来进行剪枝。近年来,主流的一些句法分析方法则转向于基于无规则的自底向上的移进归约的分析[8-10],这类方法使用分类器根据当前分析栈和输入队列的特征,对移进和归约的动作进行概率判断,选择当前特征下最有可能的动作执行,从而自底向上地构建出句法树。Liu[11]等则在移进归约分析中通过BiLSTM抽取Lookahead特征来提高分析器的性能,该系统在宾州英文树库上的F1值达到了91.7%,在宾州中文树库CTB 5.1上的F1值达到了85.5 %。Cross[12]等也利用了LSTM基于句子成分的跨度(span)提出了一个移进归约的系统,在英文宾州树库上的实验结果F1值为91.30%,法语上F1值为83.31%。Socher[13]等则直接使用一个结构递归的神经网络(recursive neural network,RecNN)学习句法树的递归结构,进行了英文的句法分析。另外,也有研究者融合多个句法分析器进行句法分析,通过重排候选树集合提高了句法分析的性能[14],当使用人工正确的分词和词性标注时,该分析器在中文宾州树库CTB2上的F1值为89.8%,在中文宾州树库CTB 5上的F1值为86.8%。朱慕华[15]等则是使用向上学习策略,提高了系统的速度,最终的系统在中文宾州树库CTB 5.1的F1值达到了82.4%。目前这些方法中都用到词性标注,而且词性标注正确率对于系统的最终性能影响非常大。

然而宾州树库的词性标注体系与国内主流的中文词性标注体系还是有较大差别的。在国内主流的词性标注体系中,中文里的词无论在句子中主语还是谓语位置,其词性基本上是确定的,也就是说,动词可以做主语、宾语是常态。在中文里,连续多个词标注为动词也是常见之事,因此,按照英文以词性为基础的句法分析方法似乎不太合适。

对中文句法分析的研究,文献中大多是借鉴英语的句法分析方法,少有从中文的句法分析理论出发来研发相应的技术。许多语言学家认为,中文是意合语言,形式标记不明显,相比较英文而言,中文句法分析较难。特别是完全中文句法分析(既有树结构又有树节点成分的短语类型)技术更难。朱德熙[16]和陆俭明[17]先生的现代汉语语法理论认为中文的短语和句子是属于同一个层面的范畴,中文句子结构与短语结构是同构的。中文句子并不像英文那样词构成短语,短语构成句子,句子主要是SVO结构。中文的词构成短语,词也可直接构成句子,短语与句子之间是实现关系,不是构成关系。句子与短语的结构都可以二分结构来分析,中文的层次分析法就是二分结构的句法分析。依照这个理论体系,自动句法分析只需要每次对各成分一分为二。本文探索基于循环神经网络(RNN)机器学习模型,来实现二分结构的句法分析。相较于传统的成分句法分析,本文方法主要有以下几个特点:

第一,对句子只做二分的结构分析,不做短语类型识别。依据层次分析理论,中文句子的结构是层次二分结构,结构类型与短语结构类型相同。在中文里,相比较而言句子的层次结构是理解句意的关键,因此我们只做层次结构分析。这样可以使得中文的短语以及整个句子的分析统一在一个二分结构的框架内,使得句法分析的问题从形式上得以简化,也使得算法实现起来比较简洁、高效。

第二,基于哈夫曼编码来表示句法树。由于采用二分的结构,我们语料库中标注的句子都是一个满二叉树。把中间节点按照哈夫曼编码的方式进行标记,使得语料库中的句子标注形式非常简单(没有像传统的树库那样使用多重括号对的形式),方便阅读、存储以及后期的分析处理。

第三,使用RNN模型,只用词特征。该方法没有使用基于转移的移进归约的方法,也不是基于chart的自顶向下的方法,而是通过递归地使用序列标注器进行句法分析。相对于基于CFG的句法分析方法,这种方法的优点是不需要词性信息,也不需要中心词信息或者分析栈和输入队列等的特征。本文的方法直接以词序列为输入,通过同时学习词表示向量(word-embedding)和模型参数,训练得到一个序列标注器,递归地使用序列标注器来进行句法分析。

第四,使用hinge-loss的词间隔标注策略。我们把句法分析看成是一个将序列逐层二分的问题,其任务就是每次寻找一个可以将序列一分为二的最优的间隔标记位置,即寻找使得分割序列的间隔最大的得分位置,并以hinge-loss作为损失函数。这样在使用RNN时可以有效地利用间隔左右两边所有词的信息来共同确定词间隔的标注。

第五,用m×2交叉验证序贯检验比较模型的性能。传统模型比较方法是在验证集上直接对比大小,从统计意义上来说是不可靠的。本文采用了m×2交叉验证(以下简写为m×2 CV)序贯t-检验。m×2 CV是将语料进行m次两等份切分,从而得到指标估计的方差估计,逐步增加m构建相应的序贯t-检验,使得对算法模型的性能的对比更加准确、可靠。

除了本文提出的在hinge-loss损失下,对词间隔进行标注的RNN模型(简称RNN-INT)外,还对比了RNN[18-19]模型(recurrent neural network,RNN)和LSTM[20-21]模型,以及条件随机场(CRF)[22]模型各自在不同窗口下的性能。结果表明本文提出的RNN-INT模型在窗口为1时取得最好的结果,并且在m×2 交叉验证的序贯t-检验中是显著优于其他模型的。在测试集上,以PARSE-VAL[23]的评测体系,短语的块F1值达到了71.25%,整句的正确率达到了约43%。

论文内容安排如下,第1节介绍中文二分结构树库的标注方案,第2节介绍把二分结构句法分析转换为序列分割问题以及采用的标记方案,第3节介绍RNN-INT模型,第4节是实验设置方案以及m×2 CV序贯t-检验方法,第5节是结果与分析,第6节是总结以及下一步计划进行的工作。

1 中文二分结构句法树库与编码方案

1.1 中文二分结构句法树库

根据中文层次分析法的理论,中文的每个句法成分都可以看成是由左、右两个子成分构成,给定的中文句子均可分析成一棵满二叉树(full binary tree)。从朱德熙先生的观点来看,除了少数外来词,中文的绝大多数多字词内部也是二分结构的,词的内部结构关系、短语的内部结构以及句子的内部结构关系是一致的。因此,如果将字作为最终叶节点的话,这种二分结构甚至可以将中文的分词一并纳入到一个句子的二分句法结构中。

中文的二分句法结构中的句法成分有6种内部结构[16-17],包括偏正结构、述宾结构、述补结构、主谓结构、联合结构和连谓结构。除了联合和连谓结构可能出现三个或三个以上的并列的成分,其他4种都是自然的二分结构。对于三个或三个以上的成分构成的联合或连谓结构,采用从左到右的顺序将其依次进行二分处理。

依据以上分析原则,我们标注了一个中文树库,每棵标注的句法树是满二叉树,即树中任何一个非叶子节点的句法成分,都由左、右两个子树(子成分)组成。目前树库中有30 034个简单句(无标点),都是从北大新闻语料(有人工分词和词性标注,但我们没有使用词性)标注中选取的,没有标注成分的内部结构。

1.2 中文二分结构句法树的哈夫曼编码表示

一个句子的二分结构句法形式是一个满二叉树,可以采用哈夫曼编码进行标记,这种表示方式可以以一种非递归的线性的形式描述出递归的二分的层次结构的句法树的全部信息。这样要比括号对的表示形式更加简洁、直观,方便标注人员阅读和标记,也便于存储。因此我们在语料库中对词的间隔使用了哈夫曼编码进行标记(huff-labels)。给定一个有n个词的句子,对其n-1个间隔(或称为句法成分的切分位置)进行标记,将一个二叉的句法树的结构,表示成n-1个数字。具体的标记方法如下:

(1) 句法树的根节点的编码标记为1;

(2) 对于句法树中的非根中间节点,假定其父节点的编码为h,按照如下方式确定其对应的哈夫曼的编码:

a) 如果该节点是其父节点的左子节点,则其编码为父节点的哈夫曼编码乘以2,即h*2。

b) 如果该节点是其父节点的右子节点,则其编码为父节点的哈夫曼编码乘以2,然后再加1,即h*2+1。

例如,“我们 班 有 许多 外国 学生”,对应的句法树形式如图1所示。

图1 二分结构句法树的哈夫曼编码标记

图1中,矩形表示句法树的叶子节点(词),圆形表示句法树中非叶子节点(短语),圆形中间的数字表示该间隔位置对应的哈夫曼编码(图中显示的是其二进制形式)。通过实线连接的叶子和非叶子节点构成了一棵二分结构的成分句法树(满二叉树)。图中用虚线链接的两个圆形节点,是为了清楚地显示非叶子节点和它对应的词间隔的位置而增加的。我们以文本格式保存二分结构句法树,并且使用分号“;”将句子和它的对应的哈夫曼编码十进制序列分开,并列放在一行中,编码之间也用空格分隔。这样就把一个句子和它的二分结构的句法树的编码描述放在一行中,表示成一个线性形式。最终的表示示例如下:

我们 班有 许多 外国 学生;2 1 3 7 15。

2 将二分结构句法分析转换为递归的序列分隔问题

本文采用自顶向下的分析方法,将句法分析看作把一个序列逐层向下分割为两个子序列的递归过程。每次都把一个长序列分割成两个短的子序列,然后再分别对两个短的序列进行递归分割,直到分隔至每个词。这样句法分析就转换为一个逐层的序列标注问题,从而可以把机器学习中序列标注技术应用到二分结构的句法分析上。

如果对句子的所有可能句法树都计算其得分,然后选择得分最大句法树为最终分析结果,这样的计算量是非常巨大的。Socher[13]等使用RecNN对英文进行句法分析时使用了贪心算法,他们在实验中发现,在每步保存k个最好的子树,最终的句法分析结果并不比仅保存一个最好的子树的结果好。本文采用了贪心算法,每一次二分的时候,只保留当前序列划分为左右两个子序列的最大得分的结果,即只考虑当前最优,而不考虑最终得到的树的全局最优。

2.1 二分结构的间隔标记策略

序列标记策略有多种[24-25],不同的序列标记方案在不同的机器学习模型下的性能是有明显差异的。我们针对二分结构句法分析任务提出了一种对词间隔进行标记的方案,下面以例句“我们 班 有 许多 外国 学生”进行说明。对于切分后的左右两个成分,都按照从左到右深度优先的顺序进行描述。

(1) BI标记:每次切分都是划分成两整块,没有组块分析任务中的块外词,所以把传统的BIO标记中的O去掉,B表示当前词是一个成分的开始,I表示当前词是一个成分的内部;若成分由一个词构成,把这个词标为B。这种标记关注的是第二个成分的B标记(右边成分的第一个词)的识别,示例见表1。

表1 BI标记示例

(2) LR标记:每次切分出的左右两个子成分,可以通过左右两种标记分别标出对应的词,把左边成分的词都标为L,把右边成分的词都标为R。从L到R的转换的位置,决定了切分的位置,示例见表2。

表2 LR标记示例

(3) BEO标记:把紧邻分割位置的左右两个词作为重点考虑,分割位置左边的词标为B,分割位置右边的词标为E,其他的词标为O。这种标记方式重点关注紧邻切分位置的左右两个词,示例见表3。

表3 BEO标记示例

(4) INT标记(间隔标记):这种标记方式不是标记词,而是标记词与词之间的间隔。n个词的句子序列,有n-1个间隔,把分割位置的间隔标记为1,其他间隔标记为0。这种方式直接对间隔进行标记,从而避免了前面其他几种标记方案中把对词标记转成对间隔的划分时所产生的不一致现象,示例见表4。

表4 间隔标记(INT)示例

2.2 序列的递归分割处理算法

假设给定了一个训练好的序列标注器M,当给定一个由词序列“w1w2…wi…wn”组成句子S作为输入,序列的二分结构的递归分割处理算法如下:

1. 把句子S: w1 w2…wi… wn,看成词序列作为输入,每个词的索引固定。2. 调用序列分割程序,S为其参数(1) 如果S长度为1,返回。(2) 如果S长度为2,将两个词分成两个左右子序列,并把第一个词的索引,记为此次分割的位置,返回。(3) 如果S长度大于2,调用M对序列w1 w2 …wi… wn进行分割。假设得到的两个子序列分别为w1…wi和wi+1 … wn,将左边序列最后一个词的索引i记为此次分割的位置。然后分别把w1…wi和wi+1… wn分别作为新的参数S,递归调用序列分割程序(转2)。3. 根据序列分割程序每次保存的分割的索引信息,生成一棵满二叉树作为分析结果。

3 间隔标注的RNN模型(RNN-INT)

第2节将二分结构句法分析转换为递归的序列分割(标注)问题,对序列标注任务,目前性能比较好的是条件随机场模型(CRF)和神经网络模型(RNN,LSTM)。在最初的实验中(数据分为训练集,验证集,测试集,没有使用交叉验证),对RNN和CRF中都使用了除间隔标记(INT)之外的多种标记策略进行了实验,发现RNN使用BI标记要好很多,而CRF中使用BEO和LR的结果也优于其他标记。因此后续的交叉验证实验中,对CRF选择了LR和BEO两种标记,对RNN和LSTM则只选择了BI。针对词间隔标记策略,我们基于RNN结构提出了RNN-INT模型,采用hinge-loss为损失函数,在每个词间隔上计算得分并进行标记。

3.1 RNN模型

本文的RNN-INT模型,基于Elman[19]提出的RNN结构,所以我们先简单介绍RNN结构。三层的RNN网络,分为输入层、隐层和输出层。

输入层:可以采用Collobert[26]等的方法,将词库中的每个词都表示成一个向量(word-embedding),并对当前词采用开窗口的方式。假设每个词对应的word-embedding维数大小为d,窗口(对称)大小为s,拼接后可以得到一个大小为d*s的输入向量x。

隐层:对于句子中的词按照从左向右的顺序依次传递给网络,假设当前时刻t的输入向量为xt,输入层连接到隐层的权重矩阵为Wh x,隐层连接到隐层的权重矩阵是Wh h,隐层的偏置向量为bh,隐层的激活函数为σ,t时刻隐层的计算如式(1)所示。

ht=σ(Wh xxt+Wh hht -1+bh)

(1)

输出层:是一个softmax层。有几个类别标记,最终的输出层就有几个输出单元,假定当前时刻t,隐层连接到输出层的权重矩阵是Who,输出层的偏置向量是bo输出层的公式如式(2)所示。

yt=softmax(Wh oht+bo)

(2)

3.2 使用hinge-loss来度量词间隔标注的损失

Socher[13]等在用RecNN来做句法分析,也用了hinge-loss损失函数,通过计算相邻成分的得分,递归地对相邻成分进行合并。本文与其不同之处是,首先,我们是自顶向下的分析,从整句出发,递归对句子进行二分,直到不能分割为止;Socher等则使用自底向上的方案,递归地对两个成分进行融合直至形成一个节点。其次,Socher等对两个相邻节点计算融合得分的时候,只使用这两个节点的信息,而我们则是采用了RNN的方式,考虑了间隔左、右两边的整个成分的信息。第三,Socher的方法为了递归应用RecNN,要保证每个节点的向量等长,需要对两个子节点连接后得到的两倍长的向量进行线性变换,从而使父节点的向量和子节点的向量等长,而我们在序列二分后,对两个子序列独立再分,所以不涉及节点的融合。

从中文的特点知道,句法中短语的识别不仅由构成短语的词决定,还需要由短语前后的所有词共同决定,而传统的组块分析方法主要依赖相邻的词。考虑到这种二分结构句法的形式,采用直接对词之间的间隔进行标记的方法,并且把能分割的位置标记为1,不能分割的标记为0。采用贪心策略进行逐层二分结构的句法分析,每一次分析都是把一个成分切分成左、右两个子成分,即只能有一个词间的间隔位置被标记为1,其他的间隔位置都是0。

3.3 RNN-INT模型的结构

RNN-INT模型可以看作在输入层和隐层有两个独立的子网络,分别对应正向词序列(来自于间隔左边的词)和反向词序列(来自于间隔右边的词)。正向隐层和反向隐层的两个输出向量,在同一个输出层进行了合并。我们需要使得真实切分的间隔的得分大于其他间隔的得分,所以输出层没有进行softmax,而是对正反两个隐层的输出,和对应的权重向量进行内积运算,然后再把这两个值求和作为该间隔上的得分。网络结构如图2所示。

图2 RNN-INT网络结构

输入的中文句子sen=“w1w2…wn”,wi对应句子中的从左向右看的第i个词。

输入层:与前面所述相似,对每个间隔,有两个输入向量(分别由间隔左、右两边的词得到)。所以对于每个间隔,可以看作有两个输入层,一个正向输入层从左向右依次接收词序列(w1w2…wi);另一个为反向输入层,从右向左依次接收词序列(wn,wn-1…wi+1)。

输出层:两个隐层的输出在同一个输出层进行合并。因为输出层最终的输出是一个得分,score所以输出层只有一个输出单元,也不需要softmax运算。Wof和ho b分别表示正向隐层、反向隐层与输出层之间的权重矩阵;ho表示输出层的偏置向量。在t时刻输出层输出的scoret计算如式(5)所示。

(5)

损失函数:对序列进行一次切分时,只有一个词间隔可以是实际的切分点,因此需要使得这个间隔点的得分大于其他词的间隔点的得分。假设有n个间隔位置,每个间隔位置的真实切分标记为yi(需要把前面的0转成-1表示不在此处切分,1表示在此处切分),则对序列的一次分割的hinge-loss损失函数如式(6)所示。

(6)

训练采用随机梯度下降算法,损失进行反向传播,更新词表示向量和神经网络的权重。测试时,对一个词序列,把得分最大的间隔作为切分的位置。

4 实验设置

4.1 实验语料库的切分

目前我们的树库共有30 034个简体中文单句,句子只使用分词信息,没有标点,也没有使用词性。先从整个语料库中随机抽出6 000个句子作为测试集,剩下的24 034个句子作为建模的数据(以下记为D),然后将D使用m×2交叉验证(简记为m×2CV),Wang[27-28]等从理论和模拟实验上证明,m×2CV 方法是较好的模型比较方法,并且更适用于文本数据。

除了将句子包括在训练集中外,同时将句子的二叉树的每个成分都抽取出来,也独立看作一个句子,并加入训练集中作为训练样本(只含两个词的成分除外,在之前实验中发现,如果在训练集中加入这两个词的成分,会对序列标注器产生干扰,训练序列标注器去掉这些会轻微提高句法分析的性能,所以在最终的训练集合中把这两个词的成分都删除了)。例如,前面图1中的句子,“我们 班 有 许多 外国 学生”,经过抽取成分,可抽取出三个样例:我们 班 | 有 许多 外国 学生,有 | 许多 外国 学生,许多 | 外国 学生。

4.2 实验中的模型与标记方案

在CRF[注]https://github.com/taku910/crfpp模型的实验中,对于LR、BEO标记方案,分别记为CRF-LR和CRF-BEO;RNN和LSTM模型基于Theano[29]进行了实现,这两个模型下都用BI标记,所以模型后面不再加BI后缀。并且在这两个模型下对是否采用双向(bi),以及是否在最后一层使用了viterbi算法(vtb)的方式(即CRF方式)都进行了实验。本文提出的在词的间隔上进行标记的方案,称为RNN-INT。在每种模型下,都使用了对称窗口,窗口大小从0(只取当前词自己)到7。因为语料中的句子都是简单句,而且平均长度在10个词左右,所以没有再取更大的窗口。在RNN和LSTM的实验中,均采用sigmoid激活函数。

4.3 评价指标

完全句法分析中,多数文献中采用了块准确率,或者块召回率,或者块F1值作为评价指标[23]。本文以块F1值作为评价指标,由于语料基本都是单句,我们把整句正确率作为考察指标。

4.4 两模型性能对照的m×2交叉验证序贯t-检验

Wang[27-28]分析了常用的模型性能对比的t-检验存在的问题,提出模型性能比较的正则化m×2交叉验证序贯t-检验方法。理论和模拟验证该检验是相对保守的检验,可以得到更为可信的结论。Wang[27]等所给的3×2 CV t-检验自然可以扩展为相应的两模型性能比较的m×2 CV序贯t-检验,描述如下:

给定两个机器学习模型A、B及模型评价指标MA、MB,记M=MA-MB为两个模型性能之差,不妨假设MB为Baseline模型的性能。

原假设:H0:M≤0备择假设:H1:M>0。

∽Cm·t(2m-1)

(7)

5 结果与分析

5.1 基于m×2交叉验证的实验结果

本文m先取3。表5是模型的块F1和整句正确率在3×2交叉验证下的平均值。无论块F1值还是整句正确率,RNN-INT模型取窗口1的结果最好,达到68.93和39.88。图3和图4显示了模型的块F1值和整句正确率随着窗口大小的变化趋势,不同模型各自在不同的窗口下取得其最好性能。但趋势都是随着窗口增大,结果变好,随后趋于平稳或者略有下降。窗口增大模型的性能逐渐趋于接近。我们认为可能当窗口增大时对于之前性能低的模型会增加信息,性能也提升;对于性能已经很高的模型,反而增加了噪声使其性能下降。和之前预想不同,RNN和LSTM在该任务下性能相差不大,这可能和句子长度相对较短有关,使得LSTM没有发挥其长时记忆的优势,且由于其参数明显比RNN多,所以性能不高,甚至当窗口为0的时候,由于参数个数较多,但输入数据较少,性能反而是所有模型下最低的。双向模型和使用viterbi算法对性能都有明显的提升,但窗口小于3时,双向模型性能提高得多,当窗口大于等于3时,viterbi算法对性能提升得多,同时使用双向且结合viterbi算法都取得各自最好的结果。

我们在m×2CV下对RNN-INT和其他模型进行差异的显著性t-检验。在各模型各个窗口下,块F1和整句正确率的相关性非常大,整体相关系数为0.98,说明这两个指标有高度的正相关。这也符合我们的直观认识,句法块识别对的越多,对应的整句识别正确的也越多。我们取模型的块F1值最高的窗口,为该模型的窗口大小配置,都与RNN-INT在1窗口下进行t检验。表6是模型比较的m×2CV t-检验的结果。从表6中的结果看,RNN-INT与其他模型的性能之差都大于零,最少也高出近1个百分点,且大部分检验在m=3时t-检验就显著,少部分在m=6下才显著。RNN-INT与RNN_bi_vtb和LSTM_bi_vtb的整句正确率,即使在m=6时也不显著,且差异值及方差的估计在m=4,5,6时已经基本稳定,说明再增加m已无明显效果,故停止序贯实验。

图3 模型在不同窗口下的模型块F1值

图4 模型在不同窗口下的模型整句正确率

块F1整句正确率窗口大小0123456701234567CRF_LR51.1255.7358.1562.1364.0164.6564.6564.6013.9318.1527.3733.8836.2537.0436.8336.79CRF_BEO54.5165.0366.8766.7066.3866.1566.0765.9818.9833.1536.0335.8435.4935.1635.2635.10RNN54.5959.0264.5766.2366.7066.6666.4566.3921.6227.8534.9036.0836.4536.1935.7435.56RNN_bi62.9666.6066.7366.3866.0665.9565.8665.8032.6137.5337.1736.7936.2236.0636.0835.77RNN_vtb56.1359.4065.2967.1067.3467.4567.2767.0224.8129.1236.5738.0437.9737.7837.6337.22RNN_bi_vtb64.4166.5967.8467.6968.0267.4766.9866.8334.6137.6338.5538.3838.5937.9537.4237.17LSTM41.7559.4464.6466.1066.0466.0866.2165.643.7228.5735.3036.4436.2036.1836.2035.59LSTM_bi63.0766.5066.5866.6866.1766.0865.7465.6532.7137.5337.1237.2836.4536.2135.7935.71LSTM_vtb57.3259.5865.5167.0767.3067.3066.9966.5626.1229.2936.6637.9937.8737.7237.1736.96LSTM_bi_vtb64.5867.5368.1467.5367.7767.3067.2767.0034.8538.7438.9838.3538.3637.8037.6937.31RNN_INT66.0368.9367.9467.4067.2267.0266.8266.7235.7839.8837.8736.8836.5936.2135.8235.56

表6 RNN-INT与其他模型对照的t-检验p-值表

注:**表示显著水平为0.01下显著,*表示显著水平为0.05下显著。

根据以上分析,以数据集D进行模型选择的最终结果为词特征在1窗口下的RNN-INT模型,以此模型将全部数据D(即交叉验证的训练、验证集合并)为最终的训练集,重新训练RNN-INT模型。在最终的RNN-INT模型上,用6组不同的随机数初始化权重和词表示向量,得到在测试集的结果,如表7所示。最终在测试集(6 000句)上得到平均块F1值为71.252%,平均整句正确率的结果为42.998%。

表7 RNN-INT模型不同初始值在测试集的结果

5.2 域外词(out of domain)上的实验对比

表5显示基于神经网络的方法优于CRF方法,一个可能的原因是这类方法在域外词的处理上有优势。不同于CRF模型直接使用词本身作为离散特征,在神经网络模型中将词转换成了词的向量表示形式,是一种连续的特征,当遇到域外词时,通过其周围的域内词的向量也可以反映出一部分域外词的信息,从而降低了域外词的影响。

在3×2交叉验证实验中,我们以验证集中的句子中是否出现了训练集中没有见过的词为准,把验证集分成含有域外词和不含域外词两个子集,简记为OOD(out of domain),IND(in domain),分别在两个子集上计算指标值。经统计6组交叉验证的验证集中OOD的句子占比均大致在一半左右,占比平均为51.5%。我们对比了RNN-INT与CRF-LR模型。下面是在OOD和IND上分开统计的结果。

表8 OOD上的结果

表9 IND上的结果

从表8可以看出,在域外词集OOD上,RNN-INT比CRF-LR的块F1高出2.3%,整句正确率高出4.4%; 而在域内词集IND表9上却只高出1.7%,整句正确率指标上高出3.4%。因此,在处理域外词上,RNN-INT与CRF-LR相比还是有一定的优势的。

5.3 结论

对我们的实验结果进行分析总结,可以得出以下结论。

(1) RNN-INT性能最优。在所有的实验中,本文所提出的RNN-INT模型性能最好,对比其他模型,在性能上有显著的提高。该结果可能有以下几种原因。

词的间隔是中文成分之间分割的重要信息。我们认为不论是组块分析还是完全句法分析,成分的形成本质上是由两个成分两边的所有词共同决定的,不仅仅是两成分间隔相邻的少数词。特别是在二分结构的句法分析中,采用RNN对词之间的间隔进行标记,是利用了间隔左、右的所有词,抓住了成分整体的信息,从而提高标记的正确率。

在RNN-INT中使用hinge-loss损失函数,并使用正向、反向RNN计算词的间隔的得分,这在一定程度上考虑了一个序列的全局信息,从而使得训练得到的网络更可靠。另外,实验中发现RNN-INT模型相对于普通的RNN模型训练和预测的速度都快一些,我们认为这是由于该模型下不需要像传统的分类任务那样需要在最后一层进行softmax,RNN-INT只需要计算一个得分即可,并且hinge-loss损失函数也相对于交叉熵损失计算简单,这使得模型在训练和预测时速度得以变快。

在域外词的处理上RNN模型相对CRF模型有优势。这可能归功于RNN中使用了词的向量表示,这种表示方式本身会将词和它周围的词之间的信息进行融合,并包含在循环的隐层向量中,这使得即使在预测时没有见过的词,也可以通过相邻见过的词的表示向量,间接地获得了该词的一些信息,从而使得RNN比CRF对域外词处理上有优势。

在RNN-INT中采用词特征的1窗口有利于RNN。不同于CRF模型中使用的是离散特征,随着窗口增大,特征越来越稀疏,提供给模型的信息会越来越少,模型性能不再提升。而从RNN-INT的结果可以看出,在窗口为1时要好于其他窗口的情形,这说明在中文中使用当前词语与左、右两个词的拼接向量,做双向的循环迭代,构建两个成分的隐含表示(隐层向量)是最好的,并不是拼接的向量越长越好。

(2) m×2交叉验证进行模型选择和评估,结论更为可靠。采用m×2交叉验证,通过对语料数据集进行多次划分,进行多次实验,可以得到重复实验结果,并可以获得估计的方差,以及相应的统计显著性检验,从而对模型的性能评价更加准确。这样可以克服传统的简单地将语料切分为训练、验证、测试集,只能有一个实验结果,难以从统计的显著性来评价好坏。

6 总结与展望

完全句法分析是中文信息处理里的一个难题。为了构建一个简单的中文句法分析,我们以朱德熙和陆俭明先生的层次分析理论为基础,将中文句子的结构表示为逐层二分结构的形式,简化中文句子的分析过程,使得句法分析任务变得相对简单。

我们将二分结构的句法分析问题转换为逐层的序列标注问题,在已经构建的大约3万句规模的中文语料库上,使用了RNN、LSTM和CRF模型,在多种标注策略和不同的词特征窗口设置下,进行了模型对比的实验,最终在我们的测试集上的结果表明,本文提出的RNN-INT模型效果是最好的,最终的块F1值达到71.25%,整句的正确率达到了约43%。

目前我们的语料库规模还比较小,且都是单句,句子也没有标注成分的内部结构和短语类别。下一步,一方面我们计划继续扩充语料库,研究复杂句的二分结构标注方案,并且不断完善相应的标注规范,特别是针对一些中文特殊结构的句子提出其合理的标注方案(比如把字句、被子句等);另一方面我们计划将每个成分的内部的短语结构也进行标注。在算法方面,我们计划探索结合自底向上的方法,即同时利用词及短语的合并的信息,与词的间隔上的分割的信息进行二分句法分析,以期提高分析器的性能。

猜你喜欢
间隔短语节点
CM节点控制在船舶上的应用
间隔问题
基于AutoCAD的门窗节点图快速构建
概念格的一种并行构造算法
间隔之谜
《健民短语》一则
抓住人才培养的关键节点
上楼梯的学问
头夹球接力