自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)

1.先解释何为CFG及PCFG:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第1张图片

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第2张图片

一个栗子:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第3张图片

2.CKY算法(或称CYK算法)

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第4张图片

“在计算机科学领域,CYK算法(也称为Cocke–Younger–Kasami算法)是一种用来对 上下文无关文法(CFG,Context Free Grammar)进行语法分析(parsing)的算法。该算法最早由John Cocke, Daniel Younger and Tadao Kasami分别独立提出,其中John Cocke还是1987年度的图灵奖得主。CYK算法是基于动态规划思想设计的一种自底向上语法分析算法。”

CYK算法可以在O(n3)的时间内得出结果。

CKY算法:

CYK处理的CFG必须是CNF形式的。所以算法首先要把非CNF形式的CFG转化到(弱等价)CNF形式。CYK是一种自底向上的算法。

乔姆斯基范式:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第5张图片

乔姆斯基范式:CNF

或者,ABC都为非终结符,为终结符。

那个这个CFG就是采用CNF形式的,可见CNF语法都是二分叉的。任何语法都可以转化成一个弱等价的CNF形式,具体方法如下:(之后会有拓展版的,不只二元了,还有空的与一元的。

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第6张图片

 

方法:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第7张图片

 

                                                                CKY算法用于PCFG下的句法分析

实现句子fish people fish tanks的句法树分析,实现最可能的统计句法树。

基于概率的上下文无关语法(PCFG) 是一个五元组, 其定义为(T,  N,S,R,P). 可以看到, 这基本上与 CFG 类似, 只是多出来一个元素 p, 表示在语料中规则出现的概率. 使用p 可以定义一棵语法树出现的概率为树中所有规则出现概率之积. 这样, 当一个句子在可选的范围内有多棵可能的语法树时, 我们选择先验概率大的那棵树, 这样能最大程度避免解析错误。其中,

N代表非终结符集合

T代表终结符集合

S代表初始非终结符

R代表产生规则集

P 代表每个产生规则的统计概率

栗子:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第8张图片

拓展版:加入了一元。

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第9张图片

CKY:

动态规划:

具体算法(类似填表的方法):

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第10张图片

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第11张图片

贴一个:

维基百科的CYK算法用于CFG。

https://en.wikipedia.org/wiki/CYK_algorithm#/media/File:CYK_algorithm_animation_showing_every_step_of_a_sentence_parsing.gif

第一部分:

下载stanford-parser-full-2018-10-17.zip

解压:打开eclipse创建一个项目,导入在build path中引入stanford-parser-3.9.2-models.jar,stanford-parser.jar, slf4j-api.jar等相关库.

调参:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第12张图片

主要代码:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第13张图片

结果:

句法树:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第14张图片

GUI界面:

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第15张图片

相关教程连接:

http://www.cnblogs.com/Denise-hzf/p/6612574.html

第二部分:

Python3.5,pycharm.

动态规划PCFG+CKY程序:

链接:

http://f.dataguru.cn/thread-693052-1-1.html

自然语言处理(NLP)-统计句法分析(CKY算法用于PCFG下的句法分析)_第16张图片

 PCFG 的训练

  对于 PCFG 中的 CFG 部分, 一般是由领域相关的专家给出的, 例如英语专家规定英语的 CFG. 而PCFG 中的 p 是从语料中统计而来. 运用最大似然估计, 可以有: P(X -> Y) = count(X->Y)/count(X)

注意到, 规则中包括终端词与非终端词两种元素. 在一个适当规模的语料中, 我们可以认为所有的非终端词都会出现, 但是认为所有的终端词都会出现却是不现实的(想一下我们常听到的那个美国农民日常使用的英语单词只有数千个, 而所有的英语单词却有数万个的情况). 当语料中没有出现, 而在我们的测试样本中却出现了少见的单词时, PCFG 会对所有的语法树都给出概率为0的估计, 这对 PCFG 的模型是一个致命的问题.通常的补救措施是, 对语料中所有单词出现次数进行统计, 然后将出现频率少于 t 的所有单词都换成同一个 symbol. 在进行测试时, 先查找测试句子中的所有单词是否在句子中出现, 若没有出现, 则使用 symbol 代替. 通过这种方法, 可以避免 PCFG 模型给出概率为0 的估计, 同时也不会损失太多的信息.

你可能感兴趣的:(java,python,自然语言处理,NLP,统计句法分析,《自然语言处理》相关)