文章目录
课程安排
- 语法结构:一致性和依赖
- 依赖语法和treebanks
- 基于Transition的依赖解析
- 基于神经网络的依赖解析
- 作业3使用pytorch构建依赖解析模型
一、语法结构
1.1 CFGs(上下文无关文法)
短语结构语法==context-free grammars
词结合成短语->短语构成更大的短语, 并且短语有词性分类。
按照一定的词性规则构建语言表达。如限定词+名词短语+状语…。从而我们可以按照一定的规则推导一个句子,生成一颗语法树。
1.2 依赖结构表示句子中的词语其他词的依赖关系
动词作为句子的root, 箭头从一个词指向修饰它的词。
1.3 为什么要解析句子的结构
- 正确的解析语言依赖结构是理解语义的基础
- 人类通过将单词组织成短语从而表达更复杂的语句
- 我们需要知道这些短语是如何相互连接、按照什么规则连接
例如下面具有二义性的句子,通过不同的解析,表达不同的语义(编程语言不会有这样的二义性):
依赖解析中的一个关键就是决定各种句子成分是修饰哪一个成分,比如下面这个句子需要有相关的背景知识才能正确的进行依赖解析:
1.4 依赖解析
对句子中的每个词,选择它是哪个词的依赖。通常有以下限制条件,从而使依赖成为一棵树:
- 只有一个词是ROOT的依赖
- 不存在环
最终的问题是这些箭头能否交叉
1.5 标注数据项目:universal dependencies treebanks
项目地址: http://universaldependencies.org(可能需要代理)
起初,建立treebank似乎不如建立一个语法来得快,但treebank带来了如下回报:
- 重复使用劳动力
- 广泛覆盖(多组织、多语言)
- 利于机器学习使用
1.6 Greedy transition-based parsing
这个解析器通过一系列的自底向上的方式进行。(编译原理的语法解析器:移位-规约)
与编译器中不同的是,这里要将规约操作替换为左弧规约和右弧规约(弧就是箭头)
可以看到这里面的关键是决定每一步的操作是移位还是左弧规约、还是右弧规约,这可以看做一个预测问题,使用机器学习来解决。 由于每个词只会有一个依赖,所以依赖解析的评价指标:
A
c
c
=
c
o
r
r
e
c
t
−
a
r
c
s
t
o
t
a
l
−
w
o
r
d
s
Acc = \frac{correct-arcs}{total-words}
Acc=total−wordscorrect−arcs
1.7 神经网络依赖解析器
传统方法的缺点:
- 特征稀疏
- 特征不完整(每次预测只用到了句子中很局部的特征)
- 计算代价高
对应的,神经网路方法有更好的准确率和超级高的效率
1.7.1 特征选择
给定一个句子S, 应该包含以下特征:
- 句子中的词向量( σ \sigma σ和 β \beta β两个栈顶词)
- 词性pos-tag向量P = {NN, NNP, NNS, DT, J J, …}
- 弧的类型标签arc-label向量L = {amod, tmod, nsubj, csubj, dobj, …}
以上三类向量构成三个embedding矩阵
E
w
∈
R
d
×
N
w
E_w ∈ R^{d×N_w}
Ew∈Rd×Nw,
E
t
∈
R
d
×
N
t
E_t ∈ R^{d×N_t}
Et∈Rd×Nt,
E
l
∈
R
d
×
N
l
E_l ∈ R^{d×N_l}
El∈Rd×Nl,通过embedding的方法获取每一次使用的特征向量。
1.8 UAS 和 LAS
- UAS: Unlabeled Attachment Score, 指不对依赖关系进行分类的正确率评价指标
- LAS: Labeled Attachment Score, 指对依赖关系进行分类的正确率评价指标
Attachment在这里表示词与词之间的依赖关系箭头标注。