句法分析——线图分析法

线图分析法

  线图分析法(chart parsing)是基于CFG规则的分析方法,首先需要了解一下什么是形式语言:形式语言

1 三种策略

  线图分析法在具体的实现上有三种不同的策略,分别为:

  • 自底向上(Bottom-up)
  • 从上到下(Top-down)
  • 从上到下和从下到上结合

对于自然语言来说,采用的更多的是自底向上策略,即给定一个句子,从句子开始推算其可能的结构,最后得到一棵树。而从上到下则是根据一个结构推算句子。

2 自底向上的线图分析法

  算法的内容如下:

  • 给定一组CFG规则: X P → α 1 ⋯ α n ( n ≥ 1 ) XP\rightarrow \alpha_1\cdots \alpha_n (n\ge1) XPα1αn(n1),这其中的 α \alpha α既可以是非终结符又可以是终结符;
  • 给定一个句子的词性序列 S = W 1 W 2 ⋯ W n S=W_1W_2\cdots W_n S=W1W2Wn,注意是词性序列,这意味着要做词性标注;
  • 构造一个线图:线图是一组节点和边的集合;
  • 建立一个二维表:记录每一条边的起始位置和终止位置。

  然后执行操作:查看任意相邻几条边上的词性串是否与某条重写规则的右部相同,如果相同,则增加一条新的边跨越原来相应的边,新增加边上的标记为这条重写规则的头(左部)。重复这个过程,直到没有新的边产生。

3 数据结构

  算法需要的数据结构如下:

  • 线图(Chart):保存分析过程中已经建立的成分(包括终结符和非终结符)、位置(包括起点和终点)。通常以 n ∗ n n*n nn的数组表示( n n n为句子包含的词数)。
  • 待处理表(Agenda):记录刚刚得到的一些重写规则所代表的成分,这些重写规则的右端符号串与输入词性串(或短语标志串)中的一段完全匹配,通常以栈或线性队列表示。
  • 活动边集(ActiveArc):记录那些右端符号串与输入串的某一段相匹配,但还未完全匹配的重写规则,通常以数组或列表存储。

4 点规则

  点规则用于表示规则右部被归约(reduce)的程度。可以理解为点的位置左边都是匹配到的规则的一部分,如果点的左边是规则右部的所有内容,那么就说明规则右边已经被完全匹配。根据点规则,可有以下两种边:

  • 活性边(活动弧):规则右部未被完全匹配
  • 非活性边(非活动弧,或完成弧):规则右部已被完全匹配

5 算法描述

  从输入串的起始位置到最后位置,循环执行如下步骤:

  1. 如果待处理表(Agenda)为空,则找到下一个位置上的词,将该词对应的(所有)词类 X X X附以 ( i , j ) (i,j) (i,j)作为元素放到待处理表中,即 X ( i , j ) X(i,j) X(i,j)。其中, i , j i,j i,j分别是该词的起始位置和终止位置, j > i j\gt i j>i j − i j-i ji为该词的长度。
  2. 从Agenda中取出一个元素 X ( i , j ) X(i,j) X(i,j)
  3. 对于每条规则 A → X γ A\rightarrow X\gamma AXγ,将 A → X ∘ γ ( i , j ) A\rightarrow X\circ \gamma (i,j) AXγ(i,j)加入活动边集ActiveArc中,然后调用扩展弧子程序
    扩展弧子程序:
    (a)将 X X X插入图表(Chart)的 ( i , j ) (i,j) (i,j)位置中。
    (b)对于活动边集(ActiveArc)中每个位置为 ( k , i ) ( 1 ≤ k < i ) (k,i)(1\le k\lt i) (k,i)(1k<i)的点规则,如果该规则具有如下形式: A → α ∘ X A\rightarrow \alpha \circ X AαX,如果 A = S A=S A=S,则把 S ( 1 , n + 1 ) S(1,n+1) S(1,n+1)加入到Chart中,并给出一个完整的分析结果;否则,则将 A ( k , j ) A(k,j) A(k,j)加入到Agenda表中。
    (c)对于每个位置为 ( k , i ) (k,i) (k,i)的点规则: A → α ∘ X β A\rightarrow \alpha \circ X\beta AαXβ,则将 A → α X ∘ β A\rightarrow \alpha X\circ \beta AαXβ加入到活动边集中。

