1、句法分析的基本概念

句法分析不是一个自然语言处理任务的最终目标,但它往往是实现最终目标的关键环节。目的:

  • 确定句子的语法结构
  • 句子中词汇之间的依存关系

        句法分析分为句法结构分析依存关系分析两种。以获取整个句子的句法结构为目的的称为完全句法分析,而以获得局部成分为目的的语法分析称为局部分析,依存关系分析简称依存分析。

        主要任务有三种:判断输出的字符串是否属于某种语言

消除输入句子中词法和结构等方面的歧义

分析输入句子的内部结构,如成分构成、上下文关系等

句法分析有两个要素:

  • 知识库构建:形式化的语法规则构成的规则库    +    存储词条信息的词典或同义词表等

语法形式化属于句法理论研究的范畴,主要包括:上下文无关文法(CFG)  |  基于约束的文法(合一文法)

  • 基于知识库的解析算法

2、句法结构分析方法

主要分为:基于规则的分析方法    |    基于统计的分析方法   两大类

基于规则的分析方法:人工组织语法规则,建立语法知识库

通过条件约束和检查来实现句法结构歧义的消除

泛化能力差、但针对特定领域能够实现有效消歧 和 超语法现象、在程序语言中还可以在自然语言中受限。

句法分析树形成:自上而下  |  自下而上  |  两者结合 三类。基于规则的分析方法,对于特定领域和目的有针对性的设计规则,能够更好克服句子的歧义和超语法现象。

完全语法分析:介绍  Probabilistic Context Free Grammar ,即PCFG算法,基于概率的句法分析,融合了规则和统计两种

浅层语法分析(局部语法分析):完全语法分析由于句子成分复杂难以达到让人满意的程度,为了降低难度同时又能提取一部分句子结构信息,只识别某些结构简单的句子成分,如非递归的名词短语、动词短语等,称为语块(chunk),主要任务有:

  • 语块的识别和分析        |        语块之间的依附关系分析
  • 具体见:小节 4、浅层语法分析(局部语法分析)

3、PCFG算法

概率上下文无关文法(PCFG)是一个五元组(N,∑,S,R,P):

  • 终结符集∑            非终结符集N
  • 开始非终结符S∈N            R代表产生规则集            P 代表每个产生规则的统计概率

PCFG是CFG的扩展,PCFG的规则表示形式为:A→α p,其中A为非终结符,p为A推导出α的概率,即p=P(A→α),该概率分布必须满足如下条件:

PCFG规则统计概率集实例:

  • S -> NP VP   0.7;            S -> VP      0.2;            S -> NP      0.1;            S -> VC      0.1;
  • NP -> noun   0.3;            NP -> adj noun 0.2;            NP -> DJ       0.2;            NP -> DJ NP    0.3;
  • DJ -> VP de    0.4;            DJ -> NP de    0.6;            VP -> VC NP    1.0;            VC -> vt adj   0.3;
  • VC -> VC utl   0.5;            VC -> vt       0.2;

三个假设条件:

  • 位置不变性(place invariance):子树的概率不依赖于该子树所管辖的单词在句子中的位置
  • 上下文无关性(context-free):子树的概率不依赖于子树控制范围以外的单词
  • 祖先无关性(ancestor-free):子树的概率不依赖于推导出子树的祖先节点

PCFG三个问题:

  • 给定一个句子,估计产生句子的概率;
  • 在语句句法结构有歧义的情况下,如何快速选择最佳的句法分析(这就我们常说的句法分析)
  • 如何从语料库中训练文法的参数;

PCFG模型不完全合理,比如初始非终结符的选取实际和上下文有关,基于此又提出了 PCFG_LA算法,即带隐含标记的PCFG算法,x就是隐含标记,xi的取值范围一般是人为设定的,一般取1~16之间的整数,而且PCFG-LA也类似于HMM模型,原始非终结符对应HMM模型中的观察输出,而隐含标记对应HMM模型中的隐含状态。

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

为避免完全语法分析中句子成分过于复杂的问题,同时又希望能够提取到句子成分的关系

基本名词短语(base NP)是语块中的一个重要类别,它指的是简单的、非嵌套的名词短语,不含有其他子项短语,并且base NP之间结构上是独立的。base NP识别就是一个二分类问题,将句子中成份简单分为baseNP和非base NP两类,方法有两种:

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

