一,上下文无关文法(CFGs)
1,基本定义
如下就是一个比较清楚的例子:
2,最左推导
例如:
一组最左推导正好可以很容易地表示成一棵句法解析树,即一组最左推导其实可以看成一棵句法解析树!
假设上面的句法解析树为
t
t
,则the dog laughs,即这棵树表示的单词序列。
如果至少存在一组推倒,它的yield(t)=s,那么这个单词序列
s∈∑∗
s
∈
∑
∗
就被称为是这个CFG定义的语言。
二,歧义
一个单词序列s实际上可以有超过一组的底层推导方式,在这种情况下,我们称这个单词序列在这个CFG下是有歧义的。
最常见的就是介词短语绑定歧义,如下所示:
歧义是自然语言问题中比较严重的问题了,为了解决解析歧义,所以出现了PCFGs!
三,概率上下文无关文法(PCFGs)
1,基本定义
那怎么解决解析歧义呢?这时我们就可以利用概率了!
一个单词序列s的最佳的解析树就是:
这就引入了以下三个问题:
- 模型定义问题:我们应该怎样定义函数p(t)?
- 模型训练问题:我们应该怎样从训练数据中学到模型p(t)的参数?
- 解析问题:给定一个单词序列s,我们应该怎样找到最有可能的解析树?
下面就会详细介绍这些问题如何解决!
2,PCFGs的定义
例如下面这个例子十分清楚:
这就解决了模型定义问题!
直观的理解,PCFGs做了一个假设即解析树是通过以下过程随机生成的:
3,通过语料库来训练出一个PCFGs
核心步骤如下:
这就解决了模型训练问题!
4,找到PCFGs中最佳的解析树
一个极其关键的问题就是给定一个单词序列s,我们怎样找到s的最佳解析树?即:
这需要用到动态规划算法CKY算法!
但使用CKY算法之前,必须先将一般的PCFGs转化为等价的CNF形式的PCFGs。
(1)CNF
CNF十分简单,即:
CNF形式的PCFGs如下:
(2)用CKY算法进行解析
详细流程如下:
主要就是:
- 规则的选择
- 分割点的选择
合理性体现在哪里呢?
One key observation is:
Second key observation is:
可用反证法证明。
5,概率计算问题
其实还有一类问题,就是概率计算问题:给定一个单词序列s,计算它在PCFGs下(即可以通过PCFGs解析)的概率。这需要用到内向算法和外向算法。这里主要介绍一下内向算法,因为它的形式和CKY算法十分相似。
详细流程如下:
它和CKY算法的唯一区别在于将CKY递推式中的max换为了 ∑ ∑ !