在依存句法分析中,句子中词与词之间存在一种二元不等价关系: 主从关系
。在句子中,如果一个词修饰另一个词,则称修饰词为从属词(dependent)
,被修饰词成为支配词(head)
,两者之间的语法关系就是依存关系(dependency relation)
。
如句子“小目标”中的形容词“小”与名次“梦想”之间的关系如下图所示:
在图中,箭头的方向由支配词指向从属词。将句子中所有的词语的依存关系以有向边的形式表示出来,就会得到一颗树,该树即是依存句法树(dependency parse tree)
。
现代依存语法中,语言学家Robinson对依存句法树提出了一下4条约束性公理:
这四条公理分别约束了依存句法树的根节点的唯一性
、连通
、无环
、投射性
。
依存句法分析
是一种中高级NLP任务,用来分析句子的依存语法。通常根据句子的词语和词性,生成一颗依存句法树。
目前常用的依存句法分析方法是:基于转移的依存句法分析
。基于转移的依存句法分析属于监督学习的范畴,其涉及许多组件。我们先定义一台虚拟的机器,这台机器会根据自身的状态和输入的词语预测下一步要执行的转移动作,然后根据转移动作拼装句法树。该类算法中比较经典的是:Arc-Eager
。
一个转移系统(Transition System)
S由4个部件构成:$$ S = (C,T,c{s},C{t}) $$
其中:
系统状态由3元组组成:c = (s, b, A),其中:
Arc-Eager转移系统的转移动作集合和响应的执行条件如下表所示:
动作名称 | 动作 | 条件 | 备注 |
---|---|---|---|
Shift | (s, i|b,A) => (s|i, b, A) | 队列b非空 | 将队首单词i压栈 |
LeftArc | (s|i, j|b, A) => (b, j|b, AU{(i <-- j)}) | 栈顶单词i没有支配词 | 将栈顶单词i的支配词设置为队首单词j,即i作为j的子节点; |
RightArc | (s|i, j|b, A) => (s|i|j, b, AU{(i-->j)} ) | 队首单词就没有支配词 | 将队首单词j的支配词设置为栈顶单词i,集j作为i的子节点; |
Reduce | (s|i, b, A) => (s, b, A) | 栈顶单词i已有支配词 | 将栈顶单词i出栈; |
备注:转移系统的终止状态为:栈为空,且队列仅剩下虚根(root)时的状态。
以“我爱自然语言处理”为例,使用Arc-Eager
转移系统进行依存分析时系统状态如下:
编号 | 转移动作 | s | b | A |
---|---|---|---|---|
0 | init | [] | 我,爱,自然语言处理,root | {} |
1 | Shift | 我 | 爱,自然语言处理,root | {} |
2 | LeftArc(主谓) | [] | 爱,自然语言处理,root | {我 <-- 爱} |
3 | shift | 爱 | 自然语言处理,root | {我 <-- 爱} |
4 | RightArc(动宾) | 爱,自然语言处理 | root | {我 <-- 爱, 爱 --> 自然语言处理} |
5 | Reduce | 爱 | root | {我 <-- 爱, 爱 --> 自然语言处理} |
6 | LeftArc(核心) | [] | root | {我 <-- 爱, 爱 --> 自然语言处理, 爱 <-- root} |
常用的依存句法分析工具如下:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。