您的当前位置:首页正文

句法分析详解

2024-11-25 来源:个人技术集锦

首先在了解句法分析,我们先来思考一个问题:人是怎样理解一个句子的?

1、从语法的角度(主谓宾)

2、从感觉的角度(语言模型)

所以句法分析理解起来很简单,就是从语法的角度分析每个词之间的关系,在一句话中那个词是主语,那个词是谓语,等等而且用树的形式来表示。
假设现在有一句话:

北京是属于中国的

那么用句法分析后就是下图的样子:

叶子节点是单词,其他节点就是对应的词性,那么构建这样的语法树有什么用呢?

用在特征工程上,我们利用这样的一个句法树对于在对每个数据时我们可以考虑:
1、最短路径

2、两词之间的符号

句法树的构成

那么一个句法树是怎样构成的呢?首先我们得有语法Grammers如下图:

那么语法是怎么形成的呢?其实语法是由语言学的专家根据多年的经验写出来的。咱们知道怎么用就可以啦

其实我们可以利用语法树进行翻译

在这些环节中我们需要知道:

中文语法,英文语法和中文转英文的语法。

这是比较消耗人力成本的,所以现在一般都是用seq2seq模型来做的。

我们一般成这种语法为CFG,但是在使用的时候我们一般都是用PCFG,也就是在每个语法后面标注使用这个语法的概率:

那么我们怎么才能找到最优的句法树呢?

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 VPNP,V,PP这样的我们尝试把它转换成两个分支的形式,说到这里我提一点CNF的形式,

CNF

CNF是指的只允许右面有两个,其他条件是不允许的,如果出现两个以外的形式我们必须将其转换,如上图语法,还出现了 N P → e NP\rightarrow e NPe V P → N VP\rightarrow N VPN的形式。下面我们来转换一下:

第一步去掉 N P → e N P\rightarrow e NPe

如上图我们去掉 N P → e NP\rightarrow e NPe相当于把 NP 为 空 代 入 规 则 中 , 这 样 会 多 出 几 条 规 则 ( 去 掉 N P 时 的 规 则 ) 如 上 图 同 时 又 可 以 将 N P → e 为空代入规则中,这样会多出几条规则(去掉NP时的规则)如上图同时又可以将NP\rightarrow e NPNPe去掉

下一步我们去掉 V P → N VP\rightarrow N VPN这种右边为1个的形式:

如上图我们去掉 S → V P S\rightarrow VP SVP设置几个新的规则就是把VP指向的规则换成S,然后就可以去掉 S → V P S\rightarrow VP SVP

还有一种比较特殊的情况: V P → V VP\rightarrow V VPV也就是指向某个词的时候

同样的道理,如上图我们去掉 V P → V VP\rightarrow V VPV设置几个新的规则就是把VP指向的规则换成V,然后就可以去掉 V P → V VP\rightarrow V VPV
就这样循序删掉所有的右边只有一个的规则

最后删除 V P → N P , V , P P VP\rightarrow NP,V,PP VPNP,V,PP这种形式:

遇到这种情况我们就合并一个规则比如 V P → N P , V , P P VP\rightarrow NP,V,PP\quad VPNP,V,PP转化为: V P → N P , @ V P p VP\rightarrow NP,@VP_p\quad VPNP,@VPp @ V P p → V , P P \quad @VP_p\rightarrow V,PP @VPpV,PP
当然CKY算法没有这么严格,它只要保证最多只有两个分支

CKY算法

每次计算都是两两之间进行计算选择最好的那个,并根据语法树的规则连续乘积

显示全文