当前位置:   article > 正文

NLP自然语言处理之句法分析_nlp句法分析

nlp句法分析

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、句法分析代码实现  

  1. from pyhanlp import *
  2. def demo_dependency_parser():
  3. # 这个在hanlp中就是
  4. """
  5. public static CoNLLSentence parseDependency(String sentence)
  6. {
  7. return NeuralNetworkDependencyParser.compute(sentence);
  8. }
  9. """
  10. sentence = HanLP.parseDependency("虽然提取出来的结果也算合理,但是还是不够准确,我希望的结果是{‘马克思的思想‘,‘恩格斯的理论‘}")
  11. for word in sentence.iterator(): # 通过dir()可以查看sentence的方法
  12. print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA))
  13. print()
  14. # 也可以直接拿到数组,任意顺序或逆序遍历
  15. word_array = sentence.getWordArray()
  16. for word in word_array:
  17. print("%s --(%s)--> %s" % (word.LEMMA, word.DEPREL, word.HEAD.LEMMA))
  18. print()
  19. # 还可以直接遍历子树,从某棵子树的某个节点一路遍历到虚根
  20. CoNLLWord = JClass("com.hankcs.hanlp.corpus.dependency.CoNll.CoNLLWord")
  21. head = word_array[12]
  22. while head.HEAD:
  23. head = head.HEAD
  24. if (head == CoNLLWord.ROOT):
  25. print(head.LEMMA)
  26. else:
  27. print("%s --(%s)--> " % (head.LEMMA, head.DEPREL))
  28. if __name__ == "__main__":
  29. demo_dependency_parser()
  30. """ 只打印第一个结果
  31. 虽然 --(状中结构)--> 算
  32. 提取 --(定中关系)--> 结果
  33. 出来 --(动补结构)--> 提取
  34. 的 --(右附加关系)--> 提取
  35. 结果 --(主谓关系)--> 算
  36. 也 --(状中结构)--> 算
  37. 算 --(核心关系)--> ##核心##
  38. 合理 --(动宾关系)--> 算
  39. , --(标点符号)--> 算
  40. 但是 --(状中结构)--> 还是
  41. 还是 --(并列关系)--> 算
  42. 不够 --(状中结构)--> 准确
  43. 准确 --(动宾关系)--> 还是
  44. , --(标点符号)--> 还是
  45. 我 --(主谓关系)--> 希望
  46. 希望 --(定中关系)--> 结果
  47. 的 --(右附加关系)--> 希望
  48. 结果 --(主谓关系)--> 是
  49. 是 --(并列关系)--> 还是
  50. { --(标点符号)--> 是
  51. ‘ --(标点符号)--> 思想
  52. 马克思 --(定中关系)--> 思想
  53. 的 --(右附加关系)--> 马克思
  54. 思想 --(动宾关系)--> 是
  55. ‘ --(标点符号)--> 思想
  56. , --(标点符号)--> 思想
  57. ‘ --(标点符号)--> 理论
  58. 恩格斯 --(定中关系)--> 理论
  59. 的 --(右附加关系)--> 恩格斯
  60. 理论 --(并列关系)--> 思想
  61. ‘ --(标点符号)--> 理论
  62. } --(标点符号)--> 思想
  63. """

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/653930
推荐阅读
相关标签
  

闽ICP备14008679号