概述
任务:句法分析的任务就是识别句子的句法结构。
句法分析分为句法结构分析和依存关系分析。
句法结构分析又可以称为短语结构分析;获取整个句子的句法结构为目的的句法分析称为完全句法分析;获得局部成分为目的的句法分析称为局部句法分析。
依存关系分析又称为依存结构分析。
短语结构分析
句法结构分析的定义是:对输入的单词序列判断其构成是否合乎给定的语法。
句法结构通常用树状数据结构表示,通常称为句法分析树。
完成这种分析过程的程序被称为句法结构分析器。
句法结构分析的任务有三个:
- 判断输入的字符串是否属于否种语言;
- 消除输入句子中词法和结构等方面的歧义;
- 分析输入句子的内部结构,如成分构成、上下文关系等;
句法结构分析也称为语言识别/句子识别。
通常任务1是已知的,所以我们只关注任务3.
短语句法分析的目的是:实现高正确率、高鲁棒性、高速度的自动句法分析过程;
困难是:自然语言中存在大量的复杂的结构歧义。
结构歧义就是在绪论当中所提到结构歧义问题,在英语中主要是由于介词导致,随着介词数量的增多,歧义数量呈指数级增长,可用开塔兰数进行计算。
句法结构分析的方法可以分为基于规则的分析方法和基于统计的分析方法。
基于规则的分析方法的基本思路就是由人工组织语法规则,如线图分析法和CYK都是典型的基于规则的分析方法。
C N = C 2 n n 1 n + 1 = ( 2 n ) ! ( n ! ) 2 ( n + 1 ) C_N = C_{2n}^n\frac{1}{n+1}=\frac{(2n)!}{(n!)^2(n+1)} CN=C2nnn+11=(n!)2(n+1)(2n)!
线图分析法*
三种策略:
- 自底向上;
- 从上到下;
- 将1和2结合。
自底向上的线图分析法(基于CFG)
准备阶段:
- 给定一组CFG规则: X P → α 1 . . . α n XP\to\alpha_1...\alpha_n XP→α1...αn;
- 给定一个句子的词性序列: S = W 1 W 2 . . . W n S=W_1W_2...W_n S=W1W2...Wn;
- 构造一个线图:一组结点和边的集合;(这有点像汉语分词方法中的最短路径法,也是不断的合并 )
- 建立一个二维表:记录每一条边的起始位置和终止位置。
操作部分:
查看任意相邻几条边上的词性串是否与某条重写的规则的右部相同(相当于右边的内容可以规约到左边):
- 如果相同,则增加一条新的跨越原来相应的边,新增加边上的标记为这条重写规则的头。
- 重复执行1,直到没有新的边产生。
点规则
所给规则的右端,有几个符号得到了匹配,也就是表示规则右部被规约的程度。可以理解为点的位置左边都是匹配到的规则的一部分,如果点的左边是规则右部的所有内容,那么说明规则右边已经被完全匹配。根据点规则,有以下两种边:
- 活性边:规则右部未被完全匹配;
- 非活性边:规则右部已经被完全匹配。
点规则就是一个记号,表示这个规则右侧匹配到哪里了。
如果匹配完了,那么规则下面这个边叫做非活性边,反之叫活性边。
点规则是以规则为对象的。
数据结构
线图(Chart):保存分析过程中已经建立的成分(包含终结符和非终结符)、位置(包括起点和终点),通常以 n × n n\times n n×n的数组表示,n为句子包含的词数。
代理表(Agenda),记录刚刚得到的重写规则代表的成分,这些重写规则的右端符号串与输入词性串中的一段完全匹配,通常以栈或线性队列表示。处于活动状态。
活动边集(ActiveArc):记录那些右端符号串与输入串的某一段相匹配,但还未完全匹配的重写规则,通常以数组或列表存储。
算法描述
从输入串的起始位置到最后位置,循环执行如下步骤:
- 如果待处理表(Agenda)为空,则找到下一个位置上的词,将该词对应的(所有)词类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 j−i为该词的长度。(说明以这个词的这个词性为起始位置,长度为 j − i j-i j−i这个个词段等待被处理。)
- 从待处理表中取出一个元素 X ( i , j ) X(i,j) X(i,j),根据数据结构的不同,取出的元素也会有差别。
- 对于每条规则 A → X γ A\to X\gamma A→Xγ,将 A → X ∘ γ ( i , j ) A\to X\circ \gamma(i,j) A→X∘γ(i,j)加入活动边集(ActiveArc),然后调用扩展弧子程序。
扩展弧子程序:
- 将X插入图表(Chart)的(i,j)位置中;
- 对于活动边集中每个位置为 ( k , j ) ( 0 ≤ k < i ) (k,j)(0\le k\lt i) (k,j)(0≤k<i)的点规则,如果该规则具有如下形式: A → α ∘ X β A\to \alpha\circ X\beta 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表中。
- 对于每个位置为 ( k , i ) (k,i) (k,i)的点规则: A → α ∘ X β A\to\alpha\circ X\beta A→α∘Xβ,则将 A → α ∘ X β ( k , j ) A\to\alpha\circ X\beta(k,j) A→α∘Xβ(k,j)加入到活动边集。
题型十六:使用线图分析法构建语法分析树
我对于算法的过程理解
- 给定一组CFG规则(参见第三章-上下文无关文法);
- 形态转换(参见第六章-一般形态转换方法);
- 词性标注(参见第六章-词性标注),得到词性序列;
- 构建原始线图;
- 添加Chart(保存分析中已经建立的成分,通过线图可视化);
- 添加Agenda(保存待扩展的词性);
- 添加ActiveArc(保存相关规则);
- 检查Agenda是否为空,若为空,则从线图中扩展 X ( i , j ) X(i,j) X(i,j)(Agenda中元素的来源为扩展弧程序扩展时所记录的元素);
- 从Agenda中取出元素(堆栈为FILO,队列为FIFO);
- 从规则集中匹配规则,如果有,加入ActiveArc(无新的活动边加入);
- 进入扩展弧程序,首先将Agenda中取出的元素 X ( i , j ) X(i,j) X(i,j)放到Chart(并绘制线图);
- 接着检查ActiveArc中是否有可以扩展的规则,如果没有,则退出,回到5。如果有,首先判断规约的结果是否为S,如果是的话,就把 S ( 1 , n + 1 ) S(1,n+1) S(1,n+1)加入到Chart,退出程序。如果不是的话,将 X ′ ( k , j ) X'(k,j) X′(k,j)加入到Agenda;
- 12步的前两个条件都通过后,来到第13,将扩展的规则写入到ActiveArc。
这个算法的核心,在于从规则集中匹配规则与从ActiveArc中扩展规则,一步步得到最终的初始符S。
需要注意的是:
- 手写的时候可以在最后一列加上ACT,说明完成第12步所作出的抉择(退出/扩展);
- 不要忘记始终把 ( i , j ) (i,j) (i,j)写在旁边;
- 一步一步扩展,不要跳步。
算法评价
优点:
- 算法简单,容易实现,开发周期短(这与FMM的优点是一样的);
缺点:
- 算法效率低;
- 需要高质量的规则;
- 难以区分歧义结构(这与最短路径,最大匹配是一样的);
CYK算法*
首先,需要对Chomsky文法进行范式化:
A
→
w
o
r
A
→
B
C
A\to w~~or~~A\to BC
A→w or A→BC
其中,
A
,
B
,
C
∈
V
N
A,B,C\in V_N
A,B,C∈VN,
w
∈
V
T
,
G
=
(
V
N
,
V
T
,
P
,
S
)
w\in V_T,G=(V_N,V_T,P,S)
w∈VT,G=(VN,VT,P,S)。
自下而上的分析方法。
核心是构造 ( n + 1 ) × ( n + 1 ) (n+1)\times(n+1) (n+1)×(n+1)识别矩阵,其中 s s s是输入句子长度。假设输入句子 x = w 1 w 2 . . . w n x=w_1w_2...w_n x=w1w2...wn, w i w_i wi为构成句子的单词, n = ∣ x ∣ n=|x| n=∣x∣。
识别矩阵的构成
- 方阵对角线以下全部为0;
- 主对角线以上的元素由文法G的非终结符构成;
- 主对角线上的元素由输入句子的终结符号(单词)构成。
识别句子构造步骤
- 首先构造主对角线,令 t 0 , 0 t_{0,0} t0,0,然后,从 t 1 , 1 t_{1,1} t1,1到 t n , n t_{n,n} tn,n在主对角线的位置上依次放入输入句子 x x x的单词 w i w_i wi。
- 构造主对角线以上仅靠主对角线的元素
t
i
,
i
+
1
t_{i,i+1}
ti,i+1,其中,
i
=
0
,
1
,
2
,
.
.
.
,
n
−
1
i=0,1,2,...,n-1
i=0,1,2,...,n−1。对于输入句子
x
=
w
1
w
2
.
.
.
w
n
x=w_1w_2...w_n
x=w1w2...wn,从
w
1
w_1
w1开始分析。(从左上到右下进行分析!)
- 按平行于主对角线的方向,一层一层地向上填写矩阵的各个元素 t i , j t_{i,j} ti,j,其中 i = 0 , 1 , 2 , . . . , n − d , j = d + i , d = 2 , 3 , . . . , n i=0,1,2,...,n-d,j=d+i,d=2,3,...,n i=0,1,2,...,n−d,j=d+i,d=2,3,...,n。如果存在一个正整数 k k k, i + 1 ≤ k ≤ j − 1 i+1\le k\le j-1 i+1≤k≤j−1,文法G的规则集中有产生式,文法G的规则集中有产生式 A → B C A\to BC A→BC,并且, B ∈ t i , k , C ∈ t k , j B\in t_{i,k},C\in t_{k,j} B∈ti,k,C∈tk,j,那么,将A写到矩阵 t i , j t_{i,j} ti,j位置上。
判断句子x由文法G所产生的充要条件是 t 0 , n = S n t_{0,n}=S_n t0,n=Sn。
题型十七:CYK算法构建句法结构
我对于算法的理解
- 将Chomsky文法规范化;
- 构建识别矩阵;
- 根据文法规则填写识别矩阵,对于终结符号,根据文法填写在单元格上方;对于非终结符号,如果左侧和下侧存在文法,那么进行规约;对于非终结符号,如果不存在,那么以副对角线,上半部分向右,下半部分向上。
CYK算法的评价
优点:
- 简单易行,执行效率高;
缺点:
- 必须对文法进行规范化处理;
- 无法区分歧义。
概率上下文无关文法(PCFG)*
这是基于规则和统计的句法结构分析方法。
PCFG的规则表示形式为
A
→
α
,
p
A\to\alpha,p
A→α,p,A为非终结符,p为A推导出
α
\alpha
α的概率,即
p
=
P
(
A
→
α
)
p=P(A\to\alpha)
p=P(A→α)。该概率分布必须满足如下条件:
∑
α
P
(
A
→
α
)
=
1
\sum_\alpha P(A\to\alpha)=1
α∑P(A→α)=1
也就是说,相同左部的产生式概率分布满足归一化条件。
计算分析树概率的基本假设
- 位置不变性:子树的概率与其管辖的词在整个句子中所处的位置无关;
- 上下文无关性:子树的概率不依赖于子树控制范围以外的单词;
- 祖先无关性:子树的概率不依赖于子树的祖先结点。
子树概率的计算
对于给定的句子S,两棵句法分析树的概率不等, P ( t 1 ) > P ( t 2 ) P(t_1)\gt P(t_2) P(t1)>P(t2),因此,可以得到结论:分析结果 t 1 t_1 t1正确的可能性大于 t 2 t_2 t2。
基于PCFG的句法分析实例
统计句法分析器实现的一般方法
实例
PCFG的评价
优点:
- 可利用概率减少过程的搜索过程;
- 可利用概率对概率较小的子树剪枝,加快分析效率;
- 可以定量比较两个语法的性能。
弱点:
分析树的概率计算条件非常苛刻,甚至不合理。
短语结构分析方法评估
内部评价
对评测方法本身(评估方法)的评测,用于指导语法分析系统及其语法的开发过程。主要指标有:
- 语法覆盖性;
- 平均分析基数;
- 结构一致性;
- 排序一致性。
对比评测
用于对比不同系统之间的性能差别,主要评测指标和方法由:
- 树的相似性;
- 模型的熵;
- 语法兴趣评估小组。
句法分析器性能评测
前面是对于语法的评测,用这个语法怎么去分析语法,就是分析器的任务。
评价指标是PARSEVAL,三个基本指标是:
- Precision:句法分析结果中,正确的短语个数所占的比例。即分析结果中与标准分析树中的短语相匹配的个数占所有短语个数的比例。
- Recall:句法分析结果中,正确的短语个数占标准分析树中全部短语个数的比例。
- F-measure。
题型十八:评估句法分析器性能
所谓的短语指的是除了叶子节点和其直接父节点(该父节点只有一个孩子)以外的其余节点,表示方法沿用了线图分析法中的表达。
依存句法分析
用词与词之间的依存关系来描述语言结构的框架被称为依存语法,又称为从属关系语法。
在依存语法理论中,依存指的是词与词之间支配与被支配的关系,这种关系是不对等的,而且是有方向的。处于支配地位的成分称为支配者,处于被支配地位的成分称为从属者。
表示方式
有向图
依存树
四大公理*
- 一个句子只有一个独立成分;
- 句子的其他成分都从属于某一成分;
- 任何一个成分都不能依存于两个或多个成分;
- 如果A直接从属于B,而C在句子中位于A、B之间,那么C或者从属于A,或者从属于B,或者从属于A、B之间的某一部分。
上述四条公理相当于依存图/依存树的形式约束为:
- 单一父节点;
- 连通;
- 无环;
- 可投射;
由此来保证依存分析结果是一棵有根树。
优势*
- 简单,直接按照词语之间的依存关系工作,是天然词汇化的;
- 不过多强调句子中的固定词序,对自由语序的语言分析更有优势;
- 受深层语义结构驱动,词汇的依存本质是语义的;
- 形式化程度较短语结构语法浅,对语法结构的表示更为灵活。
分析方法*
依存语法分析的任务就是分析出句子所有词汇之间的依存关系。
建立一个依存语法分析器需要完成三个部分的工作:
- 依存句法结构描述;
- 分析算法设计与实现;
- 文法规则或参数学习。
依存句法分析器评价指标*
- 无标记依存正确率UA:所有词中找到其正确支配词的词所占百分比,没有找到支配词的词也算在内。
- 带标记依存正确率LA:所有词中找到其正确支配词并且依存关系类型也标注正确的词所占百分比,根节点也算在内。
- 依存正确率DA:所有非根节点词中找到其正确支配词的词所占百分比。
- 根正确率RA:有两种定义方式:1. 正确根节点的个数与句子个数的比值;2. 句子中找到正确根节点的句子所占百分比。对单根节点的语言来说,二者等价。
- 完全匹配率CM:所有句子中无标记依存结构完全正确的句子所占百分比。
题型十九:计算依存树评价指标
将每个词带上一个二元组。
短语结构与依存结构的关系
短语结构可以转换为依存结构*
- 定义中心词抽取规则,产生中心词表;
- 根据中心词表,为句法树每个节点选择中心子节点;
- 同一层内,将非中心子节点的中心词依存到中心子节点的中心词上,下一层的中心词依存到上一层的中心词,得到相应的依存结构(中心词应该是每一个叶节点)。