![9607a6fa172814993a91eb9bf6ea123d.png](https://i-blog.csdnimg.cn/blog_migrate/ebfe959e62909c5dc0191d0a6f7c3ec1.png)
0 词性 & 词性标注
词性(pos, part-of-speech)是词汇基本的语法属性,常见的词性有名词、动词、形容词、副词等。
词性标注(pos tagging),是指为句子当中的每一个单词标注一个词性,即确定每个单词是名词、动词、形容词或者其他词性的过程。
词性标注是很多NLP任务(如句法分析)的预处理步骤,经过词性标注后的文本会给后续任务带来极大的便利性。
1 案例说明
1.1 问题描述
给定已经标注好的语料库,要求从中学习词性标注的规则。利用此规则对未标注过的新文本中的每个单词进行词性标注。
1.2 语料库说明
语料库以文本形式存储,该文本中包含大量文章,每篇文章由若干句子组构成,单词总量约20万(含标点符号),文本格式如下:
![dd1ae01ff90dfbc9c66337306d3e6b86.png](https://i-blog.csdnimg.cn/blog_migrate/8cc9d6d66d28540ae55357cd0effba20.png)
每一行只含有一个单词以及该单词的词性,以“单词/词性”对的形式存储。
2 定义目标函数
设
我们的目标是对于给定的
由于
上式即为 Noisy Channel Model,其中
我们的目标即可表述为:
从
- 隐Markov假设:假设
仅与
相关,与其它所有单词或词性相互独立。因此
可简化
的形式。
- 假设 Language Model 为 Bi-gram Model。因此
可以写成
的形式,即
。
3 确定参数和参数空间
我们的目标函数中包含三个可变参数,下面分别解释其含义,并计算其参数空间。
3.1 第一个参数:
参数
参数空间:为了后面计算的方面,我们把参数
参数空间的计算:
- 初始化:定义一个大小为
行
列的全
矩阵;
- 计数:遍历语料库的每一行(单词/词性),将矩阵对应的“当前词性”行和“当前单词”列位置的数值加1;
- 归一化:用每个元素除以所在行元素之和,即得到所在行占比(即条件概率)。
最终得到参数
3.2 第二个参数:
参数
参数空间:参数
参数空间的计算:
- 初始化:定义一个长度为
的全
向量;
- 计数:遍历语料库的每一行(单词/词性),判断当前单词是否在句首,判断的依据为查看其前趋单词是否是句号、感叹号、问号等终止性标点符号,如果是句首,则取出当前词性,并将向量中对应“当前词性”位置的数值加1;
- 归一化:用每个元素除以向量所有元素之和,即得到占比(即概率)。
3.3 第三个参数:
参数
参数空间:我们把参数
参数空间的计算:
- 初始化:定义一个大小为
行
列的全
方阵;
- 计数:遍历语料库,统计词性序列的Bigram,将方阵中对应的“前趋词性”行和“当前词性”列位置的数值加1;
- 归一化:用每个元素除以所在行元素之和,即得到所在行占比(即条件概率)。
最终得到参数
注:在计算概率时,会遇到概率为0的情况,这时做对数运算时会报错,因此在计算概率值时,可以加平滑项(如Add-one Smothing)。
4. 计算最优解
4.1 求解思路
通过本文第3部分的分析与计算,我们已经确定了三个参数及其取值空间,接下来可以使用暴力枚举的方法测试出使得目标函数最大的参数取值,但时间复杂度过高,不建议采用。
通过分析,我们发现这是一个最优化的问题,而且问题的求解可以分为
4.2 动态规划(Viterbi)算法求解最优参数
设:
我们的目标是对于给定的文本
图中黑点给出了一个示例的标记方案(如同一条路径):
-
标记为
-
标记为
-
标记为
- ....
-
标记为
求出该路径的
以上概率值皆可通过本文第3部分中的
从上式中可以看出,
状态转移方程为:
为了回溯最优的词性选择路径,另需要建立一个
4.3 时间复杂度分析
动态规划求解的过程,其实就是填写
5. 小结
本文梳理了词性标注算法的一般流程,并对每个步骤的关键思路和实施策略进行了总结。由于本人刚接触NLP技术,阐述过程中难免有错漏之处,欢迎各位读者指正。