基于深度学习的依存句法分析

       依存句法分析,对于下游的很多任务(如分词、词性标注、命名实体识别、组块分析等)非常重要。句法分析主要包括两种方法:基于图模型的依存句法分析(Graph-based)和基于转移的依存句法分析(Transition-based)。

基于深度学习的图模型依存句法分析:    

       按照依存语法理论,句子中具有句法关系的两个词形成一种非对称关系,其中一个词处于中心地位,称为中心词(head),另一个处于从属地位,称为从属词(dependent)。从属词按照一定的关系依存于中心词,通常起着限制和修饰中心词的作用。对句中所有词之间的中心-从属关系进行描述就形成句子的依存结构表示。如果把句子中的词视作结点,词和词之间的依存关系视作有向边的话,句子的依存结构就可以用一个有向图描述,该有向图称作句子的依存图(也叫依存树)。下面给出一个依存树实例:

       在该图中,共有7对依存关系,分别用7条从中心词指向依存词的有向边表示,依存关系的类型则以标签的形式标注在依存边上。例如,句子中“John”和“hit”具有依存关系,其中“hit”是中心词,“John”是依存词,二者之间的关系标签是“NSUBJ”(名词充当主语)。

Graph-based dependency简介:       

       基于图解码的依存分析方法最早是由McDonald等人所提出来的(他们认为可以把依存句法树视为有向完全图)。该方法通过寻找句子的一棵最大依存树,来得到句子依存结构的全局最优解(即将最优依存结构的构建过程转化成寻找最大生成树的过程)。如令x代表由n个词组成的句子x=w_0w_1w_2...w_n,其中w_0代表人为添加的根词ROOT。若用\tau (x)代表句子x所有可能的依存树组成的集合,则该搜索问题可以描述为:
                                                                          \hat{y}=\underset{y \in \tau(x)}{argmax}Score(x,y)
       也就是在其所有候选的依存树\tau(x)中,寻找得分最高的依存树\hat{y}。其中,依存树y的得分需要通过评分函数Score(x,y)来计算。

基于深度学习的依存句法分析_第1张图片

       一个完整的图解码依存分析器由三个组成部分:评分模型、分析算法和学习算法。评分模型计算候选依存树的得分,分析算法则根据评分模型给出的得分,从众多的候选依存树中找出得分最高的依存树,并把该依存树作为句子的分析结果输出。评分模型给出的得分的高低反映了依存树正确性的高低。在数据驱动的方法中,合理的评分模型需要通过一定的学习算法从作为统计样本的依存树库中学习得到。
       在图解码依存分析方法中,评分模型的设计和选择居于核心位置。一方面,评分模型制约着分析算法,决定着分析算法的选择,另一方面也决定着学习算法的选择,不同的评分模型对学习算法也可能存在不同的要求。
       考虑到分析算法的效率,目前图解码分析常采用基于子图分解的评分模型。评分模型并不直接计算依存树的得分,而是按照一定的策略将依存树y分解为若干子图c,每个子图独立评分,整棵依存树的得分定义为所有子图的得分之和,即:
                                                                    Score(x,y)=\sum_{c\in y}Score(x,c)
       子图独立评分的好处是可以简化搜索算法。例如,最简单和最常用的图分解方法是一阶分解方法,将依存树分解成依存边的集合,每个依存边独立评分,依存树的得分定义为所有依存边的得分之和:
                                                         Score(x,y)=\sum_{(w_h,w_m,lb)\in y}Score(w_h,w_m,lb)
       这里,(w_h,w_m,lb)代表中心词为w_h,依存词为w_m,依存关系标签是lb的依存边。一阶分解模型也叫边分解模型(arc-factored model)。采用边分解模型,最优依存树的搜索可采用动态规划的方法完成。

