句法分析(syntactic parsing)的任务就是识别句子的句法结构(syntactic structure)。包含短语结构分析 (Phrase parsing)和依存句法分析 (Dependency parsing)
英语中的结构歧义随介词短语组合个数的增加而不断加深的,这个组合个数我们称之为开塔兰数(Catalan number,记作 C N C_N CN)。如果句子中存在这样 n n n ( n n n为自然数)个介词短语, C N C_N CN 可由下式获得:
C N = ( 2 n n ) 1 n + 1 = ( 2 n ) ! ( n ! ) 2 ( n + 1 ) C_N = \left(\begin{matrix}2n \\ n\end{matrix}\right)\frac{1}{n + 1} = \frac{(2n)!}{(n!)^2(n + 1)} CN=(2nn)n+11=(n!)2(n+1)(2n)!
基本方法和开源的句法分析器:
基于CFG规则的分析方法:
包括三种策略:自底向上、从上到下、从上到下和从下到上结合
给定一组CFG规则: X P → α 1 ⋯ α n , n ≥ 1 XP\rightarrow \alpha_1\cdots \alpha_n,n \geq 1 XP→α1⋯αn,n≥1,句子的词性序列 S = W 1 W 2 ⋯ W n S = W_1W_2\cdots W_n S=W1W2⋯Wn,构造一个线图,一组节点和边的集合,之后建立一个二维表,记录每一条边的起始位置和终止位置,执行操作:查看任意相邻几条边上的词性串是否与某条重写规则的右部相同,如果相同,则增加一条新的边跨越原来相应的边,新增加边上的标记为这条重写规则的头(左部)。重复这个过程,直到没有新的边产生。
点规则:用于表示规则右部被归约(reduce)的程度。活性边(活动弧):规则右部未被完全匹配,非活性边(非活动弧, 或完成弧):规则右部已被完全匹配
例如给规则集:
对应的分析结果:再分析之前完成了形态分析和词性标注
将上面的图的边变为节点,将节点变为边,得到一棵树:
算法描述:从输入串的起始位置到最后位置,循环执行如下步骤:
扩展弧子程序:
算法的时间复杂度分析
设 n n n为输入句子的长度, C C C 为上下文无关文法中的非终结符的数目, S S S 为点规则的状态数目(大于 C F G CFG CFG 规则的数目),显然 S > C S > C S>C。因为 Agenda 表中的元素形式为 X ( i , j ) X(i, j) X(i,j),因此, Agenda 表中最大的元素个数为: C n 2 Cn^2 Cn2。由于ActiveArc 中的元素形式为: A → α ∘ X ( i , j ) A\rightarrow\alpha\circ X(i,j) A→α∘X(i,j),所以ActiveArc 表中最大的元素数目为: S n 2 Sn^2 Sn2,Chart 表中的边的形式为: A ( i , j ) A(i, j) A(i,j),因此,Chart 表中最大的元素数目为: C n 2 Cn^2 Cn2。由于算法对于长度为 n 的输入句子要执行 n 次循环,因此,Chart 算法最大执行的操作次数为: O ( K n 3 ) O(Kn^3) O(Kn3)
优点:算法简单
弱点:算法效率低,需要高质量的规则,分析结果与规则质量密切相关;难以区分歧义结构。
Coke-Younger-Kasami (CYK) 算法
其中识别矩阵构成:方阵对角线以下全部为0,主对角线以上的元素由文法G的非终结符构成,主对角线上的元素由输入句子的终结符号(单词)构成,构造步骤如下:
以“他/P 喜欢/V 读/V 书/N”为例:
优点:简单易行
弱点:必须对文法进行范式化处理,无法区分歧义
形式: A → α , p A\rightarrow \alpha,p A→α,p
约束: ∑ α p ( A → α ) = 1 \sum_\alpha p(A\rightarrow\alpha) = 1 ∑αp(A→α)=1
计算分析树概率的基本假设
句法分析树的概率计算方法示例:
对于给定的句子 S S S ,两棵句法分析树的概率不等, P ( t 1 ) > P ( t 2 ) P(t_1) > P(t_2) P(t1)>P(t2),因此,可以得出结论:分析结果 t 1 t_1 t1正确的可能性大于 t 2 t_2 t2。
假设文法 G ( S ) G(S) G(S)的规则只有两种形式:
A → w , w ∈ V T A → B C , B , C ∈ V N A\rightarrow w,w\in V_T \\ A\rightarrow BC,B,C\in V_N A→w,w∈VTA→BC,B,C∈VN
可以通过范式化处理,使CFG 规则满足上述形式。这种假设的文法形式称为乔姆斯基范式(Chomsky normal form, CNF)。
解决第一个问题-快速地计算句子的句法树概率
基本思想:利用动态规划算法计算由非终结符 A 推导出的某个字串片段 w i w i + 1 ⋯ w j w_iw_{i + 1}\cdots w_j wiwi+1⋯wj的概率 α i j ( A ) \alpha_{ij}(A) αij(A),语句 W = w 1 w 2 ⋯ w n W = w_1w_2\cdots w_n W=w1w2⋯wn的概率即为文法 G ( S ) G(S) G(S)中 S S S推导出的字串的概率 α 1 n ( S ) \alpha_{1n}(S) α1n(S)
α i j ( A ) = p ( A ⇒ w i w i + 1 ⋯ w j ) \alpha_{ij}(A) = p(A\Rightarrow w_iw_{i + 1}\cdots w_j) αij(A)=p(A⇒wiwi+1⋯wj)
计算 α i j ( A ) \alpha_{ij}(A) αij(A)的递推公式:
α i i ( A ) = p ( A → w i ) α i j ( A ) = ∑ B , C ∈ V N ∑ i ≤ k ≤ j p ( A → B C ) α i k ( B ) α ( k + 1 ) j ( C ) \alpha_{ii}(A) = p(A\rightarrow w_i) \\ \alpha_{ij}(A) = \sum_{B,C\in V_N}\sum_{i\leq k\leq j}p(A\rightarrow BC)\alpha_{ik}(B)\alpha_{(k + 1)j}(C) αii(A)=p(A→wi)αij(A)=B,C∈VN∑i≤k≤j∑p(A→BC)αik(B)α(k+1)j(C)
内向算法描述:
输入:文法 G ( S ) G(S) G(S),语句 W = w 1 w 2 ⋯ w n W = w_1w_2\cdots w_n W=w1w2⋯wn
输出: p ( S ⇒ w 1 w 2 ⋯ w n ) p(S\Rightarrow w_1w_2\cdots w_n) p(S⇒w1w2⋯wn)
定义:外向变量 β i j ( A ) \beta_{ij}(A) βij(A)是文法初始符号 S S S推导出语句 W = w 1 w 2 ⋯ w n W = w_1w_2\cdots w_n W=w1w2⋯wn的过程中,到达扩展符号串 w 1 ⋯ w i − 1 A w j + 1 ⋯ w n w_1\cdots w_{i - 1}Aw_{j + 1}\cdots w_n w1⋯wi−1Awj+1⋯wn的概率 ( A = w i ⋯ w j ) (A = w_i\cdots w_j) (A=wi⋯wj)
β i j ( A ) = p ( S ⇒ w 1 ⋯ w i − 1 A w j + 1 ⋯ w n ) \beta_{ij}(A) = p(S\Rightarrow w_1\cdots w_{i - 1}Aw_{j + 1}\cdots w_n) βij(A)=p(S⇒w1⋯wi−1Awj+1⋯wn)
β i j ( A ) \beta_{ij}(A) βij(A)表示除了以 A A A为根节点的子树以外的概率,其递推公式:
β 1 n ( A ) = δ ( A , S ) β i j ( A ) = ∑ B , C ∑ k > j β i k ( B ) p ( B → A C ) α ( j + 1 ) k ( C ) + ∑ B , C ∑ k < i β k j ( B ) p ( B → C A ) α k ( i − 1 ( C ) \beta_{1n}(A) = \delta(A,S) \\ \beta_{ij}(A) = \sum_{B,C}\sum_{k \gt j}\beta_{ik}(B)p(B\rightarrow AC)\alpha_{(j + 1)k}(C) + \sum_{B,C}\sum_{k \lt i}\beta_{kj}(B)p(B\rightarrow CA)\alpha_{k(i - 1}(C) β1n(A)=δ(A,S)βij(A)=B,C∑k>j∑βik(B)p(B→AC)α(j+1)k(C)+B,C∑k<i∑βkj(B)p(B→CA)αk(i−1(C)
相应的示意图:
外向算法描述:
输入:PCFG G = ( S , N , T , P ) G = (S,N,T,P) G=(S,N,T,P),语句 W = w 1 w 2 ⋯ w n W = w_1w_2\cdots w_n W=w1w2⋯wn
输出: β i j ( A ) , A ∈ N , 1 ≤ i ≤ j ≤ n \beta_{ij}(A),A\in N,1\leq i\leq j\leq n βij(A),A∈N,1≤i≤j≤n
解决第二个问题-最佳分析结果搜索
Viterbi 变量 γ i j ( A ) \gamma_{ij}(A) γij(A)是由非终结符 A A A 推导出语句 W W W中子字串 w i w i + 1 ⋯ w j w_{i}w_{i + 1}\cdots w_j wiwi+1⋯wj的最大概率。变量 ψ i , j \psi_{i,j} ψi,j用于记忆字串 W = w 1 w 2 ⋯ w n W = w_1w_2\cdots w_n W=w1w2⋯wn的Viterbi 语法分析结果。
Viterbi 算法描述:
输入:文法 G ( S ) G(S) G(S),语句 W = w 1 w 2 ⋯ w n W = w_1w_2\cdots w_n W=w1w2⋯wn
输出: γ 1 n ( S ) \gamma_{1n}(S) γ1n(S)
解决第三个问题-参数估计
基本思路:如果有大量已标注语法结构的训练语料,则可直接通过计算每个语法规则的使用次数,用最大似然估计方法计算 PCFG 规则的概率参数,即:
p ^ ( N j → ζ ) = C ( N j → ζ ) ∑ γ C ( N j → γ ) \hat p(N^j\rightarrow \zeta) = \frac{C(N^j\rightarrow \zeta)}{\sum_\gamma C(N^j\rightarrow \gamma)} p^(Nj→ζ)=∑γC(Nj→γ)C(Nj→ζ)
多数情况下,没有可利用的标注语料,只好借助 EM (Expectation Maximization) 迭代算法估计PCFG的 概率参数。
初始时随机地给参数赋值,得到语法G0,依据 G0 和训练语料,得到语法规则使用次数的期望值,以期望次数运用于最大似然估计,得到语法参数新的估计值,由此得到新的语法 G1,由 G1 再次得到语法规则的使用次数的期望值,然后又可以重新估计语法参数。循环这个过程,语法参数将收敛于最大似然估计值。
例如给定CFG G G G和训练数据 W = w 1 w 2 ⋯ w n W = w_1w_2\cdots w_n W=w1w2⋯wn,语法规则 A → B C A\rightarrow BC A→BC使用次数的期望值为:
C o u n t ( A → B C ) = ∑ 1 ≤ i ≤ k ≤ j ≤ n p ( A i j , B i k , C ( k + 1 ) j ∣ w 1 ⋯ w n , G ) = 1 p ( w 1 ⋯ w n ∣ G ) ∑ 1 ≤ i ≤ k ≤ j ≤ n p ( A i j , B i k , C ( k + 1 ) j , w 1 ⋯ w n ∣ G ) = 1 p ( w 1 ⋯ w n ∣ G ) ∑ 1 ≤ i ≤ k ≤ j ≤ n β i j ( A ) p ( A → B C ) α i k ( B ) α ( k + 1 ) j ( C ) \begin{aligned} Count(A\rightarrow BC) &= \sum_{1\leq i\leq k\leq j\leq n}p(A_{ij},B_{ik},C_{(k + 1)j}|w_1\cdots w_n,G) \\ &= \frac{1}{p(w_1\cdots w_n|G)} \sum_{1\leq i\leq k\leq j\leq n}p(A_{ij},B_{ik},C_{(k + 1)j},w_1\cdots w_n|G) \\ &= \frac{1}{p(w_1\cdots w_n|G)} \sum_{1\leq i\leq k\leq j\leq n}\beta_{ij}(A)p(A\rightarrow BC)\alpha_{ik}(B)\alpha_{(k + 1)j}(C) \end{aligned} Count(A→BC)=1≤i≤k≤j≤n∑p(Aij,Bik,C(k+1)j∣w1⋯wn,G)=p(w1⋯wn∣G)11≤i≤k≤j≤n∑p(Aij,Bik,C(k+1)j,w1⋯wn∣G)=p(w1⋯wn∣G)11≤i≤k≤j≤n∑βij(A)p(A→BC)αik(B)α(k+1)j(C)
类似地,语法规则 A → a A\rightarrow a A→a 的使用次数的期望值为:
C o u n t ( A → a ) = ∑ 1 ≤ i ≤ n p ( A i i ∣ w 1 ⋯ w n , G ) = 1 p ( w 1 ⋯ w n ∣ G ) ∑ 1 ≤ i ≤ n p ( A i i , w 1 ⋯ w n ∣ G ) = 1 p ( w 1 ⋯ w n ∣ G ) ∑ 1 ≤ i ≤ n β i i ( A ) p ( A → a ) δ ( a , w i ) \begin{aligned} Count(A\rightarrow a) &= \sum_{1\leq i\leq n}p(A_{ii}|w_1\cdots w_n,G) \\ &= \frac{1}{p(w_1\cdots w_n|G)}\sum_{1\leq i\leq n}p(A_{ii},w_1\cdots w_n|G) \\ &= \frac{1}{p(w_1\cdots w_n|G)}\sum_{1\leq i\leq n}\beta{ii}(A)p(A\rightarrow a)\delta(a,w_i) \end{aligned} Count(A→a)=1≤i≤n∑p(Aii∣w1⋯wn,G)=p(w1⋯wn∣G)11≤i≤n∑p(Aii,w1⋯wn∣G)=p(w1⋯wn∣G)11≤i≤n∑βii(A)p(A→a)δ(a,wi)
G 的参数可由下面的公式重新估计:
p ^ ( A → μ ) = C o u n t ( A → μ ) ∑ μ C o u n t ( A → μ ) \hat p(A\rightarrow \mu) = \frac{Count(A\rightarrow \mu)}{\sum_{\mu}Count(A\rightarrow \mu)} p^(A→μ)=∑μCount(A→μ)Count(A→μ)
其中 μ \mu μ要么是终结符号,要么是两个非终结符号串,即 A → μ A\rightarrow \mu A→μ为乔姆斯基语法范式要求的两种形式。
内外向算法:
PCFG的优点:可利用概率减少分析过程的搜索空间;可利用概率对概率较小的子树剪枝,加快分析效率;可以定量地比较两个语法的性能。
弱点:分析树的概率计算条件非常苛刻,甚至不够合理。
内部评测 (intrinsic evaluation)-对评测方法本身的评测,用于指导句法分析系统及其语法的开发过程。主要指标有:
对比评测 (comparative evaluation ):用于对比不同系统之间的性能差别,主要评测指标和方法包括:
句法分析器性能评测:目前使用比较广泛的句法分析器评价指标是PARSEVAL测度,三个基本的评测指标:
分析树中除了词性标注符号以外的其他非终结符节点通常采用如下标记格式:XP-(起始位置:终止位置)。其中,XP为短语名称;(起始位置:终止位置)为该节点的跨越范围,起始位置指该节点所包含的子节点的起始位置,终止位置为该节点所包含的子节点的终止位置。在计算PARSEVAL指标时,通常需要计算分析结果与标准分析树之间括号匹配的数目或括号交叉的数目。
例如标准答案:S-(0:11), NP-(0:2), VP-(2:9), VP-(3:9), NP- (4:6), PP-(6:9), NP-(7:9), *NP-(9:10)
系统结果:S-(0:11), NP-(0:2), VP-(2:10), VP-(3:10), NP- (4:10), NP-(4:6), PP-(6:10), NP-(7:10)
只有加粗的短语和标准一样,所以:
P = 3 8 × 100 % = 37.5 % R = 3 8 × 100 % = 37.5 % P = \frac38\times 100\% = 37.5\% \\ R = \frac38\times 100\% = 37.5\% P=83×100%=37.5%R=83×100%=37.5%