句法分析是自然语言处理(natural language processing, NLP)中的关键底层技术之一,其基本任务是确定句子的句法结构或者句子中词汇之间的依存关系。
  句法分析分为句法结构分析(syntactic structure parsing)和依存关系分析(dependency parsing)。以获取整个句子的句法结构或者完全短语结构为目的的句法分析,被称为成分结构分析(constituent structure parsing)或者短语结构分析(phrase structure parsing);另外一种是以获取局部成分为目的的句法分析,被称为依存分析(dependency parsing)。
  如以下取自WSJ语料库的句法结构树示例:

  以及取自哈工大LTP的依存句法分析实例:

  目前的句法分析已经从句法结构分析转向依存句法分析,一是因为通用数据集Treebank(Universal Dependencies treebanks)的发展,虽然该数据集的标注较为复杂,但是其标注结果可以用作多种任务(命名体识别或词性标注)且作为不同任务的评估数据,因而得到越来越多的应用,二是句法结构分析的语法集是由固定的语法集组成,较为固定和呆板;三是依存句法分析树标注简单且parser准确率高。

  本文将对学习中遇到的PCFGLexical PCFG及主流的依存句法分析方法—Transition-based Parsing(基于贪心决策动作拼装句法树)做一整理。
目录:

  • PCFG
  • Lexical PCFG基于词典的PCFG
  • Transition-based parsing基于贪心决策动作的拼接句法树
  • 参考资料

1.PCFG

  结合上下文无关文法(CFG)中最左派生规则(left-most derivations)和不同的rules概率,计算所有可能的树结构概率,取最大值对应的树作为该句子的句法分析结果。
  (The key idea in probabilistic context-free grammars(PCFG) is to extend our definition to give a probability over possible derivations.)
  对最左派生规则的每一步都添加概率,这样整棵句法分析树的概率就是所有这些“独立”的概率的乘积。

  如下例:

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

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

  2. 动态规划(dynamic programming)CKY算法
   π(i,j,X) π ( i , j , X ) \pi(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 ) = a r g m a x T G ( s ) \pi(1,n,S)=argmaxT_{G}(s),其中 TG(s) T G ( s ) T_{G}(s)是句子 s s s所有可能结构的集合。


结合上面π(i,j,X)" role="presentation" style="position: relative;">π(i,j,X)π(i,j,X)\pi(i,j,X)的定义:

下面举例说明:


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

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

2.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)的思想。
  

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

  首先介绍Arc-standard transition,动作体系的formal描述如下:

  整个转移过程中的三种动作:Shift, Left-Arc, Right-Arc。一个stack,Buffer(整个原始的句子)。
  在arc-standard system中,一次分析任务 c=(s,b,A) c = ( s , b , A ) c=(s,b,A)由一个栈s,一个队列b,一系列依存弧A构成。如果定义一个句子为单词构成的序列 w1...wn w 1 . . . w n w_{1}...w_{n}那么——

  栈s是用来储存系统已经处理过的句法子树的根节点的,初始状态下 S=[ROOT] S = [ R O O T ] S=[ROOT]。另外,定义从栈顶数起的第 i i i个元素为si" role="presentation" style="position: relative;">sisis_{i}。那么栈顶元素就是 s1 s 1 s_{1}, s1 s 1 s_{1}的下一个元素就是 s2 s 2 s_{2}:
  
  在一些中文论文中习惯使用焦点词这个表述,如果我们将栈横着放,亦即让先入栈的元素在左边,后入栈的元素在右边:
   
  则称 s2 s 2 s_{2}为左焦点词, s1 s 1 s_{1}为右焦点词。接下来的动作都是围绕着这两个焦点词展开的。
队列
  初始状态下队列就是整个句子,且顺序不变 b=[w1...wn] b = [ w 1 . . . w n ] b=[w_{1}...w_{n}],队列的出口在左边。
依存弧
  一条依存弧有两个信息:动作类型+依存关系名称I。l视依存句法语料库中使用了哪些依存关系label而定,在arc-standard系统中,一共有如下三种动作:
  LEFT-ARC(l):添加一条s1 -> s2的依存边,名称为l,并且将 s2 s 2 s_{2}从栈中删除。前提条件: |s|≥2 | s | ≥ 2 |s|\geq 2。亦即建立右焦点词依存于左焦点词的依存关系,例如:
  
  RIGHT-ARC(l):添加一条s2 -> s1的依存边,名称为l,并且将 s1 s 1 s_{1}从栈中删除。前提条件: |s|≥2 | s | ≥ 2 |s|\geq 2。亦即建立左焦点词依存于右焦点词的依存关系,例如:
  
  SHIFT:将b1出队,压入栈。亦即不建立依存关系,只转移句法分析的焦点,即新的左焦点词是原来的右焦点词,依此类推。例如:
  
  
  But How to check the next operation?(由于有三种动作,因此需要判断在下一步动作的顺序)。
  Answer: 每一步动作都是由机器学习分类器得到的,如果我们得到treebank的句法分析树结构,我们就能得到序列转移或动作的顺序,最终变成一个有监督学习问题。(Since we have a treebank with parses of sentences,We can use these sentences to see which sequences of operations would give the correct parse of a sentences.)
  只是在该算法提出之际,只是简单的用到了传统的机器学习方法。

  当然由于在整个监督学习中,我们只是标识了转移的方向,因此可以看做3分类问题,但是实际过程中,当我们从stack中移出元素时,我们通常标识的dependency关系可以达到40种之多,而这就是分类的标签数量。

  下面的一个重要的问题就是,How do we train the model,How do we choose the features?
  一般而言,依存句法分析的可用特征:
  1. Bilexical affinities(双词汇亲和)
  2. Dependency distance(依存距离,一般倾向于距离近的)
  3. Intervening material(标点符号两边的成分可能没有相互关系)
  4. Valency of heads (词语配价,对于不同词性依附的词的数量或者依附方向)
  
  传统的特征是栈和队列中的单词、词性或者依存标签等组合的特征,是一组很长的稀疏向量。

  相比于使用大量的categorial (类别)特征,导致特征的sparse,使用神经网络可以使得特征更加dense,使用distributed representation of words减少特征的稀疏性。
 

