深度学习在NLP中的应用---RNN

浏览: 1642

首先来看下什么是句子解析:

                                                

句子解析的目的是学习其中的结构及表示方法。

                                            

怎么预测结构呢? 递归神经网络可以用于结构预测。

给定输入:两个候选孩子节点的表示

输出:

  1. 如果两个节点聚合在一起,输出语义表示。

  2. 新节点的可信度,即一个打分。

比如下面例子,输出向量是(8, 3),对应的得分是1.3。


                                              

下面来看下循环神经网络的定义。

                                                                             

其中

                                                                         

树中所有节点的权值 W 相同。

Socher et al. (ICML 2011) 相关工作有以下几个代表性的:

•  Pollack (1990): Recursive auto-associative memories

•  Goller &  Küchler (1996), Costa et al. (2003) 作了假设:树结构是固定的,并且使用 one hot 向量表示法。

•  Hinton (1990) and  Bottou (2011):  循环模型和循环算子相关的思想,出发点是对logic算子平滑化。

下面是一个利用RNN解析句子的示例

                                           


                                                

                                                    

                                                    

最大间隔框架细节

树的得分通过在每个节点解析决策得分求和得到。

跟最大间隔解析类似(Taskar et al. 2004 ),有监督最大间隔目标函数如下:



损失函数会对所有错误决策加以惩罚

A(x) 的结构搜索法是最大限度贪婪式进行的,可以利用基于图的定向搜索法来代替。

下面介绍通过结构来反向传播的方法。

这种方法由Goller 和 Küchler提出,Goller & Küchler (1996)。原理上跟一般的反向传播算法一样。两个不同点由树结构引起:

在每个节点分离梯度;

将所有节点处W的梯度求和。

下面来看看如何在每个节点分离梯度。


如上图,前向传播时,父节点是由两个子节点计算而来。



所以,误差反向传播时需要对每个子节点都计算相应的误差传播量,并且每个子节点的误差都是n维的。

接下来需要对所有节点梯度求和。

可以假设每个节点具有不同的 W 。下面是一个直观的例子:


当然,分别计算再求和,也可以得到同样的结果


如何优化上述问题呢?跟前面类似,可以将梯度融合成一个标准且现成的L-BFGS优化器。最好的结果是AdaGrad方法(Duchi et al, 2011):


对于非连续目标函数,可以利用次梯度方法 (Ratliff et al. 2007)。

简单的RNN有哪些特点呢? 简单的矩阵RNN已经取得了不错的效果。单个权值矩阵RNN可以捕捉到一些现象,但是,不足以应对更复杂的由高阶成分和语法解析的长句子。


成分函数对于句法分类,标点符号等都是相同的。

针对以上不足,如何解决呢?下面看几种解决方案。

第一种是句法自由的RNN。其思想在于对句法分类构建成分函数加上条件,使得权值自由可变。对于不同的句法分类对,比如Adv+AdjP, VP+NP,可以具有不同的成分函数。这种方法可以将离散的句法分类跟连续的语义信息结合起来。如下图所示:



下面来看下第二种解决方案,即 CVG = PCFG + 句法自由RNN。

这种方法考虑的问题在于,速度,定向搜索每个候选分都需要计算矩阵向量乘积,这无疑需要很大计算量。为了解决这个问题,该解决方案,利用简单的PCFG+RNN和对数似然函数的线性组合来计算得分,并且对可能性较小的候选分进行剪枝,以提高速度。这种方法对每个定向候选评分都提供了对孩子节点粗略的句法分类。

其中CVG全称是Compositional Vector Grammars: CVG = PCFG + RNN。

下面来看下CVG。CVG中每个节点的得分都是将PCFG和SU-RNN结合计算而来的。


具体解释即为,在一个模型中分解成离散和连续句法分析:


更多细节见ACL论文, Socher et al 2013。

一些相关论文如下:

•  Klein and Manning (2003a) : 手工特征工程 

•  Petrov et al. (2006): 学习算法将句法结构分离并聚合

•  Lexicalized parsers (Collins, 2003; Charniak, 2000): 每个类都用一个词条来表示

•  Hall and Klein (2012) : 每个分解词法解析都包含了若干注解

•  Hermann & Blunsom (2013): 将组合类别语法跟RNN结合,并且权值是自由变化的

下面来看个实验设置及结果

标准的WSJ分割,标签F1

基于简单的具有少数状态的PCFG

搜索空间的快速剪枝,少量的矩阵向量乘积

F1 提高了 3.8%, 比斯坦福解析器快了 20%

                             

接下来看看SU-RNN分析


能够从单个相关例子中转换语法信息。比如

训练句子:

• He eats spaghetti with a fork.

• She eats spaghetti with pork.

测试句子:

• He eats spaghetti with a spoon.

• He eats spaghetti with meat. 

                                     

RNN中的标注是怎么做的呢?可以将每个节点的表示作为softmax分类器的特征。


训练时目标函数可以是标准的交叉熵误差+评分

                                                                                               


RNN也可以用于场景解析。主要问题在于场景图片的意义也是小区域的函数,这些小块如何组合起来构成大一些的物体,以及这些物体之间的交互作用。示例图片如下:

                                             

多类分割问题如下:



其中数据集来自 Stanford Background Dataset (Gould et al. 2009)。 

推荐 2
本文由 深度学习 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册