笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP
同中文分词一样,语言学界在标注规范上存在分歧,导致目前还没有一个被广泛接受的汉语词性划分标准。无论是词性划分的颗粒度,还是词性标签都不统一。一方面,各研究机构各持己见、派系林立,标注了大量互不兼容的语料库。另一方面,部分语料库受到严格版权控制,成为内部材料,得不到充分共享利用。
本节选取其中一些授权宽松, 容易获得的语料库作为案例。
以下示例我们选取 PKU 标注的《人民日报》语料库的标注集。
之前我们就介绍过隐马尔可夫模型,详细见: 4.隐马尔可夫模型与序列标注
隐马尔可夫模型词性标注代码见(程序会自动下载 PKU 语料库): hmm_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/hmm_pos.py
运行代码后结果如下:
一阶隐马尔可夫模型:
r, u, n, v, v, v
他/r 的/u 希望/n 是/v 希望/v 上学/v
他/代词 的/助词 希望/名词 是/动词 希望/动词 上学/动词
李狗蛋/动词 的/动词 希望/动词 是/动词 希望/动词 上学/动词
二阶隐马尔可夫模型:
r, u, n, v, v, v
他/r 的/u 希望/n 是/v 希望/v 上学/v
他/代词 的/助词 希望/名词 是/动词 希望/动词 上学/动词
李狗蛋/动词 的/动词 希望/动词 是/动词 希望/动词 上学/动词
可见隐马尔可夫模型成功的辨别出“希望”的两种词性 n 和 v。但 OOV问题就出现了,无法把“李狗蛋”识别成人名,隐马尔可夫模型一步走错满盘皆输,其根本原因在于隐马尔可夫模型只能利用单词这一个状态特征,无法通过姓氏“李”来推测“李狗蛋”是人名。
之前我们就介绍过感知机模型,详细见: 5.感知机分类与序列标注
按照中文分词时的经验,感知机能够利用丰富的上下文特征,是优于隐马尔可夫模型的选择,对于词性标注也是如此。
感知机模型词性标注代码见(程序会自动下载 PKU 语料库): perceptron_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/perceptron_pos.py
运行会有些慢,结果如下:
李狗蛋/nr 的/u 希望/n 是/v 希望/v 上学/v
李狗蛋/人名 的/助词 希望/名词 是/动词 希望/动词 上学/动词
这次的运行结果完全正确,感知机成功的识别出 OOV “李狗蛋”的词性。
之前我们就介绍过条件随机场模型,详细见: 6.条件随机场与序列标注
条件随机场模型词性标注代码见(程序会自动下载 PKU 语料库): crf_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/crf_pos.py
运行时间会比较长,结果如下:
李狗蛋/nr 的/u 希望/n 是/v 希望/v 上学/v
李狗蛋/人名 的/助词 希望/名词 是/动词 希望/动词 上学/动词
依然可以成功识别 OOV “李狗蛋”的词性。
将 PKU 语料库按 9:1 分隔为训练集和测试集,分别用以上三种模型来训练,准确率如下:
算法 | 准确率 |
---|---|
一阶隐马尔可夫模型 | 44.99% |
二阶隐马尔可夫模型 | 40.53% |
结构化感知机 | 83.07% |
条件随机场 | 82.12% |
从上图可知,结构化感知机和条件随机场都要优于隐马尔可夫模型,判别式模型能够利用更多的特征来进行训练,从而提高更多的精度。
在工程上,许多用户希望将特定的一些词语打上自定义的标签,称为自定义词性。比如,电商领域的用户希望将一些手机品牌打上相应标签,以便后续分析。HanLP 提供了自定义词性功能。具体有两种实现。
HanLP何晗–《自然语言处理入门》笔记:
https://github.com/NLP-LOVE/Introduction-NLP
项目持续更新中…
目录
章节 |
---|
第 1 章:新手上路 |
第 2 章:词典分词 |
第 3 章:二元语法与中文分词 |
第 4 章:隐马尔可夫模型与序列标注 |
第 5 章:感知机分类与序列标注 |
第 6 章:条件随机场与序列标注 |
第 7 章:词性标注 |
第 8 章:命名实体识别 |
第 9 章:信息抽取 |
第 10 章:文本聚类 |
第 11 章:文本分类 |
第 12 章:依存句法分析 |
第 13 章:深度学习与自然语言处理 |