任务介绍
句子的依存结构表达了词与词之间的依赖关系,这种关系称依存关系。它是一种二元的非对称关系(binary asymmetric relation),从依存关系的支配者head指向从属者dependent。
依存句法分析旨在将输入的句子转化成依存分析树(或图),依存树中自上而下任意父子结点之间用依存关系连接。在自然语言处理中,依存句法分析属于句法层次的任务,它一般需要词法层次的词性标注(POS)的结果作为辅助信息。
有趣的是,词性标注这个任务又需要分词结果作为辅助信息,可通过分词和词性标注联合任务来规避分词带来错误传播,当然这是题外话。
以LTP为例,依存句法分析中的依存关系包括:
关系类型 | 标签 | 描述 | 样例 |
---|---|---|---|
主谓关系 | SBV | subject-verb | 我送她一束花 (我 <-- 送) |
动宾关系 | VOB | 直接宾语,verb-object | 我送她一束花 (送 --> 花) |
间宾关系 | IOB | 间接宾语,indirect-object | 我送她一束花 (送 --> 她) |
前置宾语 | FOB | 前置宾语,fronting-object | 他什么书都读 (书 <-- 读) |
兼语 | DBL | double | 他请我吃饭 (请 --> 我) |
定中关系 | ATT | attribute | 红苹果 (红 <-- 苹果) |
状中结构 | ADV | adverbial | 非常美丽 (非常 <-- 美丽) |
动补结构 | CMP | complement | 做完了作业 (做 --> 完) |
并列关系 | COO | coordinate | 大山和大海 (大山 --> 大海) |
介宾关系 | POB | preposition-object | 在贸易区内 (在 --> 内) |
左附加关系 | LAD | left adjunct | 大山和大海 (和 <-- 大海) |
右附加关系 | RAD | right adjunct | 孩子们 (孩子 --> 们) |
独立结构 | IS | independent structure | 两个单句在结构上彼此独立 |
标点 | WP | punctuation | 。 |
核心关系 | HED | head | 指整个句子的核心 |
实际上,也不必严格遵守这个表格,最终还是得按照语料的来,毕竟tag都是标注规范说了算。
以“他叫汤姆去拿外衣。”为例,得到如下的依存句法分析结果:
一般句子的核心都是谓词。
依存句法分析可以帮助理解文本语义,并且具有可解释性。
基于贪心的确定性转移的依存句法分析[1]
将依存句法分析的分析过程看成状态机的状态转移过程。给定一个初始状态(init state)和一个终止状态(terminate state),状态机从初始状态出发,在每个时刻都贪心地选择一个转移方式,从而实现状态的转移。到达终止状态后,可根据整个过程中的转移序列可以还原出依存分析树。
用三元组(\(\sigma\), \(\beta\), A)表示状态,其中\(\sigma\)是一个栈(ROOT位于栈底),\(\beta\)是缓存(buffer),A表示解析的结果。对于句子\(s=(w_1, w_2, ..., w_n)\),起始状态为([ROOT], [\(w_0\) \(w_1\) \(w_2\) ... \(w_n\)], \(\emptyset\)),终止状态为([ROOT], [], A)
每个时刻的转移方式有三种,shift、left_arc和right_arc。
- shift:将buffer中的一个词添加到栈顶;即 \(\sigma\), \(w_i\)|\(\beta\), A \(\rightarrow\) \(\sigma\)|\(w_i\), \(\beta\), A
- Left-Arc(l):栈[ROOT w1 w2 ...]生成一个方向向左、依存关系标签为l的弧边(\(w_1 \leftarrow w_2\))加入到A中,然后将\(w_1\)移出栈;
- Right-Arc(l):栈[ROOT w1 w2 ...]生成一个方向向右、依存关系标签为l的弧边(\(w_1 \rightarrow w_2\))加入到A中,然后将\(w_2\)移出栈;
以“He has good control.”为例,整个转移过程为:
最终可根据A得到如下解析树:
于是每个时刻如何选择转移方式成为方法的关键。考虑到状态机在每个时刻的转移方式有\(2*N_l+1\)种[2],其中\(N_l\)是依存关系的数量。而状态机在每个时刻都只贪心地做出选择,所以简单构建一个分类器即可实现整个系统。当然,在解码过程中也可以换成beam search。
A Fast and Accurate Dependency Parser using Neural Networks中使用的是DNN模型,从stack和buffer中抽取出一些词,然后将这些词的词嵌入、POS标签嵌入、依存关系标签嵌入作为输入,输出则是预测状态转移的方式。考虑到2014年的模型拿到现在肯定不中用,无论是网络结构还是优化器,都过时了,所以这里不打算介绍了。
度量
度量包括两种,UAS(unlabeled attachment scores)和LAS(labeled attachment scores),其中LAS可参考CoNLL 2017 Shared Task: Multilingual Parsing from Raw Text to Universal Dependencies.
后记
相比于传统的语义理解,如今大数据+大算力直接训练端到端的模型成为主流,语义依存分析渐渐变得不再那么重要了。
A Fast and Accurate Dependency Parser using Neural Networks. Danqi Chen, Christopher D. Manning. EMNLP 2014. ↩︎
left-arc和right-arc各有\(N_l\)个转移方式,再加shift就是\(2*N_l+1\)了。 ↩︎