1 概述

句法分析是自然语言处理中的关键技术之一。其基本任务是确定句子的句法结构(syntatic structure)或句子中词汇之间的依存关系。形式语法理论的目的是试图用精确的数学模型(形式语言)来刻划自然语言。句法分析根据形式语法的不同可以分为基于短语结构语法的句法分析和基于依存关系语法的依存句法分析。本篇文章将介绍使用CYK(一种自底向上的动态规划算法)+PCFG(概率上下文无关文法)的基于短语结构语法的句法分析。

2 理论描述

2.1 CFG(上下文无关文法)

形式语法G = < V N V_N VN​, V T V_T VT​,R,S>

  • V N V_N VN​ 非终端语符集(辅助词汇的有限集合) ,如{S, NP, VP, ART, N, V}
  • V T V_T VT​ 终端语符集(基本词汇的有限集合) ,如{the, a, boy ,sees , cat, dirty}
  • R 一组由有限个重写规则组成的规则集,如{ VP→V NP, ART → the|a, …}
  • S 表示起始符

句子:由语法 G 0 G_0 G0​从起始符S可派生出来的终端语符列构成由 G 0 G_0 G0​生成的句子。

语言:所有由语法 G 0 G_0 G0​从起始符S可派生出来的终端语符列构成 G 0 G_0 G0​生成的语言。

2.2 PCFG(概率上下文无关文法)

PGFG在GFG的基础上引入了P,加上了每个规则的概率。

PCFG中定义一棵句法树的概率为所有用到的规则概率的乘积 ,一般来说,概率值大的更可能是正确的句法树 。

我们可以利用句子S的所有可能的句法分析树来统计句子的概率:

P ( S ) = ∑ t = 1 T P ( S , T ) P(S)=\sum_{t=1}^{T}P(S,T) P(S)=∑t=1T​P(S,T)

2.3 CNF(Chomsky Normal Form)

如果一个上下文无关文法的每个产生式的形式为:

A → BC或A → a,

即规则的右部或者是两个非终结符或者是一个终结符,则它是具有Chomsky范式的CFG。

任何CFG都可以转变成一个弱等价的 Chomsky范式语法。

2.4 CYK算法

给定一个句子s = w 1 w_1 w1​, w 2 w_2 w2​, …, w n w_n wn​, 和一个上下文无关文法PCFG,G=(T, N, S, R, P);

定义一个跨越单词 i到j的概率最大的语法成分π:

π ( i , j , X ) π (i , j , X) π(i,j,X) (i , j ∈ 1…n , X ∈N),

目标是找到一个属于 π [1 , n , S]的所有树中概率最大的那棵。

CYK算法用于PCFG下的句法分析:

  • 基本定义:for all i=1,…,n, X ∈N

    π ( i , i , X ) = q ( X → w i ) π(i , i , X) = q(X→wi) π(i,i,X)=q(X→wi) (if X → wi 没有出现在语法中,则定义q(X → wi )=0)

  • 递归定义:for all i=1,…,n, j=(i+1),…,n, X ∈N

    π ( i , j , X ) = m a x ( q ( X → Y Z ) × π ( i , k , Y ) × π ( k + 1 , j , Z ) ) π(i, j, X ) = max (q(X→YZ)×π(i, k, Y)×π(k +1, j, Z)) π(i,j,X)=max(q(X→YZ)×π(i,k,Y)×π(k+1,j,Z)) (i≤k≤j−1)

3 详例描述

给定以下PCFG,实现句子“fish people fish tanks”最可能的统计句法树。

第一步:构造4*4矩阵。

根据CYK算法,每格Cell[i, j]包含了跨越单词i+1, j+1的所有语法成分(实际计算中下标是从0开始的)。

以Cell[1, 3]为例,Cell[1, 3]格中的成分分别为:(1,1)和(2,3)组成,(1,2)和(3,3)组成,包含了people fish tanks所有语法成分。

第二步:处理叶子节点中的单词。

第三步:根据叶子节点中单词的词性递归地找一元匹配规则。

以 [ 0 ] [ 0 ] [0][0] [0][0]中NP → N 0.14为例,0.14 = 0.7(规则集中NP→N) * 0.2( [ 0 ] [ 0 ] [0][0] [0][0]中的N→fish)。

第四步:处理非叶子节点。

根据PCYK算法π(i, j, X ) =max (q(X→YZ) × π(i, k, Y) × π(k+1, j, Z) )。