6 示例

  现有规则:
S → N P     V P V P → V     N P N P → D e t     N D e t → t h e N → b o y V → h i t N → d o g S\rightarrow NP\ \ \ VP\\ VP\rightarrow V\ \ \ NP\\ NP\rightarrow Det\ \ \ N\\ Det\rightarrow the \\ N\rightarrow boy \\ V\rightarrow hit \\ N\rightarrow dog SNP   VPVPV   NPNPDet   NDettheNboyVhitNdog
句子为 t h e   b o y   h i t s   t h e   d o g the\ boy\ hits\ the\ dog the boy hits the dog
  首先进行词的形态分析,这里将 h i t s hits hits还原为 h i t hit hit,然后根据规则进行词性标注得到 1 D e t 2 N 3 V 4 D e t 5 N 6 _1Det_2N_3V_4Det_5N_6 1Det2N3V4Det5N6,根据算法之后每一次循环的步骤如下:

  1. A g e n d a Agenda Agenda初始内容为空加入第一个词 D e t ( 1 , 2 ) Det(1,2) Det(1,2),然后取出 D e t ( 1 , 2 ) Det(1,2) Det(1,2),将 N P → D e t ∘ N ( 1 , 2 ) NP\rightarrow Det\circ N(1,2) NPDetN(1,2)加入 A c t i v e A r c ActiveArc ActiveArc中,将 D e t ( 1 , 2 ) Det(1,2) Det(1,2)插入 C h a r t Chart Chart中。此时各个数据结构的内容如下:
    A g e n d a : { } A c t i v e A r c : { N P → D e t ∘ N ( 1 , 2 ) } C h a r t : { ( D e t , 1 , 2 ) } Agenda: \{\} \\ ActiveArc:\{NP\rightarrow Det\circ N(1,2)\} \\ Chart:\{(Det,1,2)\} Agenda:{}ActiveArc:{NPDetN(1,2)}Chart:{(Det,1,2)}
  2. A g e n d a Agenda Agenda为空,加入第二个词 N ( 2 , 3 ) N(2,3) N(2,3);取出 N ( 2 , 3 ) N(2,3) N(2,3);并没有满足 A → N γ A\rightarrow N\gamma ANγ的规则;将 N ( 2 , 3 ) N(2,3) N(2,3)插入 C h a r t Chart Chart中, A c t i v e A r c ActiveArc ActiveArc N P → D e t ∘ N ( 1 , 2 ) NP\rightarrow Det\circ N(1,2) NPDetN(1,2)满足条件(b),于是将 N P ( 1 , 3 ) NP(1,3) NP(1,3)加入 A g e n d a Agenda Agenda。此时各个数据结构的内容如下:
    A g e n d a : { N P ( 1 , 3 ) } A c t i v e A r c : { } C h a r t : { ( D e t , 1 , 2 ) , ( N , 2 , 3 ) } Agenda: \{NP(1,3)\} \\ ActiveArc:\{\} \\ Chart:\{(Det,1,2),(N,2,3)\} Agenda:{NP(1,3)}ActiveArc:{}Chart:{(Det,1,2),(N,2,3)}
  3. 取出 N P ( 1 , 3 ) NP(1,3) NP(1,3);将 S → N P ∘ V P ( 1 , 3 ) S\rightarrow NP\circ VP(1,3) SNPVP(1,3)加入 A c t i v e A r c ActiveArc ActiveArc;将 N P ( 1 , 3 ) NP(1,3) NP(1,3)插入 C h a r t Chart Chart。此时各个数据结构的内容如下:
    A g e n d a : { } A c t i v e A r c : { S → N P ∘ V P ( 1 , 3 ) } C h a r t : { ( D e t , 1 , 2 ) , ( N , 2 , 3 ) , ( N P , 1 , 3 ) } Agenda: \{\} \\ ActiveArc:\{S\rightarrow NP\circ VP(1,3)\} \\ Chart:\{(Det,1,2),(N,2,3),(NP,1,3)\} Agenda:{}ActiveArc:{SNPVP(1,3)}Chart:{(Det,1,2),(N,2,3),(NP,1,3)}
  4. A g e n d a Agenda Agenda为空,加入第三个词 V ( 3 , 4 ) V(3,4) V(3,4);将 V P → V ∘ N P ( 3 , 4 ) VP\rightarrow V\circ NP(3,4) VPVNP(3,4)加入 A c t i v e A r c ActiveArc ActiveArc;将 V ( 3 , 4 ) V(3,4) V(3,4)插入 C h a r t Chart Chart。此时各个数据结构的内容如下:
    A g e n d a : { } A c t i v e A r c : { S → N P ∘ V P ( 1 , 3 ) , V P → V ∘ N P ( 3 , 4 ) } C h a r t : { ( D e t , 1 , 2 ) , ( N , 2 , 3 ) , ( N P , 1 , 3 ) , ( V , 3 , 4 ) } Agenda: \{\} \\ ActiveArc:\{S\rightarrow NP\circ VP(1,3),VP\rightarrow V\circ NP(3,4)\} \\ Chart:\{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4)\} Agenda:{}ActiveArc:{SNPVP(1,3),VPVNP(3,4)}Chart:{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4)}
  5. A g e n d a Agenda Agenda为空,加入第四个词 D e t ( 4 , 5 ) Det(4,5) Det(4,5);将 N P → D e t ∘ N ( 4 , 5 ) NP\rightarrow Det\circ N(4,5) NPDetN(4,5)加入 A c t i v e A r c ActiveArc ActiveArc;将 D e t ( 4 , 5 ) Det(4,5) Det(4,5)插入 C h a r t Chart Chart中。此时各个数据结构的内容如下:
    A g e n d a : { } A c t i v e A r c : { S → N P ∘ V P ( 1 , 3 ) , V P → V ∘ N P ( 3 , 4 ) , N P → D e t ∘ N ( 4 , 5 ) } C h a r t : { ( D e t , 1 , 2 ) , ( N , 2 , 3 ) , ( N P , 1 , 3 ) , ( V , 3 , 4 ) , ( D e t , 4 , 5 ) } Agenda: \{\} \\ ActiveArc:\{S\rightarrow NP\circ VP(1,3),VP\rightarrow V\circ NP(3,4),NP\rightarrow Det\circ N(4,5)\} \\ Chart:\{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4),(Det,4,5)\} Agenda:{}ActiveArc:{SNPVP(1,3),VPVNP(3,4),NPDetN(4,5)}Chart:{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4),(Det,4,5)}
  6. A g e n d a Agenda Agenda为空,加入第五个词 N ( 5 , 6 ) N(5,6) N(5,6);将 N ( 5 , 6 ) N(5,6) N(5,6)插入 C h a r t Chart Chart中; A c t i v e A r c ActiveArc ActiveArc N P → D e t ∘ N ( 4 , 5 ) NP\rightarrow Det\circ N(4,5) NPDetN(4,5)满足条件(b),将 N P ( 4 , 6 ) NP(4,6) NP(4,6)加入 A g e n d a Agenda Agenda。此时各个数据结构的内容如下:
    A g e n d a : { N P ( 4 , 6 ) } A c t i v e A r c : { S → N P ∘ V P ( 1 , 3 ) , V P → V ∘ N P ( 3 , 4 ) } C h a r t : { ( D e t , 1 , 2 ) , ( N , 2 , 3 ) , ( N P , 1 , 3 ) , ( V , 3 , 4 ) , ( D e t , 4 , 5 ) , ( N , 5 , 6 ) } Agenda: \{NP(4,6)\} \\ ActiveArc:\{S\rightarrow NP\circ VP(1,3),VP\rightarrow V\circ NP(3,4)\} \\ Chart:\{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4),(Det,4,5),(N,5,6)\} Agenda:{NP(4,6)}ActiveArc:{SNPVP(1,3),VPVNP(3,4)}Chart:{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4),(Det,4,5),(N,5,6)}
  7. 取出 N P ( 4 , 6 ) NP(4,6) NP(4,6);将 N P ( 4 , 6 ) NP(4,6) NP(4,6)插入 C h a r t Chart Chart A c t i v e A r c ActiveArc ActiveArc V P → V ∘ N P ( 3 , 4 ) VP\rightarrow V\circ NP(3,4) VPVNP(3,4)满足条件(b),将 V P ( 3 , 6 ) VP(3,6) VP(3,6)加入 A g e n d a Agenda Agenda。此时各个数据结构的内容如下:
    A g e n d a : { V P ( 3 , 6 ) } A c t i v e A r c : { S → N P ∘ V P ( 1 , 3 ) } C h a r t : { ( D e t , 1 , 2 ) , ( N , 2 , 3 ) , ( N P , 1 , 3 ) , ( V , 3 , 4 ) , ( D e t , 4 , 5 ) , ( N , 5 , 6 ) , ( N P , 4 , 6 ) } Agenda: \{VP(3,6)\} \\ ActiveArc:\{S\rightarrow NP\circ VP(1,3)\} \\ Chart:\{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4),(Det,4,5),(N,5,6),(NP,4,6)\} Agenda:{VP(3,6)}ActiveArc:{SNPVP(1,3)}Chart:{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4),(Det,4,5),(N,5,6),(NP,4,6)}
  8. 取出 V P ( 3 , 6 ) VP(3,6) VP(3,6);将 V P ( 3 , 6 ) VP(3,6) VP(3,6)插入 C h a r t Chart Chart A c t i v e A r c ActiveArc ActiveArc S → N P ∘ V P ( 1 , 3 ) S\rightarrow NP\circ VP(1,3) SNPVP(1,3)满足条件(b),将 S ( 1 , 6 ) S(1,6) S(1,6)加入 C h a r t Chart Chart。此时各个数据结构的内容如下:
    A g e n d a : { } A c t i v e A r c : { } C h a r t : { ( D e t , 1 , 2 ) , ( N , 2 , 3 ) , ( N P , 1 , 3 ) , ( V , 3 , 4 ) , ( D e t , 4 , 5 ) , ( N , 5 , 6 ) , ( N P , 4 , 6 ) , ( V P , 3 , 6 ) , ( S , 1 , 6 ) } Agenda: \{\} \\ ActiveArc:\{\} \\ Chart:\{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4),(Det,4,5),(N,5,6),(NP,4,6),(VP,3,6),(S,1,6)\} Agenda:{}ActiveArc:{}Chart:{(Det,1,2),(N,2,3),(NP,1,3),(V,3,4),(Det,4,5),(N,5,6),(NP,4,6),(VP,3,6),(S,1,6)}
  9. 到此为止,算法便退出了,根据 C h a r t Chart Chart中的内容便可绘制出线图,然后将节点变成边,边变成节点就能够绘制成分析树。

7 算法评价

  优点:算法简单,容易实现,开发周期短
  弱点:算法效率低,时间复杂度为 K n 3 Kn^3 Kn3;需要高质量的规则,分析结果与规则质量密切相关;难以区分歧义结构。

参考资料:《统计自然语言处理》宗成庆

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值