句法分析:依存分析(Dependency Parsing)
目录
1. 句法分析任务分类
2. 依存分析方法
2.1 什么是依存分析
2.2 传统的基于转移的依存分析(Transition-based Parsing)
2.3 神经依存分析(Neural Dependency Parsing)
句法分析(syntactic parsing)是自然语言处理中的关键技术之一,它是对输入的文本句子进行分析以得到句子的句法结构的处理过程。对句法结构进行分析,一方面是语言理解的自身需求,句法分析是语言理解的重要一环,另一方面也为其它自然语言处理任务提供支持。例如句法驱动的统计机器翻译需要对源语言或目标语言(或者同时两种语言)进行句法分析;语义分析通常以句法分析的输出结果作为输入以便获得更多的指示信息。
1. 句法分析任务分类
根据句法结构的表示形式不同,最常见的句法分析任务可以分为以下三种:
句法结构分析(syntactic structure parsing),又称短语结构分析(phrase structure parsing),也叫成分句法分析(constituent syntactic parsing)。作用是识别出句子中的短语结构以及短语之间的层次句法关系。
依存关系分析,又称依存句法分析(dependency syntactic parsing),简称依存分析,作用是识别句子中词汇与词汇之间的相互依存关系。依存句法分析属于浅层句法分析。
深层文法句法分析,即利用深层文法,例如词汇化树邻接文法(Lexicalized Tree Adjoining Grammar, LTAG)、词汇功能文法(Lexical Functional Grammar, LFG)、组合范畴文法(Combinatory Categorial Grammar, CCG)等,对句子进行深层的句法以及语义分析。
2. 依存分析方法
基于规则的方法: 早期的基于依存语法的句法分析方法主要包括类似CYK的动态规划算法、基于约束满足的方法和确定性分析策略等。
基于统计的方法:统计自然语言处理领域也涌现出了一大批优秀的研究工作,包括生成式依存分析方法、判别式依存分析方法和确定性依存分析方法,这几类方法是数据驱动的统计依存分析中最为代表性的方法。
基于深度学习的方法:近年来,深度学习在句法分析课题上逐渐成为研究热点,主要研究工作集中在特征表示方面。传统方法的特征表示主要采用人工定义原子特征和特征组合,而深度学习则把原子特征(词、词性、类别标签)进行向量化,在利用多层神经元网络提取特征。
https://www.jianshu.com/p/24e0d53b1ee2
https://blog.csdn.net/qq_28031525/article/details/79187080
用语言云分析依存句法和语义依存:语言云工具
生成句法分析树:基于概率上下文无关文法(PCFG)
2.1 什么是依存分析
自然语言处理任务中,有很重要的一块,就是分析语言的结构。语言的结构,一般可以有两 种视角:
- 组成关系(Constituency)
- 依赖关系(Dependency)
前者,主要关心的是句子是怎么构成的,词怎么组成短语。所以研究Constituency,主要 是研究忽略语义的“ 语法” 结构(content-free grammars) 。
后者,依赖关系,则主要关心的是句子中的每一个词, 都依赖于哪个其他的词。 比如下面这个句子:
“瞧这个可爱的小傻瓜!”
- “傻瓜”,是“瞧” 这个动作的对象,因此“傻瓜”是依赖于“瞧”的;
- “可爱的”、“小” 都是修饰“傻瓜”的,因此,这两个形容词都是依赖于“ 傻瓜” 的;
- “这个”同样是指示“傻瓜”的,因此它也依赖于“傻瓜” 。
这样,我们就清楚了这个句子中的所有依赖关系,画成依赖关系图则是这样:
注意,在图中我们增加了一个根节点“Root”,这是为了让“瞧”这个字也有依赖的对 象。
当然,关系依存分析,还有很多的规则,里面比较复杂,我不太感兴趣,所以这里不多写 了。
下面我们来介绍如何让机器自动地帮我们来分析句子的结构。
Dependency Structure展示了词语之前的依赖关系,通常用箭头表示其依存关系,有时也会在箭头上标出其具体的语法关系,如是主语还是宾语关系等。
Dependency Structure有两种表现形式:
- 一种是直接在句子上标出依存关系箭头及语法关系,如:
- 另一种是将其做成树状机构(Dependency Tree Graph)
Dependency Parsing可以看做是给定输入句子 (其中常常是fake ROOT,使得句子中每一个词都依赖于另一个节点)构建对应的Dependency Tree Graph的任务。而这个树如何构建呢?一个有效的方法是Transition-based Dependency Parsing。
2.2 传统的基于转移的依存分析(Transition-based Parsing)
这里主要介绍Nivre在2003年提出的“Greedy Deterministic Transition-based Parsing”方法,一度成为依存分析的标准方法。这里我简单地介绍一下它的工作原理。
我们构造一个三元组,分别是Stack、Buffer和一个Dependency Set。
- Stack:最开始只存放一个Root节点;
- Buffer:则装有我们需要解析的一个句子;
- Set:中则保存我们分析出来的依赖关系, 最开始是空的。
state之间的transition有三类:
https://zhuanlan.zhihu.com/p/66268929
我们要做的事情,就是不断地把Buffer中的词往Stack中推,跟Stack中的词判断是否有依 赖关系,有的话则输出到Set中,直到Buffer中的词全部推出,Stack中也仅剩一个 Root,就分析完毕了。
下面,我通过一个十分简单的例子,来演示这个过程。这次,我们分析的句子是:
分析过程如下:
上面的过程怎么理解呢?
- 比方从第二行,这个时候Stack中只有[Root,I] ,不构成依赖关 系,所以我们需要从Buffer中“进货”了,因此采取的Action是Shift(把Buffer中的首 个词,移动到Stack中),于是就到了第三行。
- 第三行,我们的Stack变成了[Root,I,love] ,其中I和Love构成了依赖关系,且是Love指 向I,即“向左指”的依赖关系,因此我们将采取“Left Arc”的action,把被依赖的词(此时就是关系中的左边的词)给移除Stack,把这个关系给放入到Dependency Set中。
- 按照这样的方法,我们一直进行,不断地根据Stack和Buffer的情况,来从Shift、Left-arc、Right-arc三种动作中选择我们下一步应该怎么做,直到Stack中只剩一个Root,Buffer也空了,这个时候,分析就结束,我们就得到了最终的Dependency Set 。
以上的过程,应该不难理解,但是相信大家此时一定会有疑问:
❝ 我怎么让机器去决定当前的Action呢?即机器怎么知道,Stack中是否构成了依赖关 系?
❞
在Nivre的年代,这里使用是机器学习的方法, 需要做繁重的特征工程.这里的特征,往往 有个二值特征,即无数个指示条件作为特征,来训练模型,可以想象这么高纬度的 特征是十分稀疏的。因此,这种模型的95%左右的解析时间,都花费在计算特征上。这也 是传统方法的最要问题。
2.3 神经依存分析(Neural Dependency Parsing)
神经依存分析方法,是斯坦福团队2014年的研究成果,主要就是利用了神经网络的方法代 替了传统机器学习方法、用低维分布式表示来代替传统方法的复杂的高维稀疏特征表示。而 整个解析的过程,依然是根据之前的Transition-based方法。
首先明确,我们的预测任务,是「根据当前的状态,即Stack、Buffer、Set的当前状态,来构建特征,然后预测出下一步的动作」。
在神经依存分析中,我们的特征是怎么构建的呢?我们可以利用的信息包括词(word)、词性(postag)和依赖关系的标签(label)。我们对这三者,都进行低维分布式表示,即通过Embedding的方法,把离散的word、label、tag都转化成低维向量表示。
对于一个状态,我们可以选取stack、Buffer、set中的某些词和关系,构成一个集合,然 后把他们所有的embedding向量都拼接起来,这样就构成了该状态的特征表示。
至于选择哪些词、关系,这个就是一个「经验性」的东西了,在斯坦福的论文中可以详细了 解。整个模型的网络结构也十分简洁:
对于Dependency Parsing的简单介绍就到此为止。依存分析,并不是我们NLP中最常见 的任务之一,我们也很少看到直接将依存分析做应用的,我们更常见的是分类、实体识别、 阅读理解、对话等任务。但是依存分析,作为自然语言处理的一项基础技术,试图让机器去 理解语言的内部结构,理解了结构,NLU(Natural Language Understanding)才成为可能。
CS224N的Assignment3就是Neural Dependency Parsing的实现,代码见github:https://github.com/beyondguo/CS
句法分析:依存分析(Dependency Parsing)相关推荐
- CS224n 2019 Winter 笔记(三):句子依存分析(Dependency Parsing)
CS224n 2019 Winter 笔记(三):句子依存分析(Dependency Parsing) 一.概述 二.语言结构的两种Views (一)成分分析(constituent parsing) ...
- 依存句法分析 oracle,spaCy 第三篇:依存分析
句法是指句子的各个组成部分的相互关系,句法分析分为句法结构分析(syntactic structure parsing)和依存关系分析(dependency parsing).句法结构分析用于获取整个 ...
- 【CS224n】(lecture4)Dependency Parsing 依存句法分析
学习总结 句法分析(Syntactic Parsing),两种典型的句法结构表示: (1)短语结构句法:依托上下文无关文法,S代表起始符号,如NP和VP分别表示名词短语和动词短语. (2)依存结构句法 ...
- 句法依存分析_[NLP学习笔记]句法分析
句法分析任务简介 成分句法分析(Constituency Parsing):分析句子的成分,给出一棵树由终结符和非终结符构成的句法树. 依存句法分析(Dependency Parsing):分析句子中 ...
- 依存句法分析与语义依存分析的区别
github开源代码:https://github.com/lhyxcxy/nlp 依存句法分析 依存语法 (Dependency Parsing, DP) 通过分析语言单位内成分之间的依存关系揭 ...
- NLP--词性标注(POS)、依存句法分析(DP)、语义依存分析(SDP)【实践】
前言 本文主要对词性标注.依存句法分析.语义依存分析这三个任务,进行简单的调用code实现. 词性标注(POS) 词性标注(Part-of-speech tagging),词性标注是用适当的词性标记句 ...
- 句法依存分析_复旦大学邱锡鹏教授:词法、句法分析研究进展综述
本文为第十六届自然语言处理青年学者研讨会 YSSNLP2019 报告<词法.句法分析研究进展综述>的简要文字整理,本报告主要回顾词法.句法领域的最新研究进展. 关于报告人: 邱锡鹏,复旦大 ...
- NLTK的pos_tag含义和Dependency Labels_依存分析标签
1.NLTK的pos_tag含义 CC coordinatingconjunction 并列连词 :and, or, but, if CD cardinaldigit 纯数 基数 ...
- cs224n第六讲依存分析
1.句法结构:成分结构和依存结构 两种角度的语言结构: 句子成分语法=短语结构语法=上下文无关语法 Constituency = phrase structure grammar = context- ...
最新文章
- 【ZJOI2008】树的统计(树链剖分)
- Android关于SQLiteOpenHelper的封装
- 助力科研 越海扬波发力高性能计算应用
- 软件评测-信息安全-应用安全-资源控制-用户登录限制(中)
- 蓝桥杯-关联矩阵(java)
- pandas常用函数,个人常用的
- docker 搭建 ftp服务器
- [NLP]基于IMDB影评情感分析之BERT实战-测试集上92.24%
- AD显示隐藏管脚——谈mos管封装的一个坑处
- 会话控制_2-5 编程练习
- select模型(一 改进客户端)
- 优化大中型企业Internet连接
- mysql_分组查询
- 高性能MySQL系统思维导图
- 菜鸟Java远程连接腾讯云服务器上面的数据库
- 智能称重系统,车牌识别的优势
- Ubuntu下载、安装golang编辑器
- 郭天祥的10天学会51单片机_第十节
- AIS船舶自动识别系统原理
- Programming Ruby读书笔记
热门文章
- 后台开发技术(1)--概述
- 【Python】青少年蓝桥杯_每日一题_12.11_开关灯问题
- 【Python】青少年蓝桥杯_每日一题_7.19_电梯用量
- vant coupon 时间戳如何计算_计软考研双日练 | 如何计算拓扑排序算法的时间复杂度?...
- 使用DCIM软件确保数据中心符合DCOI
- string替换_GEE数据类型—String,Number
- android格式化手机号正则,Android验证手机号的正则表达式
- DL之AlexNet:AlexNet算法的架构详解、损失函数、网络训练和学习之详细攻略
- Tool/IDE之MinGW:MinGW(C++环境)的简介、安装、使用方法之详细攻略
- 成功解决FileNotFoundError: [Errno 2] No such file or directory: '/home/bai/Myprojects/Tfexamples/data/kn