wordseg
wordseg copied to clipboard
Chinese Word Segmentation using CRF++
#WordSeg
Chinese Word Segmentation using CRF++.
简介
WordSeg 是一个中文分词工具。
中文分词 (Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。
现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。
WordSeg 属于基于统计的字标注分词方法。
字标注
字标注(以字分词),就是把分词视为字的词位分类问题。字的构词位置(词位): 词首B、词尾E、词中M、单字词S。比如对于分词:上海/计划/到/本/世纪/ 末/实现/人均/国内/生产/总值/五千美元/。 可以标注为:上/B海/E计/B 划/E到/S本/S世/B纪/E末/S/实/B现/E人/B均/E国/B内/E生/B产/E总/B/值/ E五/B千/M美/M元/E。/S
CRF
CRF (Conditional Random Field)条件随机域: 条件随机域模型是由 Lafferty 在2001年提出的一种典型的判别式模型。它在观测序列的基础上对目标序列进行建模,重点解决序列化标注的问题。
CRF++ (Yet Another CRF toolkit)是一个实现 CRF 的开源工具包,主要用来分词和序列标注。
准备数据(data)
- pku_training.utf8 训练数据
- pku_test.utf8 测试数据
- pku_test_gold.utf8 对比数据
WordSeg 工作流程
对训练集进行字标注以及编写模板后使用CRF++工具,学习得到相应model,然后使用model对测试集自动标注,最后根据标好的字得到分词结果。
WordSeg 使用方法
python tag.py pku_training.utf8
python tag.py pku_test.utf8
python crf_exec.py
python seg.py test-info.txt
python score_test.py
- 字标注训练数据和测试数据 (Training and Test file formats)
- crf++ 训练模型 (Preparing feature templates & Training (encoding)),标注测试集 Testing (decoding)
- 标注文件转化为分词结果 (Get segmentation)
- 评测 (F1 score of result)
分词效果
参数 | pku_test | msr_test |
---|---|---|
召回率 | 0.974 | 0.988 |
准确率 | 0.946 | 0.965 |
F值 | 0.960 | 0.976 |
see score-info.txt.
pku_test
=== TOTAL TRUE WORD COUNT: 104372
=== TOTAL TEST WORD COUNT: 102698
=== TOTAL TRUE WORDS RECALL: 0.974
=== TOTAL TEST WORDS PRECISION: 0.946
=== F MEASURE: 0.960
msr_test
=== TOTAL TRUE WORD COUNT: 106873
=== TOTAL TEST WORD COUNT: 106791
=== TOTAL TRUE WORDS RECALL: 0.988
=== TOTAL TEST WORDS PRECISION: 0.965
=== F MEASURE: 0.976
Tools and Data