句法分析的基本任务是确定句子的句法结构或者句子中词汇之间的依存关系。 
  句法分析分为句法结构分析(syntactic structure parsing)和依存关系分析(dependency parsing)。以获取整个句子的句法结构或者完全短语结构为目的的句法分析,被称为成分结构分析(constituent structure parsing)或者短语结构分析(phrase structure parsing);另外一种是以获取局部成分为目的的句法分析,被称为依存分析(dependency parsing)。

句法结构分析

句法结构分析方法可以分为基于规则的分析方法基于统计的分析方法两大类。

基于规则的句法结构分析方法的基本思路是,由人工组织语法规则,建立语法知识库,通过条件约束和检查来实现句法结构歧义的消除。基于规则的语法结构分析可以利用手工编写的规则分析出输入句子所有可能的句法结构。

根据句法分析树形成方向的区别,人们通常将这些方法划分为三种类型:自顶向下的分析方法,自底向上的分析方法和两者相结合的分析方法。自顶向下分析算法实现的是规则推导的过程,分析树从根结点开始不断生长,最后形成分析句子的叶结点。而自底向上分析算法的实现过程恰好相反,它是从句子符号串开始,执行不断规约的过程,最后形成根节点。

基于概率上下文无关文法的短语结构分析方法,可以说是目前最成功的语法驱动的统计句法分析方法,可以认为是规则方法与统计方法的结合。

PCFG(probabilistic context-free grammars)

PCFG结合上下文无关文法(CFG)中最左派生规则(left-most derivations)和不同的rules概率,计算所有可能的树结构概率,取最大值对应的树作为该句子的句法分析结果。对最左派生规则的每一步都添加概率,这样整棵句法分析树的概率就是所有这些“独立”的概率的乘积:

为了方便计算,在PCFG中添加对rules的限制(Chomsky Normal Form):

找概率最大的句法分析树结构:

1. 暴力搜索(Brute-force method) 
  暴力搜索Brute-force method(根据PCFG的rules,暴力计算不同句法结构的概率,选择概率最高的句法分析树作为结论),缺陷在于随着句子的增长,计算量指数增长:

2. 动态规划(dynamic programming)CKY算法 
  π(i,j,X)π(i,j,X)is the highest score for any parse tree that dominates words , and has non-terminal X as its root. 
  因此整个句子的概率为π(1,n,S)=argmaxTG(s)π(1,n,S)=argmaxTG(s),其中TG(s)TG(s)是句子ss所有可能结构的集合。

结合上面π(i,j,X)π(i,j,X)的定义:

举例说明:

因此整个动态规划算法如下:

考虑算法时间复杂度: 
i,j,s的选择都是o(n),对于X、Y和Z 和rules的选择都是o(|N|)。(n是句子中单词的数量,N是非终止符号的数量) 

Lexical PCFG(基于词典的PCFG)

首先考虑PCFG的缺陷: 
  1、在PCFG中,词的选择具有很强的独立性假设,词的选择完全依赖于当前的词性(POS),而条件独立于与其他所有句法树上的结构(More formally, the choice of each word in the string is conditionally independent of the entire tree,once we have conditioned on the POS directly above the word),而这正是很多歧义问题的原因。下例中,’IBM’的选择仅仅与’NP’有关,而与其他树上的结构完全无关。 
 
2、对结构偏好(structure preference)不敏感 
  对于存在歧义的两个句子,具有完全相同的树形结构,但是由于缺乏词汇的信息,进而缺少结构依赖的信息,使得最终不同树形结构计算的概率完全相同。 
  如下例中:同一句话,两个完全不同的句法分析结构,由于采用了相同的rules,因此概率计算最终也会相同。 
 


 
  特别是介词短语(PP)的情况,在训练集中能统计到PP与名词短语(NP)或动词短语(VP)结合时不同的比例,但是PCFG完全忽略了这种偏好(preference)。

Lexicalized Context-Free 
  自下向上(bottom-up)的标记每条规则的head child,并添加到句法分析树上,每条规则的head child采用启发式自动选择。 
 


 
如下图在基于词典的PCFG中,规则概率如下:


 
基于词典的PCFG的参数估计 
  由于采用lexicalized PCFG之后,添加了词典信息,rules的数量和参数数量增多。因此需要考虑参数估计方法。 
 
  整个概率计算分为两部分,第一部分预测了规则(rules)的概率,第二部分预测了该规则下的词概率,每部分都利用平滑的估计方法进行计算。 
  
 
 
  对于Lexical PCFG,同样存在如何寻找概率最大的句法分析树结构的问题,而答案和PCFG相同,一样是采用动态规划(dynamic programming)的思想。

依存关系分析

依存语法的本质是一种结构语法,它主要研究以谓词为中心而构句时由深层语义结构映现为表层语法结构的状况及条件,谓词与体词之间的同现关系,并据此划分谓词的词类。

依存句法分析的可用特征:

1. 双单词关联:比如issue->the

2.依存距离:依存词和中心词的距离,大部分是相邻的两个词,倾向于距离近的

3.标点符号两边的成分可能没有相互关系

4.词语配价,对于不同词性依附的词的数量或者依附方向,一个词语最多有几个依赖者

Transition-based parsing(基于贪心决策动作的拼接句法树)

一次分析任务c=(s,b,A)由一个栈s,一个队列b,一系列依存弧A构成。

栈s是用来储存系统已经处理过的句法子树的根节点的,初始状态下S=[ROOT]。另外,定义从栈顶数起的第i个元素为sisi。那么栈顶元素就是s1,s1的下一个元素就是s2。则称s2为左焦点词,s1为右焦点词。接下来的动作都是围绕着这两个焦点词展开的。

队列 
  初始状态下队列就是整个句子,且顺序不变b=[w1...wn],队列的出口在左边。 
依存弧 
  一条依存弧有两个信息:动作类型+依存关系名称I。l视依存句法语料库中使用了哪些依存关系label而定,在arc-standard系统中,一共有如下三种动作: 
  LEFT-ARC(l):添加一条s1 -> s2的依存边,名称为l,并且将s2从栈中删除。前提条件:|s|≥2。亦即建立右焦点词依存于左焦点词的依存关系,例如: 
   
  RIGHT-ARC(l):添加一条s2 -> s1的依存边,名称为l,并且将s1从栈中删除。前提条件:|s|≥2。亦即建立左焦点词依存于右焦点词的依存关系,例如: 
   
  SHIFT:将b1出队,压入栈。亦即不建立依存关系,只转移句法分析的焦点,即新的左焦点词是原来的右焦点词,依此类推。例如:

给出例子:

这样就成功建立了依存关系树,那么核心问题就来到如何预测三种操作。 
14年提出了一个非常简单高效的神经网络预测方法,模型如下:

原方法中,输入是栈顶的两个单词和他们的四个子结点单词,加上队列头部的一个单词,以此贪心地预测下一个操作。 
不过,输入中每个单词的并不是单纯以词向量表示,还包括句法标记和已有的依存弧信息,均已向量化:

Graph-based的依存解析方法

解析过程:学习一个打分函数,针对一句话在所有可能的解析结果(解析的依存树)中执行全局的穷举搜索,得到一个打分最高的解析树. 
 优点:目前效果相比transition-based较好 
 挑战:搜索的过程速度很慢

 这个模型是把之前构建树的问题变成距离计算的问题。它本质做的事情是建立一个矩阵,行和列都是这个句子里的token,每两个行列中的一个点表示a修饰b的概率或b修饰a的概率的一个得分,最后要形成树,我们就是在这个距离向量中找一棵最小生成树,生成出来的就是dependency parser。

浅层语法分析(局部语法分析)

浅层语法分析只要求识别句子中的某些结构相对简单的独立成为,例如非递归的名词短语、动词短语等,这些被识别出来的结构通常称为语块(chunk)。

浅层句法分析将句法分析分解为两个主要子任务,一个是语块的识别和分析,另一个是语块之间的依附关系分析。其中,语块的识别和分析是主要任务。

基本名词短语(base NP)是语块中的一个重要类别,它指的是简单的、非嵌套的名词短语,不含有其他子项短语,并且base NP之间结构上是独立的。示例如下:

base NP识别就是从句子中识别出所有的base NP,根据这种理解,一个句子中的成分和简单的分为baseNP和非base NP两类,那么base NP识别就成了一个分类问题。

base NP的表示方法有两种,一种是括号分隔法,一种是IOB标注法。括号分隔法就是将base NP用方括号界定边界,内部的是base NP,外部的不属于base NP。IOB标注法中,字母B表示base NP的开端,I表示当前词语在base NP内,O表示词语位于base NP之外。

https://www.jianshu.com/p/fb408b6a0904

生成性依存分析方法

生成式依存分析方法采用联合概率模型生成一系列依存语法树并赋予其概率分值,然后采用相关算法找到概率打分最高的分析结果作为最后输出。

生成式依存分析模型使用起来比较方便,它的参数训练时只在训练集中寻找相关成分的计数,计算出先验概率。但是,生成式方法采用联合概率模型,再进行概率乘积分解时做了近似性假设和估计,而且,由于采用全局搜索,算法的复杂度较高,因此效率较低,但此类算法在准确率上有一定优势。但是类似于CYK算法的推理方法使得此类模型不易处理非投射性问题。

判别式依存分析方法

判别式依存分析方法采用条件概率模型,避开了联合概率模型所要求的独立性假设(考虑判别模型CRF舍弃了生成模型HMM的独立性假设),训练过程即寻找使目标函数(训练样本生成概率)最大的参数θ(类似Logistic回归和CRF)。

判别式方法不仅在推理时进行穷尽搜索,而且在训练算法上也具有全局最优性,需要在训练实例上重复句法分析过程来迭代参数,训练过程也是推理过程,训练和分析的时间复杂度一致。

确定性依存方法

确定性依存分析方法以特定的方向逐次取一个待分析的词,为每次输入的词产生一个单一的分析结果,直至序列的最后一个词。

这类算法在每一步的分析中都要根据当前分析状态做出决策(如判断其是否与前一个词发生依存关系),因此,这种方法又称决策式分析方法。

通过一个确定的分析动作序列来得到一个唯一的句法表达,即依存图(有时可能会有回溯和修补),这是确定性句法分析方法的基本思想。

基于约束的分析方法

基于约束满足的分析方法建立在约束依存语法之上,将依存句法分析看做可以用约束满足问题来描述的有限构造问题。

约束依存语法用一系列形式化、描述性的约束将不符合约束的依存分析去掉,直到留下一棵合法的依存树。

句法分析(PCFG,Transition-based parsing)相关推荐

  1. 句法分析:依存分析(Dependency Parsing)

    目录 1. 句法分析任务分类 2. 依存分析方法 2.1 什么是依存分析 2.2 传统的基于转移的依存分析(Transition-based Parsing) 2.3 神经依存分析(Neural De ...

  2. 【CS224n】(lecture4)Dependency Parsing 依存句法分析

    学习总结 句法分析(Syntactic Parsing),两种典型的句法结构表示: (1)短语结构句法:依托上下文无关文法,S代表起始符号,如NP和VP分别表示名词短语和动词短语. (2)依存结构句法 ...

  3. pcfg 自然语言处理_自然语言处理的笔记

    MVA M2 课程,不定期整理更新. Lecture 1 - part 1 linguistic data phonological level - sentence-level analysis, ...

  4. parsing:NLP之chart parser句法分析器

    已迁移到我新博客,阅读体验更佳parsing:NLP之chart parser句法分析器 完整代码实现放在我的github上:click me 一.任务要求 实现一个基于简单英语语法的chart句法分 ...

  5. NLP模型笔记2022-03:简单理解nlp句法分析

    句法分析(syntactic parsing)是自然语言处理中的关键技术之一,它是对输入的文本句子进行分析以得到句子的句法结构的处理过程.对句法结构进行分析,一方面是语言理解的自身需求,句法分析是语言 ...

  6. CS224n 2019 Winter 笔记(三):句子依存分析(Dependency Parsing)

    CS224n 2019 Winter 笔记(三):句子依存分析(Dependency Parsing) 一.概述 二.语言结构的两种Views (一)成分分析(constituent parsing) ...

  7. ACL 2018 ACCEPTED PAPER

    ACL 2018接受了258篇长论文和126篇短论文,总体接受率为24.9%. 论文官方地址:https://acl2018.org/programme/papers/ 详细如下: Long Pape ...

  8. 陌生单词-专业英语代码编码符号1

    identical 相同的 identify 识别 lexically distant 词法遥远的 syntactic parsing 句法 transduction model 转换模型 To th ...

  9. 资源下载 | 历年 AAAI 最佳论文(since 1996)

    导语:AAAI 2020 投稿已经过万,有小伙伴说29号投的时候才三千多,没想到31号就过万了,由此可见本次 AAAI 20220 竞争力非常激烈了. AAAI 2020 投稿已经过万,有小伙伴说29 ...

最新文章

  1. C++知识点杂记3——局部类、位域、volatile、链接指示、枚举、定位new
  2. linux内核杂记(9)-进程调度(4)
  3. php程序员学什么语言好就业_php语言是什么?学好php需要掌握什么?
  4. 架构之美第二章-美丽架构的含义
  5. np.concatenate 函数的使用
  6. 最新python中一升级所有已安装的包方法
  7. 区块链之门 | Reach on Conflux 2021 黑客松开赛
  8. Android开发:apk反编译及后续打包教程2022win11(亲测)
  9. Linux系统修改网卡名称(eth1修改为eth0)
  10. AMIGO小清新资讯(GBK+UTF)DZ仿flyme模板
  11. 使用网络调试助手通过MQTT协议接入到华为云物联网平台
  12. layui 表格加载动画_巴州动画
  13. BGP是做什么的?怎么去配置BGP?
  14. Beyond Cmpare下载安装教程
  15. [原创]Xilinx工具关联UEStudio
  16. 给孩子简单快乐的童年
  17. 遥感影像处理的几个概念
  18. stm32f103c8t6+esp8266在WiFi下通过手机控制外设
  19. 现代密码学之椭圆曲线ECC
  20. html5css背景色代码,background css背景

热门文章

  1. 电容ESR表(一) 电容ESR表的特点、测量原理、电路分析
  2. ffmpeg hls切片工具
  3. MODIS 产品介绍
  4. 使用css3和tween.js二种方式实现照片翻转
  5. 微信翻译如何使用?在微信中如何进行中翻译英
  6. mysql8.0.13解压版安装密码设置_mysql8.0.13解压版安装配置方法图文教程
  7. 使用Bboss处理ES的dsl语句
  8. Rviz中控制机器人模型运动(arbotix)
  9. 有奖互动 | 秋天的第一行代码
  10. 虚拟机xp与Linux 【ping命令】