基本名词短语识别有几种方法:

  • 基于SVM的:SVM一般要从上下文的词、词性、base NP标志中提取特征来完成判断
  • 基于WINNOW的:(基本思想)已知特征向量和参数向量和实数阈值θ,先将参数向量均初始化为1,将训练样本代入,求特征向量和参数向量的内积,将其与θ比较,如果大于θ,则判定为正例,小于θ则判定为反例,将结果与正确答案作比较,依据结果来改变权值。如果将正例估计成了反例,那么对于原来值为1的x,把它的权值扩大。如果将反例估计成了正例,那么对于原来值为1的x,把它的权值缩小。然后重新估计重新更改权重,直到训练完成。
  • 基于CRF的:基于CRF的base NP识别方法拥有与SVM方法几乎一样的效果,优于基于WINNOW的识别方法、基于MEMM的识别方法和感知机方法,而且基于CRF的base NP识别方法在运行速度上较其他方法具有明显优势

5、依存语法分析

分析除句子的短语结构树之外,用词与词之间依存关系描述

一切结构语法现象可以概括为关联、组合和转位这三大核心。句法关联建立起词与词之间的从属关系,这种从属关系由支配词从属词联结而成,谓语中的动词是句子的中心并支配别的成分,它本身不受其他任何成分支配。

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

常用的依存于法结构图示有三种:

依存句法的四条公理:

  • 一个句子只有一个独立的成分
  • 句子的其他成分都从属于某一成分
  • 任何一个成分都不能依存于两个或两个以上的成分
  • 如果成分A直接从属于成分B,而成分C在句子中位于A和B之间,那么,成分C或者属于成分A,或者从属于B,或者从属于A和B之间的某一成分。

四条公理相当于对依存图和依存树的形式约束:单一父节点、连通、无环和可投射,由此来保证句子的依存分析结果是一棵有根的树结构。(可投射:如果单词之间的依存弧画出来没有任何的交叉,就是可投射的)

为了便于理解,使用以下总结:

  • 单纯结点条件:只有终结点,没有非终结点
  • 单一父结点条件:除根节点没有父结点外,所有的结点都只有一个父结点
  • 独根结点条件:一个依存树只能有一个根结点,它支配其他结点
  • 非交条件:依存树的树枝不能彼此相交
  • 互斥条件:从上到下的支配关系和从左到右的前于关系之间是相互排斥的,如果两个结点之间存在着支配关系,它们就不能存在于前于关系

基于数据驱动的统计依存分析中具有代表性的三种方法:生成式依存分析方法、判别式依存分析方法和确定性依存分析方法

  • 生成性依存分析方法

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

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

  • 判别式依存分析方法

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

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

  • 确定性依存方法

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

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

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

  • 短语结构树 和 依存关系树 的联系

短语结构树可以被一一对应地转换成依存关系树,反之则不然。因为一棵依存关系树可能会对应多棵短语结构树。

6、14种依存关系标注

  • 主谓关系 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 两个单句在结构上彼此独立
  • 核心关系 HED head 指整个句子的核心

7、句法分析代码实现

