李铂钧,项秀才让,德吉卡卓,群 诺*
(1. 西藏大学信息科学技术学院,西藏 拉萨 850000;2. 西藏信息化省部共建协同创新中心,西藏 拉萨 850000;3. 藏文信息技术教育部工程研究中心,西藏 拉萨 850000)
句法分析是自然语言处理研究中的关键技术之一,分为成分句法分析和依存句法分析。依存句法分析目的是发现句子中词与词之间的依存关系,通过分析句子得到依存关系树。依存树能够在许多的语义任务中提供有效的句法信息,例如语义角色标注、机器翻译、句子分类等任务。
基于转换的依存解析器[1,2]通过一系列操作递增地构建依存树。解析器的性能取决于每个时间步的决策中对解析器状态的有效建模。解析器状态通常包括两个内存用来建模对句子的解析过程,一个缓冲区,一个堆栈,从中可以推进或者弹出词[3]。传统上,解析器状态是使用人工选择的局部特征来建模的,这些局部特征仅仅与缓冲区或者堆栈顶部的单词有关[4,5]。随着深度学习的兴起,神经网络被用于训练依存句法解析器[6,7]。
对藏语的句法分析研究还远没有英语、汉语句法分析那么成熟。完么才让等人[8]采用非歧义的规则形式描述歧义特征,设计并实现了基于规则的藏文句法分析器。德格加等人[9]采用Early算法对藏文句子的语法结构进行分析,实现了藏语句子自动分析推导并生成句法分析树。多杰措等人[10]根据藏文格助词的特殊性,建立规则库,以线图分析算法对藏语进行句法分析。班玛宝等人[11]通过归纳藏文疑问句的结构特征进行分类,通过概率上下文无关文法对藏语疑问句进行了句法分析。多拉等人[12]利用递归的方法分析句子的结构,用递归转移网络算法来分析判断藏文的语法规则是否合法。
目前,在藏语依存句法分析的研究中,华却才让等人[13]提出一种基于判别式的藏语依存句法分析,研究了藏语的格助词搭配规则、意义及依存关系。华却才让等人[14]利用最大熵提取特征,采用分治策略,提出了一种基于判别式的藏文复合句切分标注方法。实验结果表明该方法在一定程度上降低了藏文复合句依存句法分析的复杂度。夏吾吉等人[15]设计了语义依存弧类型分析特征模板,保证依存弧没有交叉的前提下,采用最大熵模型对依存弧的依存关系类型进行了分类。索朗拉姆等人[16]构建了藏文祈使句的依存树库,确定了25种依存关系的句法标注规范,采用传统的统计学习方法条件随机场CRF模型(conditional random field)对藏文祈使句进行依存句法分析。随着深度学习的发展,英语、汉语等自然语言的研究早已采用深度学习的方式进行上下文特征的提取,而基于深度学习的藏语依存句法分析研究基本上是空白。为此,多杰才让等人[17]构建了CoNLL格式的藏语依存句法树库,用三层神经网络来对藏语进行依存句法分析,提高了藏语依存句法分析的质量。
本文用序列模型Bi-LSTM[18]来对每一个词进行编码表示,输入到模型的每个句子在经过编码后,将其传递给解析器状态。然而,用于依存句法分析的序列神经网络存在的问题是,转移算法通常采用的各种类型的特征被忽略,但它们对于捕获单词之间的依存关系非常重要。因此采用注意力机制对解析器状态建模,分析了堆栈信息、缓冲区信息、已完成解析出栈的词信息、解析器采取的动作的完整历史信息及语义信息对解析器状态的影响。另外,已经被大家广泛接受的一点是词性特征和依存句法分析是密切相关的。词性特征[19]直接影响依存解析的准确性。另外,在藏文的句法分析领域,更多的是对藏文的成分句法分析,通过深度学习提取特征的方式对藏文进行依存句法分析基本是空白的,本文通过研究汉文、英文、藏文的词性及句法特点,根据汉文和英文的UD格式,构建了小规模的藏文依存树库,并结合藏文的特点,用上述依存句法解析器对藏文进行依存句法分析,取得了显著的效果。
对于数据驱动的依存句法分析,目标是通过训练可以预测分数最高的依存树。对于输入模型中的一个句子S=w0w1…wn,将其映射到最佳的依存树G,其中,w0=Root是插入句子开头的一种词根标记,句子中的其它词不变。藏语依存解析树示例如图1所示。
图1 藏语依存解析树示例
G=(V,A)
(1)
(2)
(3)
基于转移的分析模型一般形式为M=(Ψ,λ,h),其中Ψ表示一组约束条件,用于约束给定句子允许的结构空间。λ是从数据中学习到的一组参数,h是解析算法。一个转移系统根据该系统每个时间步下的配置或者说是状态来预测这一时刻的转移动作。给定一个依存关系的类型集合R,解析句子S时的配置以一个三元组表示c=(σ,β,A),其中σ表示解析入栈的词集合wi∈Vs,β表示剩余的还未解析的存放于队列的词集合wj∈Vs,A则是依存弧集合(wi,r,wj)∈Vs×R×Vs,表示已经解析的部分依存树。初始配置c0包括一个空堆栈、一个缓冲区(包含一个特殊的索引根Root,后跟句子的所有词),还有一个空的依存弧集合。转移算法表示见表1。从初始配置c0(s)开始,只要还没有到达终端配置,则继续搜索最佳的转移动作t=o(c)。一旦达到终端配置,则只需要返回当前依存弧集合所定义的依存树。
表1 基于转移的分析算法
有两个基本的转移系统:arc-standard系统和arc-eager系统。采用Arc-eager转移系统,这个系统定义了四个转移动作分别是SHIFT、LEFT-ARC、RIGHT-ARC和REDUCE。假设要进行解析的句子是S={w1,w2,…,wn}。对于位于栈顶的词wi,当解析时不存在词wk充当它的中心词时,如果它可以依存于队首词wj,则此时采用转移动作LEFT-ARC,即在两个词语之间建立一条左向弧,使得栈顶词成为队首词的子结点,同时将栈顶词从栈中弹出。对于位于队首的词wj,当不存在wk作为中心词时,如果它可以依存于栈顶词wi,则此时采用转移动作RIGHT-ARC,即在两个词语间建立一条右向弧,使的队首词成为栈顶词的子节点,同时将队首词压入栈。对于栈顶词wi,如果存在词wk充当它的中心词时,如果它无法与队首词建立依存关系,则此时采用转移动作REDUCE,即将栈顶词从栈中弹出。当队首词无法与栈顶词建立依存关系时,采用转移动作SHIFT,即将队首词压入栈。
vi=BiLSTM(x1:n,i)
(4)
通常,特征函数F(c)[20]是复杂的,一般选取堆栈中的前三个词及缓冲区中的第一个词作为特征向量的部分。配置或者说状态c=(σ,β,A)的向量表示是堆栈σ中前三个词向量及缓冲区β中第一个词向量的拼接,如式(5)所示。
F(c)=VS2∘VS1∘VS0∘Vb0
(5)
以上只是对解析器状态建模的一种方法,堆栈信息在这个解析过程中起着至关重要的作用。接下来,经过多层感知机MLP计算得分函数Score(c, a)[20]。
Score(c,a)=MLP(F(c))[a]
(6)
模型结构图如图2所示,结构主要分为三部分输入层、状态编码层、MLP。
图2 解析模型结构图
为了融合在转移解析过程中更多的有用信息,将通过注意力机制整合多种特征信息。
堆栈和缓冲区中的词信息交互有两种方式。第一种方法是分别对堆栈和缓冲区中的单词进行自注意力计算,根据注意权重得到加权平均值,然后将得到的结果串联起来。第二种方法是使用stack和buffer分别作为Q和V来计算注意权重的加权平均值。然后对结果向量进行拼接。
为了捕获已经过解析的词信息,即从堆栈中弹出的词。首先计算弹出词集合中词的自注意权重的加权平均值,然后添加堆栈集合、缓冲区集合和弹出词集合的位置编码。弹出词的自我注意计算结果为Q,堆栈和缓冲区为V,分别计算堆栈和缓冲区交互计算的加权平均值,然后拼接得到的结果向量。
在依存句法分析中不能忽略语义信息,使用相似的信息交互方式来融合语义信息特征。在解析完每个句子后,将得到每个时间步下的转移动作。将包含所有历史转移动作的集合反馈到下一时间步解析器状态的建模。如图3所示,解析器状态融合了历史转移动作信息。
图3 转移动作信息的反馈
给定要训练的句子,目标是最大限度的缩小分数最高的正确转移动作和得分最高的错误转移动作之间的差距。定义解析器状态c下的hinge损失。如下所示
(7)
在训练过程的每次迭代,解析器计算可能的转移动作的损失。然后选择要确定的动作,并根据该动作转移到下一时间步的配置。总的损失是每个动作损失的总和。解析器每次采样的动作不是最佳的转移动作,而是所有有效的转移动作中当前模型得分最高的动作。这样做的好处是它在学习过程中可能会遇到错误的配置,即使之前有错误,它仍将尝试解析后面的内容。为了更多地探索错误配置,除了选择当前模型中得分最高的动作外,还将有一定的探索概率选择得分较低的动作。这类似于强化学习中的探索。
目前,基于深度学习的藏文依存句法分析研究还处于起步阶段,尚无公开可用的标准的藏文依存树库。因此,采集藏文文本数据并构建了藏文依存树库,以此进行实验。
依据Universal-Dependencies(UD)英文和中文的依存树库CoNLL-U格式,在藏文分词和词性标注的基础上,通过对其进行依存关系的人工标注建立了藏文依存树库(UD-tb)共2181句。此树库的统计数据见表2。
表2 藏文依存树库数据统计
在所有的实验中,使用默认参数训练依存解析器,设置迭代次数都为100。关于模型的实现,解析器的输入编码器类型默认使用Bi-LSTM,其隐藏层大小为125,dropout设为0.33,所有实验的学习率为0.001,并且每个处理批次大小为4。在对解析器状态的建模编码中自注意力机制层数为2层,注意力头数为10,损失函数采用max margin损失函数。其它相关实验环境配置见表3。
表3 实验环境配置
依存关系准确率分为带标签依存关系准确率(Labeled Attachment Score, LAS)和无标签依存关系准确率(Unlabeled Attachment Score, UAS)。实验采用LAS值和UAS值对藏文依存句法解析器性能进行评价。
从表4可以看出,当使用相同的序列模型 Bi-LSTM时,无论对解析器状态使用哪种建模方法,词性特征在基于转移的依存句法分析任务中都起着至关重要的作用。它对解析性能的影响LAS和UAS平均高出5%,可见词性在句法分析任务中的重要性。此外,在对解析器的状态进行建模时尝试合并更多语言结构的信息,并使用注意力计算将相关信息进行交互。根据实验结果发现,每个时间步预测的词信息以及每个时间步预测的转移动作信息都被用于下一时间步的动作预测,这会稍微提高解析的准确性。随着在解析过程中融合更多的特征信息,解析器的解析精度也在提高。
表4 实验结果
表5总结了所有实验的平均运行时间。发现计算中包含的信息越多,所耗费的时间就越多。其中,提到的所有隐含信息的计算耗时最长。引入解析出的栈外词信息和历史转移动作信息的相对计算时间很长,因为在解析过程中,这两种信息都需要经过每个时间步解析完成后得到两种特征信息再编码,然后反馈到下一个时间步的解析过程中。所以随着在解析过程中融合更多的特征信息,解析器所耗费的时间也相应的变长,解析器的解析精度也在提高。
表5 平均运行时间(秒)
在本文中,依据国际通用的英文中文依存树库,构建了藏文CoNLL-U格式的依存树库,进行基于深度学习藏文依存句法分析研究。使用序列模型Bi-LSTM对输入句子中的单词及其对应的词性特征进行编码,然后使用注意力机制对基于转换的解析器的解析器状态进行编码,以使用自然语言存在的隐式结构信息,提高了解析器的解析性能。目前,已完成标注的藏文依存树库2180句左右,对于深度学习还需更多的数据,未来将继续扩充国际通用的藏文依存树库,并提高此树库的标注质量,促进藏文句法分析的研究工作。