-
语言学的两种观点
如何描述语法,有两种主流观点,其中一种是短语结构文法(上下文无关文法),英文术语是:Constituency = phrase structure grammar = context-free grammars (CFGs)。
这种短语语法用固定数量的rule分解句子为短语和单词、分解短语为更短的短语或单词。一个取自WSJ语料库的短语结构树示例:
另一种是依存结构,用单词之间的依存关系来表达语法。如果一个单词修饰另一个单词,则称该单词依赖于另一个单词。
歧义
通过句法树可以表达歧义,一个确定的句法树对应句子的一个确定解读,比如对介词短语依附(attachment of prepositional phrases (PPs)):
from space这个介词短语到底依附谁?不同的答案导致对句子不同的理解。
依附歧义
很难确定如何把一个短语(介词短语、状语短语、分词短语、不定式)依附到其他成分上去,比如下列句子:
每个括号中都是一个短语,它们依附的对象各不相同。对于n个短语来讲,组成的树形结构有。这是Catalan数,指数级增长,常用于树形结构的计数问题。
标注数据集的崛起:Universal Dependencies treebanks
虽然上下文无关文法中的语法集很容易写,无非是有限数量的规则而已,但人工费时费力标注的树库却茁壮成长了起来。在1993年首次面世的Universal Dependencies treebanks如今在Google的赞助下发布了2.0,其授权大多是署名-相同方式共享,覆盖了全世界绝大多数语言(不包括简体中文)。
其官网是:http://universaldependencies.org/
GitHub主页是:https://github.com/UniversalDependencies
树库示例:
人们偏好树库多于规则的原因是显而易见的,树库虽然标注难度高,但每一份劳动都可被复用(可以用于词性标注命名实体识别等等任务);而每个人编写的规则都不同,并且死板又丑陋。树库的多用性还是得其作为评测的标杆数据,得到了越来越多的引用。
-
依存文法与依存结构
这节课以及练习用的都是依存句法树,而不是短语结构树。这并不是随机选择,而是由于前者的优势。90年代的句法分析论文99%都是短语结构树,但后来人们发现依存句法树标注简单,parser准确率高,所以后来(特别是最近十年)基本上就是依存句法树的天下了(至少80%)。
不标注依存弧label的依存句法树就是短语结构树的一种:
一旦标上了,两者就彻底不同了:
这里箭头的尾部是head(被修饰的主题),箭头指向的是dependent(修饰语)。
依存句法分析可用的特征
-
双词汇亲和(Bilexical affinities),比如discussion与issues
-
词语间距,因为一般相邻的词语才具有依存关系
-
中间词语,如果中间词语是动词或标点,则两边的词语不太可能有依存
-
词语配价,一个词语最多有几个依赖者
依存句法分析
有几个约束条件:
-
ROOT只能被一个词依赖
-
无环
英语中大部分句子是projective的,少数是non-projective的:
文献中的依存句法分析方法有:
- Dynamic programming,动态规划
- Graph algorithms,最小生成树
- Constraint Satisfaction,约束满足
- “Transition-based parsing” or “deterministic dependency parsing”,主流方法,基于贪心决策动作拼装句法树
Greedy transition-based parsing
动作体系的formal描述如下:
Arc-standard transition
MaltParser
无搜索,贪婪地下转移决策,线性复杂度,只损失了一点效果。加个beam search会上升一点。
传统特征表示
栈和队列中单词、词性、依存标签的组合的特征函数,一个超长的稀疏01向量。
效果评估
评测指标是UAS(不考虑标签只考虑弧)或LAS(同时考虑标签和弧):
为什么需要神经网络句法分析器
传统特征表示稀疏、不完全、计算代价大(SVM之类的线性分类器本身是很快的,而传统parser的95%时间都花在拼装查询特征上了)。
传统方法拼接单词、词性、依存标签,新方法拼接它们的向量表示:
模型是一个三层神经网络:
事实上,在“深度学习”“神经网络”的喧嚣中冷静下来回顾一下,相较于传统的graph-based方法,花了这么多功夫得到的只是0.1%的LAS提升: