Stanford CS224n 第六讲:依存分析

这一节课基本都是在讲解一些语言学的概念以及如何进行依存分析,说实话前半部分陌生的名词有点多,看了好几遍才梳理好他的脉络。

  1. 两种语言结构:
    ~ 1.1 短语结构
    ~ 1.2 依存句法结构
  2. 标注数据的崛起
  3. 依存句法树
  4. 依存句法分析方法
  5. 依存句法分析方法 的 效果评估方法
  6. 神经网络依存句法分析器

1. 两种语言结构:

1.1短语结构
如何描述语法,有两种不同的角度,其中一种是短语结构文法也叫做上下文无关文法(CFGs),通过写出一定数量的上下文无关的文法规则,通过这些规则分析句子。20世纪和21世纪之交,这是在美国组织语句的主流方法。

1.2依存句法结构
另一种了解语言结构的不同角度就是依存句法结构,通过找到句子中每一个词语所依赖的部分来描述句子结构。如果一个词修饰另一个词,它就是那个词的依赖。例如barking dog中,barking就是dog的依赖。通常用箭头来表示他们的依赖关系,下面是一个画出依存结构的句子:
在这里插入图片描述
有了一个句子的依存句法结构,我们就能解决句子的歧义问题,下面这个例子:
Stanford CS224n 第六讲:依存分析_第1张图片
上面两句相同的话,通过画出不同的依存句法结构,得到了不同的语义理解。

2. 标注数据的崛起
大约在1990年,人们投入了大量的资源去建立标注型树库,标注好的数据大概长这个样子:
Stanford CS224n 第六讲:依存分析_第2张图片
虽然这种做法低效,速度慢,而且没有基于短语结构文法的规则普适性好,但是这个行为形成了丰富的语言学资源,而且对于目前大火的机器学习来说,这就是我们梦寐以求的具有ground-truth的标注好的数据,这是一个相当具有前瞻性的工程。
在机器学习领域,依存树可以合理地解释句子结构。建议一个可见的、有标注的依存树,最后会给我们提供很多的优势,依存树存在的有点如下:
(1) 首先它可以被重复利用;而每个人写的规则却不同,所以规则不能被重复利用,依存树却可以。
(2) 依存树库使用了真实的、覆盖面广的数据;而人们写规则时只是依靠对语法的直觉判断,容易考虑不周。
(3) 依存树不仅仅能给出所有的可能性,还能给出各种可能性同事发生的概率。
(4) 最重要的一点是他可以评估我们构建的任何系统,因为他给了我们具有ground truth的标准数据。

3. 依存句法树
下面是一个句子的依存句法树:
Stanford CS224n 第六讲:依存分析_第3张图片
箭头的初始位置为被修饰的,称为:监督项(头部)
箭头的指向位置是修饰词,称为:下属项(独立项)
上图箭头指向的词语是依赖者,箭头初始位置的词语是被依赖者。也可以根据自己写喜好来颠倒用途。

4. 依存句法分析方法

4.1 句法分析可用的信息:
(1) 两个词的相关性,例如discussion → \rightarrow issues。
(2) 依赖距离,大部分具有依赖关系的词语是相邻或者离得比较近。
(3) 如果中间是动词或者标点符号,则两边不太可能出现依赖关系
(4) 限定某个词语所具有的独立项的个数

4.2 生成依存树的过程很简单,先把句子分成独立的词语,然后确定每个词语的头部或者独立项。
但是这个过程有一些约束:
(1) 只需要一个词语作为ROOT的独立项;
(2) 不能有环出现。
如果两者同时满足的话,就可以保证生成一颗依存树。
在画图依存图的时候,如果箭头发生交叉,就称树是非投影性的,反之则为投影性的。

4.3 文献中的依存句法分析方法有:
Dynamic programming
估计是找出以某head结尾的字串对应的最可能的句法树。
Graph algorithms
可用MST算法做依存分析,也就是最小生成树。
Constraint Satisfaction
约束补偿问题,可能是在图上根据约束逐步删除不符合要求的边,直到成为一棵树。
“Transition-based parsing” or “deterministic dependency parsing”
基于转换的解析。主流方法,基于贪心决策动作拼装句法树。

4.4 下面具体讲一个基于贪心决策动作拼装句法树的方法—Arc-standard transition,此算法由如下几部分组成:
Stanford CS224n 第六讲:依存分析_第4张图片
在arc-standard system中,一次分析任务由一个栈 σ \sigma σ,一个队列 β \beta β,一系列依存弧A构成。
栈s是用来储存系统已经处理过的句法子树的根节点的,初始状态下 σ \sigma σ=[ROOT]。另外,定义从栈顶数起的第i个元素为si。
队列 β \beta β模拟的是人眼的阅读顺序,人眼从左到右阅读,系统也从左往右读入单词,未读入的单词就构成一个队列,队列的出口在左边。初始状态下队列就是整个句子,且顺序不变。
依存弧视依存句法语料库中使用了哪些依存关系label而定。
Stanford CS224n 第六讲:依存分析_第5张图片

根据树库我们可以得到句子分析,然后训练一个分类器,让分类器指导在什么样的状态下应该做什么样的动作,得到哪种操作序列可以得到正确的句子分析。
如果我们用分类器做决策,那么我们那什么做特征呢?课程中讲的传统的方法是如下方法:
Stanford CS224n 第六讲:依存分析_第6张图片
是将栈和队列中单词、词性、依存标签的组合的特征函数,一个超长的稀疏01向量。

5. 依存句法分析方法 的 效果评估方法
评测指标有两种。一种是标准是UAS,此标准不考虑标签只考虑弧;另一种标准是LAS,此标准同时考虑标签和弧。
具体例子如下:
Stanford CS224n 第六讲:依存分析_第7张图片

6. 神经网络依存句法分析器
Stanford CS224n 第六讲:依存分析_第8张图片
在第四部分中我们知道,传统的特征表示是将栈和队列中单词、词性、依存标签的组合的特征函数,一个超长的稀疏01向量。这种表示稀疏、不完全、计算代价大。分类器本身并不需要消耗太多的时间,反而大部分时间都用在构造特征上。因此提出了将输入换成词向量、词性向量、依存向量的神经网络模型,模型如下:
Stanford CS224n 第六讲:依存分析_第9张图片
模型是一个的三层神经网络,最后通过softmax来决定采用那个动作,模型的输入是通过下图来构造的:
Stanford CS224n 第六讲:依存分析_第10张图片
既然词和词之间有相似的关系,那么词性、依存相互之间都应该有相似的关系,就像训练词向量一样,将词性和依存关系也进行embedding成词性向量、依存向量。拼接它们的向量表示就构成了模型的输入。

这一部分确实比较绕,但是多看几遍还是可以看明白的。期待接下来的TensorFlow~~

你可能感兴趣的:(Stanford,CS224n)