自然语言处理7——句法分析
文章目录
概念
句法分析是语言处理的瓶颈之一:大部分句子不符合语法结构,存在各种语法歧义;下游的任务离不开句法分析。
输入:句子 输出:合乎语法的句法结构
分类:
-
短语结构分析
-
完全句法分析:根据输入的句子,给出完整的句法分析树
-
浅层句法分析(局部句法分析):给出很浅层的句法分析树
输入的句子可能是比较随性的,构造的分析树就容易出错,规则不一定覆盖所有的语言现象,有些应用不需要一个完全句法分析树,只需要告诉哪些词可以作为一个组块
-
-
依存句法分析
难点:一个句子对应多种句法分析树;汉语的词类和句法成分不存在一一对应的关系
资源:宾州树库;清华中文树库等
句法分析器
输入:词序列 输出:句法分析树
本质:线性序列->非线性序列
句法分析树的理解:
- 给定 一个句子得到一个句法分析树,将词与词的关系、词的语法角色标识清楚
- 不知道某个词的语法角色,但是知道它属于什么短语
方法
语言文法:四元组: G = ( V N , V T , R , S ) G = (V_N,V_T,R,S) G=(VN,VT,R,S),描述的是什么语言现象能被什么语言现象所表示,如:句子能由NP+VP进行表示。
- V N V_N VN:非终结符的集合,表示句子结构分析的中间成分。
- V T V_T VT:终结符集合,相当于词汇表。
- R R R:规则集,形式: α − > β \alpha -> \beta α−>β,其中 α \alpha α必须要有非终结符的出现。
- S S S:初始符号,代表语言的句子。
基于PCFG(概率上下文无关文法)概率统计的分析方法
用标注好的语料库训练CFG文法,从而给出句法分析树
把规则上加上概率,对每条规则,记录它的概率,即它出现的频率
约束:规则左侧相同的概率加起来=1
求一棵树的概率:
基本假设:
- 位置无关:子树的概率与构成子树所在的位置无关
- 上下文无关:子树的概率与子树之外的词无关
- 祖先无关:子树的概率与子树外的节点无关
句法分析树概率 = 该分析树上所有规则的概率之积 (选择概率最大的句法分析树)
句子概率 = 该句子的各种句法分析树的概率之和 (可用于评价构建的是否好)
规则概率估计
步骤:
- 编写语言规则
- 构建树库
- 在树库上统计该规则及其非终结符的频率, P ( A − > α ) = c ( A − > α ) c ( A ) P(A->\alpha) = \frac{c(A->\alpha)}{c(A)} P(A−>α)=c(A)c(A−>α)
基本问题
给定文法G,计算由G生成句子S的概率
相当于给定HMM模型,计算生成观察序列的概率
用于评价文法好不好,若好,则文法生成句子的概率很高
方法:采用动态规划算法,将句法分析树的概率计算转化为句法分析树的子树的概率计算
向内算法:
算 w i . . . . w j w_i....w_j wi....wj子串的概率
向内变量: α i j ( A ) = P ( A − > w i . . . w j ) = P ( w i . . . w j ∣ A ) \alpha_{ij}(A) = P(A->w_i...w_j) = P(w_i...w_j|A) αij(A)=P(A−>wi...wj)=P(wi...wj∣A)
递推公式:
α i i ( A ) = P ( A − > w i i ) \alpha_{ii}(A) = P(A->w_{ii}) αii(A)=P(A−>wii)
α i j ( A ) = ∑ B , C ∈ V N ∑ i ≤ k ≤ j p ( A − > B C ) α i k ( B ) α ( k + 1 ) j ( C ) \alpha_{ij}(A) = \sum \limits_{B,C \in V_N} \sum \limits_{i\leq k \leq j}p(A->BC)\alpha_{ik}(B)\alpha_{(k+1)j}(C) αij(A)=B,C∈VN∑i≤k≤j∑p(A−>BC)αik(B)α(k+1)j(C)
其中B,C可能有很多组合,所以要进行累加
步骤:
- 初始化: α i i ( A ) = P ( A − > w i i ) \alpha_{ii}(A) = P(A->w_{ii}) αii(A)=P(A−>wii) 词性概率
- 归纳计算,j从1到n,i从1到n-j,重复 α i , i + j ( A ) = ∑ B , C ∈ V N ∑ i ≤ k ≤ j p ( A − > B C ) α i k ( B ) α k + 1 , i + j ( C ) \alpha_{i,i+j}(A) = \sum \limits_{B,C \in V_N} \sum \limits_{i\leq k \leq j}p(A->BC)\alpha_{ik}(B)\alpha_{k+1,i+j}(C) αi,i+j(A)=B,C∈VN∑i≤k≤j∑p(A−>BC)αik(B)αk+1,i+j(C)计算句法子树概率
- 结束:句子生成概率: P ( S ∣ G ) = α 1 , n ( S ) P(S|G) = \alpha_{1,n}(S) P(S∣G)=α1,n(S)
寻找句子S的最优句法分析树
方法:采用动态规划算法,将句法分析树的概率计算转化为句法分析树的子树的概率计算
Viterbi算法:
建立一个向内变量,向内变量的递归运算取最大值,同时维护一个指向上一步的最大值
步骤:
- 初始化: α i i ( A ) = P ( A − > w i i ) \alpha_{ii}(A) = P(A->w_{ii}) αii(A)=P(A−>wii) 词性概率
- 动态规划,j从1到n,i从1到n-j,重复 α i , i + j ( A ) = max B , C , k p ( A − > B C ) α i k ( B ) α k + 1 , i + j ( C ) \alpha_{i,i+j}(A) = \max \limits_{B,C,k}p(A->BC)\alpha_{ik}(B)\alpha_{k+1,i+j}(C) αi,i+j(A)=B,C,kmaxp(A−>BC)αik(B)αk+1,i+j(C),维护一个指向上一步最大值的指针
- 结束: P ( t ∗ ) = α 1 , n ( S ) P(t^*) = \alpha_{1,n}(S) P(t∗)=α1,n(S), t ∗ t^* t∗的根节点为S,同时指针回溯得到S的最优树结构
模型参数训练问题
没有训练语料库如何得到文法G
向内向外算法(EM算法):
随机地给一个参数值得到一个语法,根据文法和训练语料,得到语法规则使用次数的期望值,以期望次数用最大似然估计得到语法参数新的估计值,得到新的语法,由得到的新语法得到使用次数期望值,重新估计语法参数。
向外算法:
自顶向下
向外变量:非终结符A的外部概率,即根据文法从A推出词串 w i . . . . w j w_i....w_j wi....wj的上下文的概率 β i j ( A ) = P ( w 1 . . . w i − 1 A w j . . . w n ∣ S ) \beta_{ij}(A) = P(w_1...w_i-1Aw_j...w_n|S) βij(A)=P(w1...wi−1Awj...wn∣S)
步骤:
-
初始化
β 1 , n ( A ) = 1 , A = S = 0 , A ≠ S \begin{aligned} \beta_{1,n}(A) &= 1,A=S \\ &=0,A\neq S \end{aligned} β1,n(A)=1,A=S=0,A=S -
归纳计算:j从n-1到0,i从1到n-j,重复计算 β i j ( A ) = ∑ B , C , j < k β i j ( C ) P ( C − > A B ) α j + 1 , k ( B ) + ∑ B , C , h < i β i j ( C ) P ( C − > B A ) α h , j − 1 ( B ) \beta_{ij}(A) = \sum \limits_{B,C,j<k} \beta_{ij}(C)P(C->AB)\alpha_{j+1,k}(B) + \sum \limits_{B,C,h<i} \beta_{ij}(C)P(C->BA)\alpha_{h,j-1}(B) βij(A)=B,C,j<k∑βij(C)P(C−>AB)αj+1,k(B)+B,C,h<i∑βij(C)P(C−>BA)αh,j−1(B)
向内向外算法:
步骤:
- 初始化:随机给 P ( A − > μ ) P(A->\mu) P(A−>μ)赋值
- E步骤:计算期望值 C ( A − > B C ) C(A->BC) C(A−>BC)和 C ( A − > a ) C(A->a) C(A−>a)
- M步骤:用E步骤所得的期望值利用 P ( A − > B C ) = C ( A − > B C ) ∑ μ C ( A − > μ ) P(A->BC) = \frac{C(A->BC)}{\sum_{\mu}C(A->\mu)} P(A−>BC)=∑μC(A−>μ)C(A−>BC)求出每一条规则的值
- 重新估计 P ( A − > μ ) P(A->\mu) P(A−>μ)得到语法 G i + 1 G_{i+1} Gi+1,直到 P ( A − > μ ) P(A->\mu) P(A−>μ)收敛
优点
可以利用概率减少分析的搜索空间,加快效率
对句法分析的歧义结果进行概率排序
对概率较低的子树可剪枝
定量地比较两个语法的性能,提高了文法的容错能力
缺点
需要高精度的、规模足够大的树库支持
没有考虑词对结构分析的影响
基于CFG(上下文无关文法)规则的分析方法
不需要训练,只需要有规则库,根据规则构建句法分析树
线图分析法
线图:一组节点和边的集合
节点:输入字符串中的字符间隔
边:<起点,终点,标记>,标记为非终结符或终结符
步骤:
- 查看任意相邻几条边上的词性串是否与某条重写规则的右部相同
- 如果相同,则增加一条新的边跨越原来相应的边,新增加边上的标记为这条重写规则的头**(左部)**。
- 重复这个过程,直到没有新的边产生。
点规则:表示规则右部被归约的程度,点的左边表示已经匹配上了,右边表示未被匹配
基于HMM的浅层分析技术
组块分析:在线性序列中插入括号,来标示组块边界
可观察符号序列:词性标记对序列 < α , β > <\alpha,\beta> <α,β>
隐状态:5个可能的NP组块边界标记
- [ :一个NP组块的开始
- ]:结束
- I:表示不是NP组块边界,且处于NP内部
- O:表示不是NP组块边界,且处于NP外部
往期文章:
自然语言处理1——NLP概述
自然语言处理2——语言学基础
自然语言处理3——语言学资源
自然语言处理4——统计语言模型
自然语言处理5——词法分析
自然语言处理6——HMM模型和词性标注