查看词性_NLP应用案例:词性标注算法的一般流程

9607a6fa172814993a91eb9bf6ea123d.png

0 词性 & 词性标注

词性(pos, part-of-speech)是词汇基本的语法属性,常见的词性有名词、动词、形容词、副词等。

词性标注(pos tagging),是指为句子当中的每一个单词标注一个词性,即确定每个单词是名词、动词、形容词或者其他词性的过程。

词性标注是很多NLP任务(如句法分析)的预处理步骤,经过词性标注后的文本会给后续任务带来极大的便利性。

1 案例说明

1.1 问题描述

给定已经标注好的语料库,要求从中学习词性标注的规则。利用此规则对未标注过的新文本中的每个单词进行词性标注。

1.2 语料库说明

语料库以文本形式存储,该文本中包含大量文章,每篇文章由若干句子组构成,单词总量约20万(含标点符号),文本格式如下:

dd1ae01ff90dfbc9c66337306d3e6b86.png

每一行只含有一个单词以及该单词的词性,以“单词/词性”对的形式存储。

2 定义目标函数

为由单词
构成的句子文本,
为与
中单词一一对应的词性,设文本长度为
,即:

我们的目标是对于给定的

,找到最合适的词性
,根据
极大似然估计的思想,即要找到在给定
的情况下使得
最大的
。根据贝叶斯定理:

由于

固定不变,因此
相当于常数,因此上面的等式可以简化为:

,(其中
意为“等比例于”)

上式即为 Noisy Channel Model,其中

Channel Model Probability
Language Model Probability

我们的目标即可表述为:

式推导出
式的过程中,应用了如下
两个假设
  1. 隐Markov假设:假设
    仅与
    相关,与其它所有单词或词性相互独立。因此
    可简化
    的形式。
  2. 假设 Language Model 为 Bi-gram Model。因此
    可以写成
    的形式,即

式中有大量的概率连乘操作,而概率介于0~1之间,最终可能导致浮点数下溢出(underflow),为了避免下溢出,可以其取对数,因为对数函数具有严格单调递增特性,因此对数操作不会影响我们找出最大值的结果。基于上述思想,
式可进一步转化为:

式即为我们最终的目标函数。

3 确定参数和参数空间

我们的目标函数中包含三个可变参数,下面分别解释其含义,并计算其参数空间。

3.1 第一个参数:

参数

表示,在给定词性
的情况下,其对应的单词是
的条件概率,根据极大似然估计的思想,即计算所有被标记为词性
的单词中, 单词
的占比:
。举例来说,对于给定的词性
(名词),其中对应单词是apple的概率要高于eat,即

参数空间:为了后面计算的方面,我们把参数

的取值空间存放在一个
列的矩阵当中,其中
为语料库中不同词性的数量,
为语料库中不同单词的数量(即词典的大小)。矩阵的每一行表示一个词性,每一列表示一个单词,矩阵元素
表示在所有词性为
的单词中,单词
的占比(即条件概率),由此可知同一行中所有元素之和为1,即

参数空间的计算

  1. 初始化:定义一个大小为
    列的全
    矩阵;
  2. 计数:遍历语料库的每一行(单词/词性),将矩阵对应的“当前词性”行和“当前单词”列位置的数值加1;
  3. 归一化:用每个元素除以所在行元素之和,即得到所在行占比(即条件概率)。

最终得到参数

取值空间矩阵的一般形式如下所示:

3.2 第二个参数

参数

表示句首词性是
的概率,根据极大似然估计的思想,即计算所有在句首的词性中
的占比:
。举例来说,句首是名词的概率要高于动词,即

参数空间:参数

的取值范围可以保存在一个长度为
的向量中,
为语料库中不同词性的数量。可以推知,此向量的元素之和为1,即

参数空间的计算

  1. 初始化:定义一个长度为
    的全
    向量;
  2. 计数:遍历语料库的每一行(单词/词性),判断当前单词是否在句首,判断的依据为查看其前趋单词是否是句号、感叹号、问号等终止性标点符号,如果是句首,则取出当前词性,并将向量中对应“当前词性”位置的数值加1;
  3. 归一化:用每个元素除以向量所有元素之和,即得到占比(即概率)。

3.3 第三个参数:

参数

表示给定前趋词性为
, 当前词性为
的条件概率,根据极大似然估计的思想,即计算在前趋词性为
的(前趋词性, 当前词性)组合对中,当前词性为
的组合对的占比:
。举例来说,对于给定的前趋词性
(动词),当前词性为
(名词)的概率要高于
,即

参数空间:我们把参数

的取值空间存放在一个
列的方阵当中,
为语料库中不同词性的数量。矩阵的行表示前趋词性,列表示当前词性,矩阵元素
表示当前趋词性为
时,当前词性为
的条件概率,由此可知同一行中所有元素之和为1,即

参数空间的计算

  1. 初始化:定义一个大小为
    列的全
    方阵;
  2. 计数:遍历语料库,统计词性序列的Bigram,将方阵中对应的“前趋词性”行和“当前词性”列位置的数值加1;
  3. 归一化:用每个元素除以所在行元素之和,即得到所在行占比(即条件概率)。

最终得到参数

取值空间方阵的一般形式如下所示:

:在计算概率时,会遇到概率为0的情况,这时做对数运算时会报错,因此在计算概率值时,可以加平滑项(如Add-one Smothing)。

4. 计算最优解

4.1 求解思路

通过本文第3部分的分析与计算,我们已经确定了三个参数及其取值空间,接下来可以使用暴力枚举的方法测试出使得目标函数最大的参数取值,但时间复杂度过高,不建议采用。

通过分析,我们发现这是一个最优化的问题,而且问题的求解可以分为

个步骤(
为测试集的文本长度),每个步骤求解方式相同,符合动态规划算法的应用场景。

4.2 动态规划(Viterbi)算法求解最优参数

设:

我们的目标是对于给定的文本

,给
个单词分别赋予一个词性(有
个可选词性),使得
的值最大。
值的计算过程可描述如下:

图中黑点给出了一个示例的标记方案(如同一条路径):

  • 标记为
  • 标记为
  • 标记为
  • ....
  • 标记为

求出该路径的

值:

........ 对应

........ 对应

........ 对应

........ 对应

以上概率值皆可通过本文第3部分中的

参数空间中直接取出,代入上式即可算出该路径的
值。

从上式中可以看出,

的求解过程分为
个步骤,每个步骤
种选择。因此我们可以定义一个
列的二维数组
, 为了描述的方便,我们假设数组下标从1开始,其中元素
表示从第一个单词开始,当计算到第
个单词(第
步)且将其词性标记为
时的
最优路径(最大概率)。

状态转移方程为:

为了回溯最优的词性选择路径,另需要建立一个

的二维数组,用于记录前趋单词的词性。

4.3 时间复杂度分析

动态规划求解的过程,其实就是填写

数组的过程,而求解数组中的每个元素值,需要扫描数组前面一行的
个元素,因此时间复杂度为

5. 小结

本文梳理了词性标注算法的一般流程,并对每个步骤的关键思路和实施策略进行了总结。由于本人刚接触NLP技术,阐述过程中难免有错漏之处,欢迎各位读者指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值