最大熵模型实现中文分词
一、实验环境
1.1Ubuntu 16.4 LTS(Linux)
1.2python2
本实验完全在Linux环境(Ubuntu 64位)下使用python脚本和命令行实现
实验结果输入文本。
二、实验材料
2.1语料库
本实验采用SIGHAN提供的backoff2005语料进行训练和测试。
三、第三方工具包
张乐博士最大熵工具包
四、实验算法及过程
本实验采用最大熵算法实现中文分词
准备工作:
4.1下载安装最大熵工具包,可从github上下载源代码在Ubuntu。
4.2Linux 环境下进入maxent-master子目录按照
$ ./configure
$ make
$ install
即可完成C++库的安装
4.3进入python子目录执行python setup.py install完成python库的安装
实验流程:
4.4将backoff2005里的训练数据转化为这个POS Tagger所需的训练数据格式,还是以微软亚洲研究院提供的中文分词语料为例,这次我们采用4-tag(B(Begin,词首), E(End,词尾), M(Middle,词中), S(Single,单字词))标记集,只处理utf-8编码文本。原始训练集./icwb2-data/training/msr_training.utf8的形式是人工分好词的中文句子形式。
4.5使用一个4-tag的标注脚本 character_tagging.py 对这个训练语料进行标注:
4.6python character_tagging.py icwb2-data/training/msr_training.utf8msr_training.tagging.utf8” 即可得到最大熵词性标注训练器所需要的输入文件msr_training.tagging.utf8
4.7用张乐博士最大熵模型工具包中自带的PosTagger来训练一个字标注器,指定迭代次数100:
./maxent-master/example/postagger/postrainer.pymsr_tagger.model -f msr_training.tagging.utf8 --iters 100
4.8需要将其单字离散化并添加空格,python脚本 character_split.py 对测试语料进行处理。
执行“python character_split.py icwb2-data/testing/msr_test.utf8msr_test.split.utf8”即可得到可用于标注测试的测试语料msr_test.split.utf8
4.10执行最大熵标注脚本即可得到字标注结果:
./maxent-master/example/postagger/maxent_tagger.py-m msr_tagger.model msr_test.split.utf8 > msr_test.split.tag.utf8
4.11使用脚本character_2_word.py,按标注的词位信息讲这份结果再转化为分词结果。
六、主要函数
character_tagging.py 对训练语料进行标注:
character_split.py 对测试语料进行处理。
character_2_word.py 按标注的词位信息讲这份结果再转化为分词结果。
六、实验结果评测:
总体评测6.1测试数据
利用backoff2005的测试脚本测试分词的效果,使用微软语料库进行测评。
./icwb2data/scripts/score./icwb2data/gold/msr_training_words.utf8./icwb2-data/gold/msr_test_gold.utf8 msr_test.split.tag2word.utf8 > msr_maxent_segment.score
6.2结果说明
结果大概是:
准确率:83.6%
召回率:84.4%
6.3结果分析
这个分词结果比较一般,主要原因应该是这里使用的这份词性标注代码在抽取特征的时候主要考虑的是英文词性标注,所以我们可以基于一些已有的最大熵字标志文章来设计特征模板,进行特征提取和优化,从而进行改进。