cyk,CYK算法详解_Donny-You的博客-

最后更新 :2022-11-19 06:02:37

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

Context Free Grammar 和 Parsing 在编译技术和自然语言处理中都有用到,我们这里介绍的内容主要基于后者,因此所举之例子也是自然语言处理中的例子。

1、乔姆斯基范式(CNF,Chomsky Normal Form)

我们首先来谈谈CNF的话题。通常把一门语言定义成一些由单词组成的词串(也就是句子)构成的集合。所以如果问两种语法(或文法)是否等价,其实就是要考察它们能否生成完全一样的词串集合。事实上,两个完全不同的CFG是不可能生成相同语言的。

而谈到两种语法“等价”,我们又可以定义弱等价和强等价两种类型的等价:

  • 如果两种语法能够生成相同的词串集合,且为每个句子都赋与相同的短语结构(phrase structure),也就是说仅允许对non-terminal symbols进行重命名,那么它们就是强等价的。
  • 如果两种语法能够生成相同的词串集合,但不会为每个句子都赋与相同的短语结构,那么它们就是弱等价的。

有时候,让各个语法都拥有一个标准的形式非常有用,也即是语法的规则部分都采用一种特殊的形式。CNF就是这样一种标准形式。如果 一个 CFG 是 ε-free (?ε 表示空串),而且它的rules只有如下两种形式之一:

  • A→B C?
  • A→a

那个这个CFG就是采用CNF形式的,可见CNF语法都是二分叉的。任何语法都可以转化成一个弱等价的CNF形式,具体方法如下:

2、CYK 算法

CYK处理的CFG必须是CNF形式的。所以算法首先要把非CNF形式的CFG转化到CNF形式,方法前面刚刚讲过。

接下来就是要填写一个 parse table,如果我们要处理的句子中有n个词,那么这个parse table就是一个(n+1)×(n+1)的矩阵的上三角部分。如下图所示。

注意,我们前面说过CYK是一种自底向上的算法,这里的自底向上意思是从单词开始,朝向 S(句子)工作。所以在上图我们填写的大方向是从左到右填写的。S 位于表的右上角,表示成功。算法描述如下:

其中,i 和 j 指示的内容如下图所示:

到此为止,我们得到的是一个recognizer, 还不是一个 parser,最后我们要根据已经得到的表返回所有可能的语法分析情况,就是大功告成了。

- END -

留学女儿(培养脑瘫女儿出国留学,骑摩托环游欧洲,这个女人,太飒了)

培养脑瘫女儿出国留学骑摩托周游欧洲这个女人太飒了在他人嘴上活终身在我这就是个笑话当...

上海莱士:12月5日获融资买入2143.96万元,占当日流入资金比例19.1%

同花顺(300033)数据中心显示,上海莱士(002252)12月5日获融资买入2143.96万元,占当日买入金额的19.1%,当前融资余额10.17亿元,占流通市值的3.64%,超过历史50%分位水平。 融资走势表日期融资变动融资余额12月5日-645.73万10.17亿...