参考资料

  1. 宗成庆《统计自然语言处理》
  2. Michael Collins《Natural Language Processing》
  3. 斯坦福大学cs224n《Natural Language Processing and Deep Learning》
  4. http://www.hankcs.com/nlp/cs224n-dependency-parsing.html
  5. http://www.hankcs.com/nlp/parsing/neural-network-based-dependency-parser.html/2#h2-6
  6. 论文《A Fast and Accurate Dependency Parser using Neural Networks》

NLP底层技术之句法分析相关推荐

  1. NLP分析技术的三个层面

    NLP分析技术的三个层面 NLP分析技术大致分为三个层面:词法分析.句法分析和语义分析. 1)词法分析 词法分析包括分词.词性标注.命名实体识别和词义消歧.     分词和词性标注好理解.     命 ...

  2. 盘点Java框架常用的3大底层技术!

    作者:陌北有棵树,Java人,架构师社区合伙人! 本文所介绍的三个Java底层技术,有着逐渐递进的特点,Java注解中使用了JDK动态代理,而JDK动态代理中运用了Java反射. Java注解 当我们 ...

  3. 实现容器的底层技术--云平台技术栈06

    导读:之前发布了云平台技术栈(ps:点击可查看),本文主要说一下其中的容器技术! 为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术. cgroup 和 namespace 是最重要的两种技术 ...

  4. 底层技术决定人工智能“跑速” | 科技心语

    https://m.yicai.com/news/100179925.html 从DeepMind的人工智能围棋高手AlphaGo到基因测序高手AlphaFold,再到近期Google AI放出了一种 ...

  5. mysql引擎层存储层_MySQL存储底层技术:InnoDB底层原理解读

    原标题:MySQL存储底层技术:InnoDB底层原理解读 存储引擎 很多文章都是直接开始介绍有哪些存储引擎,并没有去介绍存储引擎本身.那么究竟什么是存储引擎?不知道大家有没有想过,MySQL是如何存储 ...

  6. 5G NGC — 关键技术 — 网络切片 — 底层技术支撑

    目录 文章目录 目录 网络切片的特性 网络切片的底层技术支撑 - NFV/SDN 网络切片的特性 隔离性:不同的网络切片之间互相隔离,一个切片的异常不会影响到其他的切片. 虚拟化:网络切片是在物理网络 ...

  7. Ironic 裸金属管理服务的底层技术支撑

    目录 文章目录 目录 底层技术支撑 DHCP NBP TFTP IPMI PXE & iPXE Cloud Init Linux 操作系统启动引导过程 底层技术支撑 PXE:预启动执行环境,支 ...

  8. 实现容器的底层技术 - 每天5分钟玩转 Docker 容器技术(30)

    2019独角兽企业重金招聘Python工程师标准>>> 为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术. cgroup 和 namespace 是最重要的两种技术.cgr ...

  9. Docker底层技术

    架构师之巅 1 容器 & Docker & 虚拟机 Container(容器)是一种轻量级的虚拟化技术,它不需要模拟硬件创建虚拟机.在Linux系统里面,使用到Linux kernel ...

最新文章

  1. VMWare 虚拟化 Ubuntu 64 (16.04)-- docker 无法链接 pull 镜像 ?(solved)
  2. python绘制神经网络(转载)
  3. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能...
  4. 计算机的iscsi配置,PC端的iSCSI参数设置方法
  5. C++ 重载函数调用运算符 | 再探lambda,函数对象,可调用对象
  6. Ubuntu 16.04使用sudo apt-get -f install解决依赖时的注意事项(重点)
  7. python控制台动画,如何使用Python 3.x在控制台应用程序中创建ASCII动画?
  8. sniffer辅助功能详解
  9. win10桌面管理文件收纳_处女座福音 整理Win10桌面图标新玩法
  10. bi 工具 市场排行榜_国产移动BI工具排名
  11. 高速公路自动驾驶测试场景库
  12. 凡诺CMS一处文件包含漏洞
  13. win10系统幻灯片播放卡顿
  14. 利用html/css设计一个简单个人主页
  15. VC :在对话框中绘图
  16. 可恶啊,被他用责任链给装到了
  17. 互联网企业安全高级指南读书笔记之基础安全措施
  18. java极光推送实例
  19. C语言面试题大汇总之华为面试题 Eddy整理
  20. wrl文件转换成obj文件

热门文章

  1. 计算机考神经科学,科学网—神经科学杂谈6:电脑和人脑的最大不同--计算和记忆 - 吴景鹏的博文...
  2. GNSS产品下载链接
  3. 除了Kaggle,这里还有一些含金量高的数据科学竞赛哦
  4. Android学习笔记(Android Studio)3-3(ProgressBar ProgressDialog)(加载进度条、转圈圈)UI组件之弹出组件
  5. Ubuntu常用命令及技巧 #小技巧 #常用终端命令 #远程管理 #SSH #FTP
  6. 【归档】证明V的三个子空间的并是V的子空间,当且仅当其中一个子空间包含另外两个子空间
  7. 解决下载的映像文件不是后缀名为.iso的问题
  8. SQLserver的增删改查操作
  9. 技能入户广州需要符合什么条件
  10. 什么是掩膜(Mask)?