使用基于字标注的中文分词算法。
输入 \(x\) 为字符序列,计算每个字的标注,得到相应长度的标注序列 \(y\) ,进而得到分词结果。
标注的集合为 \(\{\text{B},\text{M},\text{E},\text{S}\}\) 。其中 \(\text{B}\) 、 \(\text{M}\) 、 \(\text{E}\) 分别表示对应的字在分词结果中处于一个多字词的开头、中间、结尾, \(\text{S}\) 表示对应字在分词结果中为一个单字词。
例如,输入 \(x\) 为 厦门的鼓浪屿 ,标注序列 \(y\) 为 BESBME , 则分词结果为 厦门 的 鼓浪屿 。
特征模板:
| 类型 | 模板 |
|---|---|
| 一元 | \(x_{i-1}y_i\), \(x_{i}y_i\), \(x_{i+1}y_i\) |
| 二元 | \(x_{i-2}x_{i-1}y_i\), \(x_{i-1}x_{i}y_i\), \(x_{i}x_{i+1}y_i\), \(x_{i+1}x_{i+2}y_i\) |
| 转移 | \(y_{i-1}y_i\) |
使用平均感知器 [Collins02] 算法进行参数学习。在宾州中文树库5上,分词f值能到0.9731。
训练
./cws.py --train training_file.txt --model model.txt
测试:
./cws.py --model model.txt --test test_file.txt
预测:
./cws.py --model model.txt --predict predict.txt --result result.txt
./cws.py --model model.txt < predict.txt > result.txt
其它主要参数:
训练文件、预测文件、结果文件:用空格分词的中文句子。
模型文件:使用JSON格式存储的哈希表, key 为特征, value 为权重。
| [Collins02] | Collins, Michael. “Discriminative Training Methods for Hidden Markov Models: Theory and Experiments with Perceptron Algorithms.” 1–8, 1–8, 2002. |