采用Stack-Tree LSTM的汉语一体化依存分析模型
2019-02-25刘明童张玉洁徐金安陈钰枫
刘 航,刘明童,张玉洁,徐金安,陈钰枫
(北京交通大学 计算机与信息技术学院,北京 100044)
0 引言
分词、词性标注和依存句法分析三项任务是汉语自然语言处理的基础技术,其性能的提高对于机器翻译等其他任务的实际应用至关重要。将三项任务融合到一个模型中并行处理的一体化依存分析模型[1-4]解决了串行处理方式中各任务间的错误传播问题;同时任务的中间结果可以相互利用,使得三项任务相互协调以提升性能。因此,如何充分利用中间结果作为特征成为一体化依存分析模型性能提升的关键问题。
基于特征工程的一体化依存分析模型[1-3],总结了大量有效的特征模板来获取中间结果信息作为特征,在三项任务上取得了很好的性能。基于神经网络的一体化依存分析模型[4],利用神经网络自动学习有效特征,仅结合少量特征模板就达到了接近特征工程模型的性能。但是,目前无论哪种模型在利用中间结果时都未能充分考虑已经形成的依存子树信息,而分析栈中保存的依存子树作为中间结果的主要成分,对三项任务的后续分析有着重要的指导意义。
针对该问题,本文提出Stack-Tree LSTM依存子树编码方法获取分析栈中所有依存子树的完整信息。具体地,我们采用Tree LSTM对每棵依存子树信息进行编码,并利用Stack LSTM将分析栈中的所有依存子树的编码结果累积到栈顶,作为特征参与随后的动作转移决策。利用该编码机制,我们提出词性特征的使用方法,在依存子树编码中融入词性信息。以此为基础,搭建汉语一体化依存分析神经网络模型,并采用双向LSTM获取句子的N-gram特征和上下文信息。本文在CTB5数据上进行评测并与已有模型进行比较。评测结果显示,本文模型在分词、词性标注和依存句法分析任务上的F1值分别达到了97.78%、93.51%和79.66%,均优于已有基于神经网络的一体化依存分析模型。
本文组织结构如下:第1节介绍一体化依存分析模型以及依存子树编码的相关工作;第2节详细描述本文提出的Stack-Tree LSTM依存子树编码方法;第3节详细描述基于Stack-Tree LSTM依存子树编码的一体化依存分析神经网络模型;第4节介绍评测实验与对比结果分析;第5节对本文工作进行总结。
1 相关工作
基于转移的汉语一体化依存分析模型最早由Hatori[1]等提出,通过以汉字为处理单位将分词任务设定为字的归约操作,并在字的归约操作时附加词性信息,实现词性标注任务,由此,实现三项任务的并行处理。在一体化依存分析模型中,三项任务各自形成的中间结果保存在分析栈中,包括完成分词的词语、词性、依存子树和未成词的字串,这些信息构成了三项任务相互制约协调的特征。如何利用这些特征帮助转移动作决策成为之后研究的主要课题。Hatori[1]等利用分析栈顶的三个元素抽取特征,对于依存子树只抽取根节点、最左、最右孩子等部分节点,而不考虑其他节点。Zhang[2]等在Hatori[1]等工作的基础上,标注词内汉字之间的依存关系用于字的归约操作,增加词内的依存关系信息作为特征,在依存分析任务上取得了目前最好的结果。
Kurita[4]等首次将神经网络方法运用到一体化依存分析模型中,利用之前工作总结的特征模板抽取分析栈的信息,同样利用栈顶三个元素,只抽取依存子树根节点、最左、最右孩子节点等部分节点信息,通过分布式方法表示输入到神经网络多层感知机进行转移动作决策,在分词和词性标注任务上取得了目前最好的结果。同时Kurita[4]等采用双向的长短时记忆神经网络(long short term memory,LSTM)对句子N-gram信息进行编码自动学习特征,该模型也仅利用了分析栈顶三个元素中汉字的N-gram信息,其性能接近特征工程的最好结果。
为了利用依存子树所有节点的信息,Socher[5]等提出组合向量文法自上而下编码整棵依存子树。Tai[6]等提出Tree LSTM神经网络模型,根据节点的分支个数调整神经单元中忘记门的数量,实现对依存子树信息编码。但是,这两个模型仅适用获得句子整体依存结构的情况。之后,Bowman[7]等首次在句法分析过程中使用Tree LSTM编码子树,根据子树的构建特点将神经单元忘记门的数量设置为2,使得Tree LSTM每次结合两个节点;编码结果保存在分析栈中,当与其他子树的根节点建立句法关系时,用于计算新的子树编码表示,以此得到子树的完整信息,并在句法分析和句子理解的联合任务上取得了较好的结果。但是Bowman[7]等的工作无法利用分析栈中同时存在的多棵子树信息。为了解决该问题,我们受Dyer[8]等工作的启发,利用Stack LSTM可以获取分析栈中所有元素信息的优势,提出了Stack-Tree LSTM依存子树编码方法,用于一体化依存分析。
已有的一体化依存分析神经网络模型忽略了词性标注的中间结果,而词性作为特征对于分词和依存分析有很大帮助。为了利用词性信息,我们提出了一种词性特征的利用方法,将词性信息融入到词向量中,参与转移动作决策。
2 Stack-Tree LSTM 依存子树编码方法
本文结合Stack LSTM和Tree LSTM的优势,提出Stack-Tree LSTM神经网络模型,获取分析过程中形成得依存子树信息。利用Stack LSTM[8]的结构优势,将分析栈中所有元素信息汇总到栈顶;采用Tree LSTM获取依存子树的信息。主要思想是在一体化分析过程中,如果分析栈中某一元素是一棵依存子树,则使用Tree LSTM编码该子树;如果某一元素是词语或者未成词字串,则使用LSTM单元编码该词语或者字串。其中Tree LSTM神经单元按照依存关系对头节点和依存节点进行处理,获的依存子树的编码结果;而Stack LSTM结构可以将多棵依存子树的信息汇总到栈顶,从而增强模型对依存子树信息的获取能力。除此之外,本文使用的Tree LSTM神经单元与LSTM神经单元具有相似的门结构,通过门结构的控制作用避免了以往依存子树编码方案中的梯度消失问题[8]。
基于转移的分词、词性标注和依存句法分析的一体化依存分析模型可视为一系列转移动作的决策问题。转移模型由分析栈S={…,S1,S0}和待处理队列Q={Q0,Q1,…}构成,分别记录包含依存子树的中间结果和待分析的字序列。初始状态下S为空,Q为句子的所有字符;每次执行一个转移动作,并从当前状态更新至下一个状态;终止状态下S为一棵完整的依存树,其中包含了分词和词性标注结果,Q为空。本文采用以下4种转移动作[1]:
(1) SH(k)(移进):将Q中的首元素作为词的开始字符移进S,并赋予词性k作为该字符所在词的词性;
(2) AP(拼接):将Q中的首元素拼接到S的顶部元素中,该动作执行的前提条件为前一步动作是SH(k)或者AP;
(3) RL(左归约):S顶部的两个元素S0和S1出栈,构建依存关系S1←S0,将根节点S0入栈,S1、S0是依存子树或者词;
(4) RR(右归约):S顶部的两个元素S0和S1出栈,构建依存关系S1→S0,将根节点S1入栈,S1、S0是依存子树或者词。
其中,SH(k)动作和AP动作完成分词和词性标注任务,通过SH(k)确定每个词的开始边界及词性;RR动作和RL动作完成依存分析任务,构建一棵完整的依存树。
采用上述转移动作,我们提出的Stack-Tree LSTM依存子树编码方法的结构如图1所示。图1(a)显示了某一时刻分析栈S和待处理队列Q的状态,分析栈S中包含三个元素,其中词w1和w4以LSTM神经单元编码、子树w2→w3以Tree LSTM神经单元编码;从栈底到栈顶,神经单元之间进行信息的传输,栈顶元素神经单元的输出向量融合了栈中所有元素的信息,包括词、未成词的字串、及依存子树的信息,本文称栈顶输出向量为STL向量。随后依次执行SH、AP和RR之后的模型状态如图1(b)、图1(c)、图1(d)所示。
图1(b)显示执行SH(k)时的状态,待分析队列首元素ci被移入分析栈顶。因为ci是词的开始字符,所以采用LSTM神经单元对字符ci的字向量和当前的STL向量进行编码得到新的STL向量。
图1(c)显示执行AP时的状态,移入栈中的ci+1与栈顶ci构成字串cici+1。因为还未成词,所以需要将栈顶元素的所有字符作为字串处理。LSTM对未成词cici+1的字串向量和当前的STL向量进行编码得到新的STL向量。
图1(d)显示执行归约动作时的状态,下面详细介绍用Tree LSTM神经单元对形成的依存子树进行编码以及用Stack-Tree LSTM对栈中所有元素信息编码的原理。执行RR时,首先栈顶的字串cici+1出栈,成词为w5;随后w4出栈,构建依存关系w4→w5,得到新的依存子树。Tree LSTM神经单元对依存子树的头节点w4和依存节点w5的向量以及当前的STL向量进行编码,得到新的STL向量,其中包含了新形成的依存子树的信息。最后,以w4为根节点的依存子树作为新的元素被移入分析栈顶。本文采用的Tree LSTM神经单元在时刻t的计算方法如式(1)~式(3)所示。
图1 Stack-Tree LSTM依存树编码方法示意图
其中,it是神经单元的输入门,fhead,fdep分别是头结点和依存结点对应的忘记门,ot是输出门,ct是状态值,ht是隐藏层输出;W是神经单元中的参数矩阵,b是偏置项;σ是sigmoid激活函数,*是点积运算。
在一体化依存分析过程中,句子的依存关系随着转移动作的预测、操作,逐步形成;分析栈中保存了多棵依存子树。本文提出的Stack-Tree LSTM依存子树编码方法在执行归约动作时,对形成的新依存子树进行编码,并将分析栈中其余的依存子树信息输入到当前神经单元中,得到了当前时刻下包含所有依存子树信息的STL向量。已有的Tree LSTM依存树编码方法是在单棵依存子树上进行编码,无法将多棵依存树信息融合在一起,因此无法充分利用分析栈中的中间结果信息参与后续的转移动作决策,而本文的方法针对这一个问题给出了有效的解决方案。
3 一体化依存分析神经网络模型
利用本文提出的Stack-Tree LSTM依存子树编码方法构建汉语一体化分析神经网络模型,如图2所示,主要由Stack-Tree LSTM依存子树编码层、N-gram特征层和多层感知机决策层三部分组成。本节主要介绍后面两个组成部分。
图2 一体化依存分析神经网络模型
3.1 字向量、词向量和字串向量
(4)
本文采用字向量加和求平均的方式获得字串向量,保留了字串中所有字符的信息,更具体、准确地表示字串的语义。这种计算方法改进了已有研究中集外词的处理方式,在一定程度上避免了仅仅采用一个特殊标记,如oov或unk,代替集外词所造成的信息损失。
在依存子树编码层,我们首先按照上述字串向量的计算方法得到依存子树中节点的词向量wg,然后将该词的词性标注信息wpos加入其向量中,具体计算方式如式(5)所示。
w=max {0,Wword[wg;wpos]+bword}
(5)
其中,Wword是参数矩阵,bword是偏置项。
3.2 N-gram特征层
对双向LSTMs编码后的四种N-gram特征,我们按照式(6)融合四种特征得到每个字符的N-gram特征向量vi,然后用式(7)获取一体化分析模型在当前分析状态下的N-gram特征层状态表示,由分析栈顶三个元素和待处理队列首元素所对应的N-gram特征向量组成。
其中,i是字符在句中的位置下标(1≤i≤n);s2、s1、s0分别表示分析栈顶三个元素所对应的下标(词、字串开始字符的下标或者子树根节点开始字符的下标),b0表示待处理队列中首字符的下标;°是拼接运算符。在获取N-gram特征层状态信息时,为了简化模型的运算量,本文在式(7)的计算中只采用了4个特征[4,9]。
3.3 多层感知机决策层
本节利用前面介绍的依存子树编码层和N-gram特征层的状态表示,搭建基于多层感知机的转移动作决策模型,如图2所示。前两个relu隐藏层对N-gram特征层的状态表示进行信息的加工再抽取,获得更深层次的N-gram特征表示和更有效的全局信息。最后一个relu隐藏层融合前两个relu隐藏层的输出向量h与依存子树编码层的状态表示STL向量,得到当前状态下模型整体信息表示h1,其计算方法如式(8)所示。
h1=max {0,W1(h∘STL)+b1}
(8)
其中,Wi是最后一个relu隐藏层的参数矩阵,bi是偏置项。
最后设置softmax层将多层感知机输出向量h1映射到转移动作概率空间,得到转移动作的预测概率分布,如式(9)所示,其中Wp是权重矩阵。
pi=softmax(Wph1)
(9)
本文采用贪心算法确定转移动作,从当前状态下有效的转移动作中选出概率最大的动作,然后对待处理队列和分析栈执行相应的操作,更新模型状态。
3.4 模型训练
从训练数据的标注树中抽取其对应的转移动作序列,用于一体化依存分析神经网络模型的训练。本文采用交叉熵损失函数作为训练目标,并使用l2正则化缓解过拟合现象,目标函数如式(10)所示。
(10)
其中,A是训练数据的转移动作序列;θ是模型所有参数的集合;‖θ‖2是l2范数的正则化项,用来减少参数空间;λ用来控制正则化的强度。本文还使用dropout[10]随机删除网络中的某些神经单元来缓解过拟合现象,并采用Adam[11]算法和误差反向传播方式学习模型参数。Stack-Tree LSTM、N-gram特征层的双向LSTM和多层感知机在目标函数约束下同步更新。
4 实验
我们采用多种依存树编码方式设计对比实验,验证本文所提方法的有效性,并与已有的一体化依存分析模型进行比较。
4.1 实验数据及评价方法
本文使用实验数据为宾州汉语树库CTB5,并按照已有工作[1-4]的数据划分方案,其中训练集为1~270篇、400~931篇和1 001~1 151篇;开发集为301~325篇;测试集为271~300篇。实验数据集详细信息如表1所示。
我们使用斯坦福分词工具[12]对gigaword生语料进行分词,然后利用Word2 vec[13]预训练字向量和词向量。分词、词性标注和依存句法分析的评测指标均采用准确率、召回率、综合性能指标F1值。其中词性标注和依存分析的评测均是在分词正确的基础上进行的。若分词错误,则相应的词性标注和依存分析结果也被视为错误。在依存句法分析的评测时,具有依存关系的两个词语均被正确分词且依存弧的方向正确才被视为正确的依存关系;遵循惯例,与标点符号有关的依存关系不予考虑。
表1 数据集统计信息
4.2 参数设置
我们使用训练集、开发集及预训练得到的字向量和词向量进行初步实验,获取超参数。对于预训练中未获得的字向量和词向量进行随机初始化。模型训练终止条件为三项任务在开发集上的F值趋于稳定。最终获得的各项超参数如下:字向量和词向量维度均设置为200,双向LSTM和Stack-Tree LSTM隐藏单元个数均为200,词性向量维度为32。多层感知机隐藏层节点数为400,模型初始学习率为0.001,dropout值为0.2。
4.3 实验结果与分析
对于本文提出的依存子树编码方法和词性使用方法,我们在下面分别分析它们在模型性能改进上的贡献。
4.3.1 依存子树编码方式
我们使用上面参数训练本文提出的一体化依存分析神经网络模型,由Stack-Tree LSTM依存子树编码层、N-gram特征层和多层感知机决策层组成,命名为Ours。同时,为了与其他编码方式比较,我们对模型中的依存子树编码层进行替换,分别用Stack LSTM[8]、递归卷积神经网络RCNN[14]和双向LSTM[15]替换并训练得到三个模型,分别命名为Stack LSTM、RCNN和BiLSTM。四个模型在测试集上的评测结果如表2所示。
实验结果显示,在词性标注任务和依存分析任务上,本文所提模型(Ours)的性能优于Stack LSTM、RCNN和BiLSTM三个模型,表明Stack-Tree LSTM依存子树编码方法在依存子树信息获取方面具有较强的能力。同时,在分词任务上,本文所提模型的性能略低于RCNN模型,主要原因是RCNN模型在对依存子树编码时还使用了依存距离特征,而目前我们的模型还未利用该特征,今后我们将研究融合该特征的模型。
表2 不同依存子树编码方法对模型性能的影响(%)
4.3.2 词性特征的影响
为了验证词性特征对每个任务的影响,我们在Ours模型中删除词性特征,重新训练模型,命名为-POS。具体的,在依存子树编码层,字串成词时,其词性向量不加入词向量。在测试集上的评测结果如表3所示。表3结果显示,-POS模型在分词和依存分析任务上的F1值均低于使用词性特征的模型,说明词性特征的使用对模型性能的提升有帮助,特别在依存分析任务上F1值提升了0.2个百分点。
4.3.3 与已有工作对比
为了与已有的汉语一体化依存分析模型进行对比,我们在表3中还列出了已有代表性工作的评测结果。其中Hatori12、Zhang14和Guo14是基于特征工程的一体化依存分析模型;Kurita17(4 feat)和Kurita17(8 feat)是基于神经网络的一体化依存分析模型;Kurita17是基于特征工程与神经网络融合的一体化依存分析模型。
首先进行神经网络模型之间的比较。与 Kurita17(4 feat)相比,Kurita17(8 feat)使用了依存子树部分孩子节点的特征信息,在词性标注和依存分析任务上取得了更好的F1值,但在分词任务上的F1值低于前者。本文模型Ours在三项任务上的性能均优于Kurita17(4 feat)和Kurita17(8 feat),与两个模型的最好结果相比,在分词、词性标注和依存分析三项任务上分别提升了0.06%、0.14%和0.28%。考虑到这两个模型未使用词性特征,我们将本文模型Ours去除词性特征的模型-POS与之比较,-POS模型在三项任务上的性能仍优于这两个模型。这些对比结果显示,本文模型在基于神经网络的模型中取得了最好的结果,表明本文提出的Stack-Tree LSTM依存子树编码方法可以有效获取分析栈中各依存子树的整体信息,而且这些信息对于一体化依存分析的动作决策发挥了有效的指导作用,帮助模型提高性能。
表3 汉语一体化依存分析模型的对比结果
注:*代表使用了大量特征模板。
然后与基于特征工程的模型比较。在基于特征工程的模型中,Hatori12在分词和词性标注任务上的F1值最高,Zhang14在依存分析任务上F1值最高而且是目前所有模型中最高水平。与这些结果对比,本文模型在分词任务上的F1值高于Hatori12,但是在词性标注上的F1值略低于Hatori12,在依存分析上的F1值略低于Zhang14,说明我们的神经网络模型在仅利用很少特征的情况下已经非常接近基于特征工程的模型,表明本文所提出的依存子树编码方法的有效性。同时,表明基于特征工程的模型在特征选取与使用上达到了相当成熟的水平。
最后与特征工程和神经网络融合的模型比较。Kurita17使用了特征工程中得到的特征模板共50个,并采用分布式方法表示。该模型在分词和词性标注上的F1值达到了目前所有模型中最高水平,表明了两种方法融合的有效性。与之相比,Kurita17(4 feat)和Kurita17(8 feat)分别只使用了4个和8个特征模板,但是由于使用双向LSTM对句子进行编码,有效获取句子的全局信息,所以即使使用少量特征模板也达到了接近特征工程的效果,表明神经网络模型具有自动学习所需特征的能力。本文模型同样只使用了4个特征模板,在三项任务上的F1值超过了Kurita17(4 feat)和Kurita17(8 feat),更接近Kurita17模型,表明本文的Stack-Tree LSTM依存子树编码的有效性。
目前分词、词性标注和依存分析任务上的最好结果分别为98.24%、94.49%和81.63%,其中分词和词性标注由Kurita17特征工程和神经网络融合模型获得,依存分析由Zhang14基于特征工程的模型获得,这些模型均使用了大量特征模板。从以上评测结果的比较与分析中,我们发现基于神经网络的模型仅使用少量特征模板已经取得了接近使用大量特征模板模型的性能,表明本文神经网络模型具有自动学习特征的能力,同时更全面地利用中间结果信息,学习到传统特征工程未能覆盖的有效特征;通过引入依存子树编码机制为一体化依存分析模型利用分析栈中从未被使用的中间结果提供了一条新的途径。
5 总结
本文提出了Stack-Tree LSTM依存子树编码方法,通过对分析栈中所有依存子树的整体信息进行编码,为三个并行任务提供所有中间结果信息作为后续分析的特征。我们以此为基础搭建一体化依存分析神经网络模型,并提出词性特征的使用方法。CTB5上的对比评测实验验证了本文提出的依存子树编码方法和词性特征使用方法的有效性。作为今后的工作,我们将考虑在一体化依存分析神经网络模型中融入经典的特征模板知识,增加对比实验。