首先在了解句法分析,我们先来思考一个问题:人是怎样理解一个句子的?
1、从语法的角度(主谓宾)
2、从感觉的角度(语言模型)
所以句法分析理解起来很简单,就是从语法的角度分析每个词之间的关系,在一句话中那个词是主语,那个词是谓语,等等而且用树的形式来表示。
假设现在有一句话:
北京是属于中国的
那么用句法分析后就是下图的样子:
我们先不管怎么构成这样的一个句法树,我们先看一下这棵树的特点:
叶子节点是单词,其他节点就是对应的词性,那么构建这样的语法树有什么用呢?
用在特征工程上,我们利用这样的一个句法树对于在对每个数据时我们可以考虑:
1、最短路径
2、两词之间的符号
句法树的构成
那么一个句法树是怎样构成的呢?首先我们得有语法Grammers如下图:
如上图我们可以看到右边的是语法,比如:一个句子(s)可以分为:名词短语(NP)和动词短语(VP),然后我们根据语法和对应的句子就可以构建这样的一颗语法树了。
那么语法是怎么形成的呢?其实语法是由语言学的专家根据多年的经验写出来的。咱们知道怎么用就可以啦
其实我们可以利用语法树进行翻译
如上图我们将中文翻译成英文时现将中文转换成一颗句法树,然后根据中文的句法树转换成英文的句法树,最后根据英文文的句法树转换成英文。
在这些环节中我们需要知道:
中文语法,英文语法和中文转英文的语法。
这是比较消耗人力成本的,所以现在一般都是用seq2seq模型来做的。
我们一般成这种语法为CFG,但是在使用的时候我们一般都是用PCFG,也就是在每个语法后面标注使用这个语法的概率:
为什么要使用PCFG呢?是因为我们根据语法一个句子可以构成很多个树,我们需要找到那个最优的数因此使用PCFG计算每棵树的score,用来选择最好的那棵树。
那么我们计算每个语法的概率是用了一批训练数据:
N
P
→
V
,
N
P
N
P
(
V
,
N
P
)
N
P
总
NP\rightarrow V,NP\quad\dfrac{NP(V,NP)}{NP_总}
NP→V,NPNP总NP(V,NP)
那么我们怎么才能找到最优的句法树呢?
1、枚举所有的句法树。一一计算找到score最大的那棵树
缺点:计算量太大,指数级增长
2、使用CKY算法
CKY算法指的是将一个大的问题转换成子问题来进行操作(DP)算法的思想
也就是将计算 ( w 1 , w 2 , w 3 . . . w n ) (w_1,w_2,w_3...w_n) (w1,w2,w3...wn)转换成计算 ( ( w 1 ) , ( w 2 , w 3 . . . w n ) ) ((w_1),(w_2,w_3...w_n)) ((w1),(w2,w3...wn))每次比较当前语法与剩余语法的语法大小。动态规划的思想
现在我们知道cky算法的核心是大的问题转换成子问题进行两两比较,这个时候我们也要对我们的语法进行一些转换,保证它能够符合CKY算法
我们的CKY算法主要是两两之间进行比较,也就是一个语法最多有两个分支,像
V
P
→
N
P
,
V
,
P
P
VP\rightarrow NP,V,PP
VP→NP,V,PP这样的我们尝试把它转换成两个分支的形式,说到这里我提一点CNF的形式,
CNF
CNF是指的只允许右面有两个,其他条件是不允许的,如果出现两个以外的形式我们必须将其转换,如上图语法,还出现了 N P → e NP\rightarrow e NP→e和 V P → N VP\rightarrow N VP→N的形式。下面我们来转换一下:
第一步去掉
N
P
→
e
N P\rightarrow e
NP→e:
如上图我们去掉
N
P
→
e
NP\rightarrow e
NP→e相当于把 NP
为
空
代
入
规
则
中
,
这
样
会
多
出
几
条
规
则
(
去
掉
N
P
时
的
规
则
)
如
上
图
同
时
又
可
以
将
N
P
→
e
为空代入规则中,这样会多出几条规则(去掉NP时的规则)如上图同时又可以将NP\rightarrow e
为空代入规则中,这样会多出几条规则(去掉NP时的规则)如上图同时又可以将NP→e去掉
下一步我们去掉
V
P
→
N
VP\rightarrow N
VP→N这种右边为1个的形式:
如上图我们去掉
S
→
V
P
S\rightarrow VP
S→VP设置几个新的规则就是把VP指向的规则换成S,然后就可以去掉
S
→
V
P
S\rightarrow VP
S→VP
还有一种比较特殊的情况:
V
P
→
V
VP\rightarrow V
VP→V也就是指向某个词的时候
同样的道理,如上图我们去掉
V
P
→
V
VP\rightarrow V
VP→V设置几个新的规则就是把VP指向的规则换成V,然后就可以去掉
V
P
→
V
VP\rightarrow V
VP→V
就这样循序删掉所有的右边只有一个的规则
最后删除
V
P
→
N
P
,
V
,
P
P
VP\rightarrow NP,V,PP
VP→NP,V,PP这种形式:
遇到这种情况我们就合并一个规则比如
V
P
→
N
P
,
V
,
P
P
VP\rightarrow NP,V,PP\quad
VP→NP,V,PP转化为:
V
P
→
N
P
,
@
V
P
p
VP\rightarrow NP,@VP_p\quad
VP→NP,@VPp和
@
V
P
p
→
V
,
P
P
\quad @VP_p\rightarrow V,PP
@VPp→V,PP
当然CKY算法没有这么严格,它只要保证最多只有两个分支
CKY算法
每次计算都是两两之间进行计算选择最好的那个,并根据语法树的规则连续乘积