from pyhanlp import *def demo_dependency_parser():# 这个在hanlp中就是  """public static CoNLLSentence parseDependency(String sentence){return NeuralNetworkDependencyParser.compute(sentence);}"""sentence = HanLP.parseDependency("虽然提取出来的结果也算合理,但是还是不够准确,我希望的结果是{‘马克思的思想‘,‘恩格斯的理论‘}")for word in sentence.iterator():  # 通过dir()可以查看sentence的方法print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA))print()# 也可以直接拿到数组,任意顺序或逆序遍历word_array = sentence.getWordArray()for word in word_array:print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA))print()# 还可以直接遍历子树,从某棵子树的某个节点一路遍历到虚根CoNLLWord = JClass("com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLWord")head = word_array[12]while head.HEAD:head = head.HEADif (head == CoNLLWord.ROOT):print(head.LEMMA)else:print("%s --(%s)--> " % (head.LEMMA, head.DEPREL))if __name__ == "__main__":demo_dependency_parser()""" 只打印第一个结果
虽然 --(状中结构)--> 算
提取 --(定中关系)--> 结果
出来 --(动补结构)--> 提取
的 --(右附加关系)--> 提取
结果 --(主谓关系)--> 算
也 --(状中结构)--> 算
算 --(核心关系)--> ##核心##
合理 --(动宾关系)--> 算
, --(标点符号)--> 算
但是 --(状中结构)--> 还是
还是 --(并列关系)--> 算
不够 --(状中结构)--> 准确
准确 --(动宾关系)--> 还是
, --(标点符号)--> 还是
我 --(主谓关系)--> 希望
希望 --(定中关系)--> 结果
的 --(右附加关系)--> 希望
结果 --(主谓关系)--> 是
是 --(并列关系)--> 还是
{ --(标点符号)--> 是
‘ --(标点符号)--> 思想
马克思 --(定中关系)--> 思想
的 --(右附加关系)--> 马克思
思想 --(动宾关系)--> 是
‘ --(标点符号)--> 思想
, --(标点符号)--> 思想
‘ --(标点符号)--> 理论
恩格斯 --(定中关系)--> 理论
的 --(右附加关系)--> 恩格斯
理论 --(并列关系)--> 思想
‘ --(标点符号)--> 理论
} --(标点符号)--> 思想
"""

NLP自然语言处理之句法分析相关推荐

  1. 自然语言处理NLP(8)——句法分析b:完全句法分析

    在上一部分中,我们简单介绍了完全句法分析的概念,并详细介绍了句法分析的基础:Chomsky形式文法(自然语言处理NLP(7)--句法分析a:Chomsky(乔姆斯基)形式文法). 在这一部分中,我们将 ...

  2. NLP入门学习3——句法分析(基于LTP4)

    NLP入门学习3--句法分析(基于LTP4) 0.简介 1.LTP介绍 2.安装 2.1 模块安装 2.2 模型下载 3.使用 3.1 分句 3.2 分词 3.3 词性标注 3.4 命名实体识别 3. ...

  3. 经验篇:朋友成功入职商汤自然语言处理算法工程师,整理了一份自然语言处理入门学习资料(NLP自然语言处理/学习路径)

    自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向.简单点说就是怎样让计算机能够理解人类的语言,以执行如机器翻译.文本分析.情 ...

  4. NLP自然语言常见问题及相关模型训练数据格式示例

    NLP自然语言常见问题及相关模型训练数据格式示例 目录 NLP自然语言常见问题及相关模型训练数据格式示例 NLP任务集 <

  5. nlp自然语言处理_自然语言处理(NLP):不要重新发明轮子

    nlp自然语言处理 介绍 (Introduction) Natural language processing (NLP) is an intimidating name for an intimid ...

  6. nlp自然语言处理_不要被NLP Research淹没

    nlp自然语言处理 自然语言处理 (Natural Language Processing) 到底是怎么回事? (What is going on?) NLP is the new Computer ...

  7. 【AI视野·今日NLP 自然语言处理论文速览 第二十八期】Wed, 1 Dec 2021

    AI视野·今日CS.NLP 自然语言处理论文速览 Wed, 1 Dec 2021 Totally 27 papers

  8. 【AI视野·今日NLP 自然语言处理论文速览 第二十七期】Thu, 4 Nov 2021

    AI视野·今日CS.NLP 自然语言处理论文速览 Thu, 4 Nov 2021 Totally 20 papers

  9. 【AI视野·今日NLP 自然语言处理论文速览 第二十六期】Wed, 3 Nov 2021

    AI视野·今日CS.NLP 自然语言处理论文速览 Wed, 3 Nov 2021 Totally 23 papers

  10. 【AI视野·今日NLP 自然语言处理论文速览 第二十五期】Fri, 1 Oct 2021

    AI视野·今日CS.NLP 自然语言处理论文速览 Fri, 1 Oct 2021 Totally 36 papers

最新文章

  1. ThinkPHP U方法
  2. ieee33节点系统图_【学术聚焦】考虑信息耦合的电气综合能源系统韧性优化方法...
  3. Mycat 月分片方法 - pursuer.chen - 博客园
  4. ASP.NET Core 实战:使用ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目
  5. centos 服务器装与python34源码安装
  6. linux内核时钟驱动,4.9版本的linux内核中实时时钟芯片pcf85263的驱动源码在哪里
  7. Xray使用的一些经验分享(xray+burp的使用)
  8. w3c html.css,W3C教程(6):W3C CSS 活动
  9. 常用网页元素命名规范参考
  10. jenkins, docker-composer
  11. 电商管理后台 API 接口文档
  12. 程序员请万分珍重你的第一份工作,否则后悔了概不负责
  13. JS显示和隐藏div
  14. 2019年CVTE实习心得
  15. 【转】PS学堂之一:展示一下自己做的圆形印章
  16. cla作用matlab,CLA(共轭亚油酸)的作用
  17. 11 款超赞的 MySQL 图形化工具,好用!
  18. 如何使用github(一)
  19. tar 分卷压缩和解压缩
  20. 考研数学:罗尔定理的推论

热门文章

  1. uni-app 小程序项目获取openid
  2. 可编程控制器的基本组成部分
  3. 基于selenium的python模拟登陆虎牙发送弹幕并截取主播头像
  4. 银行计算机储蓄系统程序流程图,银行储蓄系统流程图.doc
  5. 客户端性能测试工具-Wetest、cude PC
  6. bigdecimal如何做除法_bigdecimal类型除法问题
  7. 通过财务报表读懂美股
  8. SSL2812 2017年10月30日提高组T2 凤凰院凶真(dp,LCIS)
  9. 相关系数excel_excel函数利用CORREL函数FORECAST函数根据现有数据预测未来数据
  10. 详细解LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix