专栏首页白话NLP依存句法分析
原创

依存句法分析

1. 依存句法的理论

1.1 依存关系

在依存句法分析中,句子中词与词之间存在一种二元不等价关系主从关系。在句子中,如果一个词修饰另一个词,则称修饰词为从属词(dependent),被修饰词成为支配词(head) ,两者之间的语法关系就是依存关系(dependency relation)

如句子“小目标”中的形容词“小”与名次“梦想”之间的关系如下图所示:

在这里插入图片描述

在图中,箭头的方向由支配词指向从属词。将句子中所有的词语的依存关系以有向边的形式表示出来,就会得到一颗树,该树即是依存句法树(dependency parse tree)

在这里插入图片描述

1.2 依存句法的约束公理

现代依存语法中,语言学家Robinson对依存句法树提出了一下4条约束性公理:

  1. 有且只有一个词语(root,虚拟根节点,简称虚根)不依存于其他词语;
  2. 除此之外所有词语必须依存于其他词语;
  3. 每个词语不能依存于多个词语;
  4. 如果词语A依存于B,那么位置处于A和B之间的词语C只能依存于A、B或AB之间的词语;

这四条公理分别约束了依存句法树的根节点的唯一性连通无环投射性

2. 基于转移的依存句法分析

依存句法分析是一种中高级NLP任务,用来分析句子的依存语法。通常根据句子的词语词性,生成一颗依存句法树

目前常用的依存句法分析方法是:基于转移的依存句法分析。基于转移的依存句法分析属于监督学习的范畴,其涉及许多组件。我们先定义一台虚拟的机器,这台机器会根据自身的状态和输入的词语预测下一步要执行的转移动作,然后根据转移动作拼装句法树。该类算法中比较经典的是:Arc-Eager

2.1 Arc-Eager转移系统

一个转移系统(Transition System)S由4个部件构成:$$ S = (C,T,c{s},C{t}) $$

其中:

  • C是系统状态集合;
  • T是所有可执行的转移动作的集合,每个转移动作可视作为输入输出都为系统状态的函数;
  • c_s是一个初始化函数,将句子转换为一个初始的系统状态;
  • C_t是C的一个子集,表示一系列终止状态,系统进入这些状态之后即可停止,并输出最终的动作序列。

系统状态由3元组组成:c = (s, b, A),其中:

  • 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)时的状态。

Demo

以“我爱自然语言处理”为例,使用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}

在这里插入图片描述

3. 依存句法分析的工具

常用的依存句法分析工具如下:

  1. HanLP
  2. LTP

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【白话NLP】——为什么需要mask

    通常在训练NLP模型时,batch中的句子长度不相等,这个时候会对没有达到规定长度的句子会进行pad操作(一般用0进行pad),如下图所示(绿色是进行pad的部...

    Dendi
  • 【BERT系列】—— 将Tensorflow格式的模型转换为Pytorch格式的模型

    以BERT为代表的预训练模型是目前NLP领域最火热的方向,但是Google发布的 BERT 是Tensorflow格式的,这让使用pytorch格式 程序猿 们...

    Dendi
  • 使用pytorch进行文本分类——ADGCNN

    在文本分类任务中常用的网络是RNN系列或Transformer的Encoder,很久没有看到CNN网络的身影(很久之前有TextCNN网络)。本文尝试使用CNN...

    Dendi
  • 《自然语言处理入门》12.依存句法分析--提取用户评论

    语法分析(syntactic parsing )是自然语言处理中一个重要的任务,其目标是分析句子的语法结构并将其表示为容易理解的结构(通常是树形结构)。同时,语...

    mantch
  • 详解Transition-based Dependency parser基于转移的依存句法解析器

    其中两个词之前的弧表示这两个词有依存关系,弧上的标签为二者的关系,弧的始发点为父亲节点,箭头指向为孩子节点。比如The 和 fox 是冠词+名词(det)的名词...

    zenRRan
  • iOS开发之使用git传代码到github

    现在越来越多的公司采用了git作为版本管理工具,相对于传统的SVN,git有着明显的优势,今天写一篇入门文章,教大家如何将自己写好的iOS项目通过git传到gi...

    YungFan
  • MySQL单表查询

    3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

    changxin7
  • github简单使用

    当在另外一台电脑上对代码有所修改后,远程仓库与另一台电脑就代码有不同,这时候可以在与远程代码的不同的电脑上执行:

    小二三不乌
  • 聚道科技创始人兼CEO李厦戎:为生命计算,基因数据独特的魅力在于造福个体

    数据猿导读 每个人如果在刚出生时采集的基因数据,会在整个生命中都产生价值,甚至还能帮助到后代分析家族遗传特征,对于遗传疾病的诊断和治疗会有很大的帮助。个体数据聚...

    数据猿
  • 仓库模式被误用了吗?—— laravel

    简单来说, 仓库模式就是一种存放数据访问逻辑的容器, 它向业务层屏蔽了数据访问逻辑的细节, 在不清楚数据层设计结构的情况下, 我们也能按照业务逻辑来访问数据层。

    windseeker

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动