句法分析笔记

形式文法

语法解析中有两个主要的问题:
1、句子语法在计算机中的表达与储存方式。
2、语法解析算法。


在计算机科学中,形式语言是:某个字母表上,一些有限长字串的集合,而形式文法是描述这个集合的一种方法。形式文法之所以这样命名,是因为它与人类自然语言中的文法相似的缘故。


形式文法描述形式语言的基本想法是,从一个特殊的初始符号出发,不断的应用一些产生式规则,从而生成出一个字串的集合。产生式规则指定了某些符号组合如何被另外一些符号组合替换。

最主要的方法就是为每个句子构造一个树结构。举例如下,S表示句子;NP、VP、PP是名词、动词、介词短语(短语级别);N、V、P分别是名词、动词、介词。
这种上下文无关的语法可以很容易的推导出一个句子的语法结构,但是缺点是推导出的结构可能存在二义性。
目前的句法分析主要有两种方法:基于规则的方法和基于统计的方法。

概率上下文无关文法

(1)为规则增加概率的模型
(2)找出最可能的那颗树。
(3)一些假设条件:
位置不变性。一颗子树的概率并不依赖于词串中它所支配的词语所处位置。
上下文无关性。子树的概率与不被字数支配的词无关。
祖先无关性。 字树的概率和子树之外的祖先节点无关。

乔姆斯基范式

在计算机科学中,一个形式文法是Chomsky 范式的,当且仅当所有产生规则都有如下形式:[1]
A→BC或
A→ α 或
S→ ε
这里的A,B和C是非终结符,α 是终结符(表示常量值的符号),S是开始符号,而 ε 是空串。还有,B和C都不可以是开始符号。
所有的 Chomsky 范式的文法都是上下文无关,反过来,所有上下文无关文法都可以有效的变换成等价的 Chomsky 范式的文法。

CYK算法

CYK算法(英语:Cocke–Younger–Kasami algorithm,缩写为CYK algorithm)是由约翰·科克,Younger和嵩忠雄共同研究出来大约发表于1965年的一个算法,它是一个用来判定任意给定的字符串{\displaystyle ~w\in \Sigma ^{*}} 是否属于一个上下文无关文法的算法。普通的回溯法(backtracking)在最坏的情况下需要指数时间才能解决这样的问题,而CYK算法只需要多项式时间就够了({\displaystyle ~O(n^{3})} , n 为字符串 w 的长度)。CYK算法采用了动态规划的思想。
对于一个任意给定的上下文无关文法,都可以使用CYK算法来计算上述问题,但首先要将该文法转换成乔姆斯基范式。

两棵树的概率大小只取决于这两个规则的概率,与这个句子的词没有关系了。

延伸的CKY解析:

1、算法包含单项的、一元的,不会增加时间复杂度
2、空的可以被合并
使用fenceposts
不会增加复杂度,本质上像单项的
3、二值化是至关重要的
没有二值化,你不能够使用立方的时间解析句子和语法上的非终止符
二值化或许能明确解析是怎么工作的,但并不总是这样

语法树预测算法:

假设我们已经有一个PCFG的模型,包含N、Σ、R、S、p(x)等参数,并且语法树总数Chomsky语法格式。当输入一个句子x1, x2, … , xn时,我们要如何计算句子对应的语法树呢? 第一种方法是暴力遍历的方法,每个单词x可能有m = len(N)种取值,句子长度是n,每种情况至少存在n个规则,所以在时间复杂度O(m*n*n)的情况下,我们可以判断出所有可能的语法树并计算出最佳的那个。 第二种方法当然是动态规划,我们定义w[i, j, X]是第i个单词至第j个单词由标注X来表示的最大概率。直观来讲,例如xi, xi+1, … , xj,当X=PP时,子树可能是多种解释方式,如(P NP)或者(PP PP),但是w[i, j, PP]代表的是继续往上一层递归时,我们只选择当前概率最大的组合方式。特殊情况下,w[i, i, X] = p(X -> xi)。因此,动态规划的方程可以表示为w[i, j, X] = max (p(X -> Y Z) * w(i, s, Y) * w(s+1, j, Z))。关于动态规划方法,leetcode里有不少案例可以说明。

你可能感兴趣的:(nlp)