中文词性标注的简单实现
数据集和测试脚本
之前,我找到一个中文词性标注的数据集,并且根据数据集写了工具脚本用于评测中文词性标注算法的正确性。在这个数据集的基础上,我对中文词性标注做了简单的实现。
中文分词数据集和我的工具脚本具体介绍见这里
算法实现
我一共实现了三个简单的算法
1.maxFreq
顾名思义,就是最朴素的版本,根据词汇最大频率的词性直接输出。
2.greedyTran
中文词性标注的考虑词汇之间状态转移的实现的原理和中文分词几乎类似,都是抽两个词之间的转换规律。但是可以用处理HMM的动态规划算法viterbi算法实现外,还可以直接使用贪婪算法,直接按照最可能的转移路径走。实际证明由于中文右边词汇词性几乎能被左边决定,所以效果不错。
3.HMM
用动态规划viterbi算法找出最大概率路径即可。和中文分词中的HMM十分相似。
但是我实现的HMM不如贪心好,主要是我只考虑了生硬的一阶转移概率,没考虑本身和高阶特征。但是我对HMM经过练习有了了解,虽然有待加强,但是收获还是很明显的。
未登录词和用法是我自己实现不太好的地方,除此之外我的HMM框架是基本成形了。
细节实现
1.预处理
与中文分词很类似,需要对数字年份预处理。
另外,对只有一个用法的词汇预处理我觉得效果能变好一些,可是我没有再改了。
2.未登录词汇
我觉得和我实现的中文分词类似,HMM之所以发挥不出最大威力,一是因为我抽的feature阶数很低,而是因为因为我对于未分类词汇找不到很好的处理方法,我的方法几乎等于直接根据词性转移规律瞎猜了,没有利用周围信息。
我没有学习过别人的算法,因为很少有人写低阶的HMM。所以我现在也不清楚怎么处理未登录词或者未登录算法,如果我想不通这个问题,阶数一高未登录用法变多,就更麻烦了。
测试结果