深度图解码依存分析模型:       

       深度图解码分析模型采用低维稠密的特征表示,基于神经网络的非线性评分模型,依靠模型的自我特征学习能力,来自动学习远距离依存的特征。

 一、评分模型      

       在深度图解码依存分析模型中,研究人员普遍基于多层感知机(MLP)的评分模型,并采用一阶分解策略,因而评分模型形式上可写成:
                                                                 Score(w_h,w_m;\theta)=MLP(\phi(w_h,w_m);\theta )
       这里,\phi(w_h,w_m)代表依存边(w_h,w_m)的低维稠密的嵌入特征表示,θ代表需要通过训练学习来获取的网络模型参数。这里计算出的Score(w_h,w_m,\theta)是一个|L|维向量(即Score(w_h,w_m,\theta)\in R^{|L|},其中|L|代表依存关系标签的数量。该向量的第i维的值即为依存边类型为lb_i的得分,如果用记号v[i]表示取向量第i维值的操作,则有:
                                                                 Score(w_h,w_m,lb_i)=Score(w_h,w_m;\theta)[i]
       对于函数\phi(w_h,w_m),以及依存边方向,可由设计者自己定义(如依存边方向,可以设置与方向相关的变换参数)。这也是众多图解码依存分析模型改进的点。

 二、深度特征提取    

       上一节中我们提到,在深度图解码依存分析模型中,特征被映射为低维空间中的稠密向量,句法和语义性质接近的特征被嵌入到空间中邻近的位置,使其在向量表示上呈现出共性或相似性。

     (1)低维嵌入表示:
       具体而言,令D代表所有特征组成的集合,即D=\left \{f_1,f_2,...,f_{|D|}\right \},其中的每个特征f_i \in D均被表述为一个嵌入向量e_{f_i}\in R^d,所有特征向量堆叠即可形成一个嵌入向量矩阵M \in R^{d\times|D|}。该矩阵的每一列对应着一个特征的嵌入向量表示。特征的嵌入向量并不需要人为设定,而是作为模型参数的一部分,同评分模型一起经由模型训练自动习得(即嵌入层)。一般而言,在训练开始时,这些特征向量可通过随机初始化的方式设定初值,并随同评分模型一起训练并最终得到特征的合理嵌入表示。但对于一些取值为词的特征,也常常采用word2vec、Glove等标准词向量学习技术基于大规模未标注语料预先学习词向量,并把得到的词向量用作特征向量的初值,一般把这种做法称作预训练(pre-training)机制。大部分研究都表明,引入预学习机制有助于改善特征向量学习的质量,从而对依存分析结果产生积极影响。

     (2)原子特征的组合学习:
       研究人员提出在图解码模型中使用数量有限的基本特征,并将它们称之为原子特征。至于特征之间的交互影响则通过打分模型中的非线性机制加以学习体现。如在有些模型中,输入特征只是若干原子特征,组合学习的是这些原子特征向量的拼接向量:\phi(w_h,w_m)=[e_{f_1},e_{f_2},...,e_{f_{|D|}}]。为了增强模型对组合特征的学习能力,研究人员在评分模型中使用了sigmoid、tanh、tanh-cube等激活函数,实验证实这些激活函数可以表现出较强的组合特征学习能力,且能加快模型训练的收敛速度。

     (3)基于LSTM的特征学习
       若待分析的句子为w_1w_2...w_n,相应的词类序列为t_1t_2...t_nw_i以及t_i所对应的嵌入向量为e_{w_i}e_{t_i}。采用双向LSTM编码机制可以表示为如下形式:
                                                                                 x_i=\varphi(e_{w_i},e_{t_i})
                                                                  v_i=BiLSTM(x_i)=\psi (h_i^F,h_i^B)
       首先将句子中词及其词类的嵌入向量e_{w_i}e_{t_i}通过某种方式进行处理(如拼接或相加,然后通过一个单层ReLU网络)变换为双向LSTM模型的输入向量x_i。在正向LSTM编码和逆向LSTM编码向量的组合方法上(即\psi (h_i^F,h_i^B)),可以采用传统的拼接方式或是两个向量相加的方式。     
       经由双向LSTM编码得到的编码向量与一般的孤立词向量不同,结合了词在句子中的语境信息,深度图分解依存分析模型将其视作是对词的全局特征表示,可以用来取代传统模型中由人工设计的特征。因此,在Kiperwasser等人的工作中,评分模型的输入直接定义为中心词和依存词所对应的双向LSTM编码向量的拼接向量,即:   
                                                                             \phi(w_n,w_h)=[v_n,v_h]
       当然,也有人将依存边预测和标签预测分开执行,并分别进行依存边和标签的特征向量表示。感兴趣的童鞋可以关注相关的文章:Deep Biaffine Attention for Neural Dependency Parsing。

 三、模型训练    

       传统图解码依存分析大多采用最大化间隔原则的训练方法,深度图解码依存分析模型训练基本延续了这一训练原则。给定训练实例(x^{(i)},y^{(i)})\in D,其中,D代表训练集,y^{(i)}是句子x^{(i)}的正确依存树,令T(x^{(i)})代表句子x^{(i)}所有可能的依存分析树。最大间隔原则的目标是寻求一组最佳模型参数θ,使得对于x^{(i)}而言,其正确依存树的得分比错误依存树得分至少大一个间隔,且该间隔的大小正比于错误依存树的结构损失\Delta(y^{(i)},\hat y),即:
                                                     Score(x^{(i)},y^{(i)};\theta)\geqslant Score(x^{(i)},\hat y;\theta) +\Delta(y^{(i)},\hat y)
       错误依存树\hat y的结构损失通常定义为:
                                                        \Delta(y^{(i)},\hat y)=\sum_{j=1}^{n}k1\left[ h(y^{(i)},x_{j}^{(i)})\neq h(\hat y,x_{j}^{(i)})\right ]
       这里的n是指句子的单词数量,k是比例参数。h(y,x_j)代表句子中第j个词在依存树中所对应的中心词,函数1[r]的值取决于布尔变量r,若r为true,则函数值为1,否则取值为0。结构损失实际上统计了错误依存树\hat y 相对于正确依存树y^{(i)}的错误依存边数量,让间隔正比于结构损失可以增加对错误严重的依存树的惩罚力度,是结构预测训练中的常见做法。
       给定m 个句子组成的依存树库,基于最大间隔原则的依存分析模型训练可表述为如下的优化问题:
                                                                         \hat \theta = \underset{\theta}{argmin}\frac{1}{m}\sum_{i=1}^{m}l_i(\theta)
                                       l_i(\theta)=\underset {\hat y \in \tau(x^{(i)})}{max} Score(x^{(i)},\hat y;\theta) +\Delta(y^{(i)},\hat y)-Score(x^{(i)},y^{(i)};\theta)
       在具体实现时,还可以在优化函数中增加不同的正则项,以使参数最终具有一些人们期望的性质。

       该优化问题可以选择不同的优化算法加以实现,深度学习模型中惯常采用梯度下降算法或者变种(如AdaGrad算法、Adam算法)。最大间隔训练方法并非图解码依存分析模型训练的唯一方法,常见的优化原则还包括交叉熵原则。

基于深度学习的转移模型依存句法分析:

Transition-based dependency简介:       

       一个句法分析的转移系统(transition system) 为一个四元组S=(C,T,c_s,C_t),其中:
       1、C 是一个状态(configuration)集合,其中的元素包含一个堆栈\sigma(包含了未处理和正在处理的节点),一个缓存(buffer)\beta(其包含了余下的节点),和一个依存弧的集合A;
       2、T 是一个转移动作(transition)集合,每个元素是一个函数t:C\rightarrow C
       3、c_s是一个初始化函数,将句子x = (w_0;w_1; \cdot \cdot \cdot;w_n) 映射到一个状态\beta=[1,2,\cdot \cdot \cdot,n]
       4、C_t\subseteq C是一个终结状态集合。

       转移动作(也即基于栈的转移模型),主要包括arc-standard 算法和arc-eager算法两种,我们常见的是前者。Arc-standard 算法包含三个分析动作,分别为左弧(左归约,left-arc),右弧(右归约,right-arc)和移进(shift)。其中左弧和右弧又可以与不同的依存关系进行组合成为多种动作,移进仅有一种。在这里,我们用\alpha|i表示栈顶为i 的栈,j|\beta表示队首为j 的缓存队列。

基于深度学习的依存句法分析_第2张图片

       实际使用中,我们一般会使用下列形式:

基于深度学习的依存句法分析_第3张图片

       以下为基于转移模型的依存句法分析的例子:

基于深度学习的依存句法分析_第4张图片

基于前馈神经网络的Transition-based dependency模型:   

 一、模型结构      

       基于转移的分析过程的格局C可以用一个三元组(S,I,A)来表示,S 是堆栈,I 是未处理的结点序列,A 是依存弧集合。用于分析动作决策的特征向量即取自这样的三元组。基于前馈神经网络的模型利用一个神经网络对分析过程中的C提取特征,并训练动作分类器。具体地,模型由输入层、嵌入层、隐含层和softmax 层组成:
       1、输入层。输入层的作用是从分析状态(S;I;A) 中抽取元特征(atomic feature),这些元特征包括词特征、词性特征和依存弧特征。
       2、嵌入层(embedding layer)。嵌入层由三个独立的子嵌入层组成,分别为词嵌入层、词性嵌入层和依存弧嵌入层,对应输入中的词特征、词性特征和依存弧特征。这些嵌入层的作用是将输入层抽取的离散稀疏特征转换成稠密特征。
       3、隐含层。隐含层从嵌入层获得三种稠密特征输入,并对其做非线性变换。
       4、softmax 层。与其他softmax 层的作用相同,该层用于预测多分类的结果。

基于深度学习的依存句法分析_第5张图片

二、元特征(atomic feature)

       以前的基于特征工程的依存句法分析器过于依赖于专家定义的特征集合,因此研究人员为基于转移的依存句法分析方法定义了一组特征模板(见下表),这组特征显著提高了依存句法分析器的性能。这些特征被分成了三类:词特征(F_w),词性特征(F_p)和弧特征(F_l)。各个特征所代表的含义为:
       1、s_i表示栈S中的第i个词;
       2、b_j表示输入缓冲I中的第j个词;
       3、lc_i(\cdot)表示取词的第i个左儿子;
       4、rc_i(\cdot)表示取词的第i个右儿子。

基于深度学习的依存句法分析_第6张图片

       在上表中,s_0即为栈S中的第0个词,即栈顶的单词;b_1为输入缓冲I中第二个词;lc_0(s_0)即为栈顶词的第一个左儿子;rc_1(s_0)即为栈顶词的第二个左儿子。可以注意到:元特征模板中并不包含输入缓存中的词的儿子信息,因为输入缓存中的词尚未被分析,其没有儿子节点。
       将以上位置信息分别与w (word embedding),p (pos) 或l (link)组合,即可得到不同位置上的词特征、词性特征或依存弧特征。例如,s_0w为栈顶单词的词特征;b_1p为输入缓冲I中第二个词的词性特征;rc_2(s_1)w表示s_1最右儿子的词特征;lc_2(s_0)p表示s_0最左儿子的词性特征。

 三、执行过程     

       1、依存算法:
       在执行过程中,模型采用标准的移进-归约算法(arc-standard方法),即:
       • SHIFT:将b_0从buffer I 中弹出,并将其压入栈S.
       • LEFT-ARC(l):在栈顶第一个词s_0与第二个词s_1之间添加一个弧l,将s_1从栈S中删除。将弧(s_1 \stackrel{l}{\longleftarrow}s_0) 添加到A 中。
       • RIGHT-ARC(l):在栈顶第二个词s_1与第一个词s_0之间添加一个弧l,将s_0从栈S中删除。将弧(s_1 \stackrel{l}{\longrightarrow}s_0)添加到A 中。
       2、学习算法与分类模型:
       作为一个依存句法分析器的重要组成部分,分类模型的作用为预测分析动作,学习算法的作用为从训练数据中学习模型的参数。
       神经网络的输入层直接从分析格局C中抽取元特征。元特征的抽取如上图定义的特征。从表中可以看到,抽取的特征三个部分特征分别为18 个词特征、18 个词性特征和12 个依存弧特征。在分析过程中的每一步,输入层将从分析格局中抽取这些总共48 个特征,并对这48 个特征以词袋(bag of words)模型进行表示(即元素存在的位置为1,不存在的位置为0)。
       网络嵌入层的作用为将特征的稀疏表示转换成稠密表示。嵌入层分为三个部分:词嵌入层、词性嵌入层和依存弧嵌入层;这三个嵌入层分别从对应的三种输入层中获取特征(将BOW向量中元素为1的位置,置换成为相应的元素向量:如前18个词特征位,若有元素为1,则置换为该位置上词的word embedding;同理对于中间18个词性特征位和后12个依存弧特征位),得到48个特征向量。常识上,与词典大小相比,词性与依存弧弧的取值集合相对较小,故嵌入层中词性嵌入和弧嵌入的维度小于词嵌入的维度。
       模型中的隐含层将嵌入层的48 个特征向量进行首尾连接操作(也可以进行其他形式的feature fusion),将其组成一个特征向量X_h\in R^{d_{xh}}。对特征向量X_h进行线性与非线性变换操作h=f(W_hX_h+b_h)W_h\in R^{d_h\times d_{xh}}b_h为偏置。
       最后一层,为网络的输出层,使用softmax函数对转移动作进行分析和预测:p=softmax(W_oh+b_o)W_o\in R^{|\top |\times d_h}\top是指依存句法分析系统中所有动作的集合,p是针对集合中每个元素的概率向量。

基于循环神经网络的Transition-based dependency模型: 

       基于循环神经网络的方法,和基于前馈神经网路的方法非常相似。实际上,在使用中,基于循环神经网络的方法更受欢迎,因为转移动作序列正好符合循环神经网络的时序处理优点。

       在应用循环神经网络时,每个时刻仍然是上述的输入层、嵌入层、隐含层等处理内容,只是会根据应用有所变化。转移动作序列,展开成时间序列处理。

参考文献:

       周青宇. 基于深度学习的自然语言句法分析研究[D]. 2016.
       常宝宝. 基于深度学习的图解码依存分析研究进展[J]. 山西大学学报:自然科学版, 2017(3).
       https://blog.csdn.net/qq_27590277/article/details/88648412?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-3&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-3
       https://blog.csdn.net/u011828519/article/details/84565920

你可能感兴趣的:(自然语言处理与生成,深度学习)