自然语言处理中的Earley算法

来源:互联网 发布:软件美化大师win7 编辑:程序博客网 时间:2024/05/29 03:19

前面我们已经讲过在对CFG进行语法解析(Parsing)时,有两种主要策略,即自下向上和自上向下两种。其中自下向上的代表算法就是CKY算法,本文将介绍另外一种采用自上向下策略设计的著名算法——Earley算法。与CKY算法类似,Earley算法也是基于动态规划思想设计的,但不同的是,Earley算法并不需要进行CNF转化。


一、状态规则


Earley算法中一个基本的概念就是状态(state)。总的来说,一个状态由3部分组成:

  • 上下文无关文法规则。
  • 圆点 “·”,(圆点被用在状态语法规则的右侧,它告诉我们语法识别工作执行的进展情况,圆点左边的部分是已分析的,右边是待分析的)。
  • 状态的起止位置 [i,j]:整数 i 表示状态起点(已分析子串的起点), j 表示状态终点(已分析子串的终点),i ≤ j。

例如:S → NP · VP [0, 4]。通常点规则有三种情况:

  • 点在最右端,即 A → C ·浮点处于某个语法规则的最后,这表示为“完成状态”。
    否则,就为“未完成状态”,这包含两种情况:
  • A → C · B,此时,浮点处于某个non-terminal B之前。
  • A → C · b,此时,浮点处于某个terminal b之前

二、基本操作(operations)

与上面的点规则的三种情况相对应的有三种操作:
1. 预测(Predicator):如果圆点右方是一个非终结符,那么以该非终结符为左部的规则都有匹配的希望,也就是说分析器可以预测这些规则都可以建立相应的项目。
2. 扫描(Scanner):如果圆点右方是一个终结符,就将圆点向右方扫描一个字符间隔,把匹配完的字符移到左方。
3. 完成(Completer):如果圆点右方没有符号(即圆点已经在状态的结束位置),那么表示当前状态所做的预测已经实现
因而可以将当前状态 Si 与已有的包含当前状态的状态 Sj 进行归约合并,从而扩大 Sj 覆盖的子串范围。

算子的形式定义



三、算法描述



四、一个例子


假设设有CFG如下:

S → NP VP
NP → DT NN
VP → VBD NP
DT → the
NN → rat
NN → cheese
VBD → ate


下面以 the rat ate the cheese 为输入来演示一下Earley算法。


S →  NP VP [0,0]           (Predictor):初始状态                   -(0)

NP → DT NN [0,0]        (Predictor):由初始状态 (0) 得到  -(1)


DT the [0,1]                (Scanner)   :由 (1) 得到                  -(2)

NP → DT NN [0,1]          (Competer):由 (1) 和 (2) 归并得到 -(3)


NN → rat [1,2]                (Scanner)   :由 (3) 得到                  -(4)

NP → DT NN [0,2]          (Competer):由 (3) 和 (4) 归并得到 -(5)

S → NP VP [0,2]             (Competer):由 (0) 和 (5) 归并得到 -(6)

VP → VBD NP [2,2]        (Predictor):由 (6) 得到                 -(7)

VBD → ate [2,3]              (Scanner)   :由 (7) 得到                  -(8)

VP → VBD NP [2,3]        (Competer):由 (7) 和 (8) 归并得到 -(9)

NP → DT NN [3,3]        (Predictor):由 (9) 得到                 -(10)


DT the [3,4]                (Scanner)   :由 (10) 得到                   -(11)

NP → DT NN [3,4]          (Competer):由 (10) 和 (1) 归并得到  -(12)


NN → cheese [4,5]         (Scanner)   :由 (12) 得到                    -(13)

NP → DT NN [3,5]          (Competer):由 (12) 和 (13) 归并得到 -(14)

VP VBD NP ● [2,5]       (Competer):由 (9) 和 (14) 归并得到    -(15)   

S → NP VP [0,5]             (Competer):由 (6) 和 (15) 归并得到   -(16)


原创粉丝点击