例如 s c o r e [ 0 ] [ 1 ] = s c o r e [ 0 ] [ 0 ] × s c o r e [ 0 + 1 ] [ 1 ] score[0][1]=score[0][0]×score[0+1][1] score[0][1]=score[0][0]×score[0+1][1],我们可以从规则集中找所有能够满足 [ 0 ] [ 0 ] [0][0] [0][0]和 [ 1 ] [ 1 ] [1][1] [1][1]的规则(NP → NP NP/ VP → V NP/ S → NP VP),并再递归地找满足 [ 0 ] [ 1 ] [0][1] [0][1]的规则(S → VP)。

因为此时S→有两条规则,我们比较其大小,仅保留其对大概率的一条规则即可。

概率计算方法以 [ 0 ] [ 1 ] [0][1] [0][1]中的S → NP VP 0.00126为例,0.0126 = 0.9(规则集中的S → NP VP)* 0.14( [ 0 ] [ 0 ] [0][0] [0][0]中的NP → N 0.14) * 0.01( [ 1 ] [ 1 ] [1][1] [1][1]中的NP → N 0.14)。

[ 1 ] [ 2 ] [1][2] [1][2], [ 2 ] [ 3 ] [2][3] [2][3]同理。

第五步:处理再上一层非叶子节点。

根据PCYK算法 s c o r e [ 0 ] [ 2 ] = q ( X → Y Z ) × m a x ( s c o r e [ 0 ] [ 0 ] × s c o r e [ 0 + 1 ] [ 2 ] , s c o r e [ 0 ] [ 1 ] × s c o r e [ 1 + 1 ] [ 2 ] ) score[0][2] = q(X→YZ)×max(score[0][0]×score[0+1][2], score[0][1]×score[1+1][2]) score[0][2]=q(X→YZ)×max(score[0][0]×score[0+1][2],score[0][1]×score[1+1][2])。

我们知道,无论是 [ 0 ] [ 0 ] [0][0] [0][0]+ [ 1 ] [ 2 ] [1][2] [1][2]还是 [ 0 ] [ 1 ] [0][1] [0][1]+ [ 2 ] [ 2 ] [2][2] [2][2]都覆盖了前三个单词的路径,因此我们分别从 [ 0 ] [ 0 ] [0][0] [0][0]和 [ 1 ] [ 2 ] [1][2] [1][2], [ 0 ] [ 1 ] [0][1] [0][1]和 [ 2 ] [ 2 ] [2][2] [2][2]找对应的匹配规则。再对结果找到对应 [ 0 ] [ 2 ] [0][2] [0][2]的一元规则。

当同一个非终端语符有多条规则时,我们仅保留其最大项。

[ 1 ] [ 3 ] [1][3] [1][3]同理。

第六步:处理根节点。

根据PCYK算法我们分别从 [ 0 ] [ 0 ] [0][0] [0][0]+ [ 1 ] [ 3 ] [1][3] [1][3], [ 0 ] [ 1 ] [0][1] [0][1]+ [ 2 ] [ 3 ] [2][3] [2][3], [ 0 ] [ 2 ] [0][2] [0][2]+ [ 3 ] [ 3 ] [3][3] [3][3]找对应的匹配规则,再对结果找对应 [ 0 ] [ 3 ] [0][3] [0][3]的一元规则,这样便可覆盖率所有单词。

当同一个非终端语符有多条规则时,我们仅保留其最大项。

第七步:回溯。

从根节点的开始标志S出发,按照之前保留的路径找出概率最大句法树。

最后,PCFG生成的概率最大句法树结果如图:

4 总结

普通的回溯法(backtracking)在最坏的情况下需要指数时间才能解决这样的问题,而CYK算法只需要多项式时间就够了。CYK算法采用了动态规划的思想:

  • 有 ( n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)​) = O( n 2 n_2 n2​) 格子
  • 有 O( n n n) 个可能的分裂点
  • 总的时间复杂度为 O( n 3 n_3 n3​)

上述例子给出的PCFG并不是严格意义上的乔姆斯基范式,如果是CNF的话可以不用对本身格子里的语法再进行一元规则匹配,所以在实际应用中应先对CFG进行一次转换,采用乔姆斯基范式来进行CYK算法。

基于CYK+PCFG的短语结构句法分析相关推荐

  1. 自然语言处理(一)句法分析, 乔姆斯基范式CYK+PCFG的短语结构

    乔姆斯基范式:上下文无关文法CFL,没有空串,只有以下两个产生式 A->BC A->a 这就是乔姆斯基范式或者CNF(Chomsky Normal Form).一般随便的CFL(上下文无关 ...

  2. 基于URL特征的网站结构信息挖掘

    基于URL特征的网站结构信息挖掘 王晓飞11 (北京邮电大学模式识别实验室) 摘要:本章首先深入的研究了网站的结构和URL的特征,然后制定了三元组节点的URL层次树的构建规则,利用建立的URL层次树描 ...

  3. 数据结构(C++)——图:基于邻接矩阵实现的图结构

    抽象数据类型 操作接口:图支持的操作接口分为边和顶点两类 Graph模板类 typedef enum { UNDISCOVERED, DISCOVERED, VISITED } VStatus; // ...

  4. iMeta:哈佛刘洋彧等基于物种组合预测菌群结构的深度学习方法(全文翻译,PPT,中英视频)...

    通过深度学习从物种组合中预测微生物组成 Predicting microbiome compositions from species assemblages through deep learnin ...

  5. 基于数字光栅投影的结构光三维测量技术

    概述 欢迎访问 持续更新:https://cgabc.xyz/posts/fb344124/ 本文是在读了论文<基于数字光栅投影的结构光三维测量技术与系统研究>[1]之后做的学习总结,方便 ...

  6. 基于ANSYS Twin Builder连杆结构数字孪生体建模关键技术及应用

    作者 | 王永威 黄志新 一.引言 数字孪生体是现有或将有的物理实体对象的数字模型,通过实测.仿真和数据分析来实时感知.诊断.预测物理实体对象的状态,通过优化和指令来调控物理实体对象的行为,通过相关数 ...

  7. 基于韦伯特征的非结构化道路检测

    基于韦伯特征的非结构化道路检测 步骤: 1. 取滤波器kernal={1,1,1, 1,-8,1, 1,1,1}: 2. 遍历图像,获取当前点center和当前点八个方向点的像素p1,p2,p3,p4 ...

  8. 计算机市场结构类型分析ppt模板,短语结构类型分析.ppt

    短语结构类型分析 短语结构常见类型 并列短语 形容词+名词 如:美丽的花朵 伟大的人民 浩瀚的大海 数量词+名词 如: 一杯水 一位顾客 三斤水果 名词+名词 如:学校的图书馆 祖国大地 烟台的苹果 ...

  9. 短语结构文法(PSG)、上下文有关文法(CSG)、上下文无关文法(CFG)、右线性文法(RLG)的区别

    Part 1 短语结构文法(PSG).上下文有关文法(CSG).上下文无关文法(CFG).右线性文法(RLG)的区别 Part 2 概念 文法G=(V,T,P,S) G叫做0型文法(type 0 gr ...

最新文章

  1. Oracle Job定时任务的使用详解
  2. KVM — 开启嵌套虚拟化
  3. linux swftools java_linux安装openoffice与SWFtools工具
  4. 用MFC显示一张图片
  5. 2018 焦作站亚洲区域赛校内选拔赛题解
  6. 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
  7. 光子计算机玩游戏,用于光计算的光子计算机
  8. php可以控制视频的尺寸吗吗,控制视频像素尺寸这样做
  9. Vue.js刷新当前页面
  10. Python测试入门
  11. 计算机专业黑板报迎新,开学迎新黑板报_迎新学期黑板报高三
  12. Oracle函数登录验证,Oracle密码验证函数与Create Profile
  13. vscode中终端字体设置
  14. 深度学习中的优化算法之Adadelta
  15. Origin下载安装教程(亲测有用)
  16. 视频剪辑mp4parser
  17. 马云留给阿里的财富:4个应用场景落地+90个区块链专利
  18. 域名系统(Domain Name System,DNS)
  19. 服务器系统怎么用主板做RAID,超微主板怎么创建RAID磁盘阵列 服务器组建RAID0、RAID1图文教程...
  20. 方波与sinc函数之间的最全傅里叶变换关系_助记_有图有推导

热门文章

  1. 接口测试流程及用例设计
  2. Switch 硬件破解经验分享 - Atmosphere 大气层破解签名补丁
  3. 一张图认识Python(附基本语法总结)
  4. “超融合对战法”,带你杀出一条血路
  5. “梦之声”迎逆袭战:收视不错 打铁趁热
  6. c加加语言三体问题,既然三体问题无法精确计算,行星的运行是否也不能精确?...
  7. Libnet开发流程总结
  8. 无线AP容量及网络带宽计算方法
  9. ppt python 爬虫_python基础教程 PPT-python为什么叫爬虫
  10. 有没有html代码听力的软件吗,英语听力软件哪个好?2017英语听力软件排行榜