Wapic 中文分词模型 (wapic-cws)
线性链 CRF(L-BFGS / OWL-QN 训练)中文分词模型,采用 BMES 标注。 遵循现代中文标准:人名保持整体(李镇全、林强峰)、标点独立、数字/英文按字符类型边界切分。
代码与训练框架:https://github.com/Ismantic/Wapic(C++17 重构的 Wapiti)。
分词规范(retag2)
模型的训练数据与评测集都按同一套现代中文分词口径重新标注,项目内代号 retag2 ("第 2 版重新打标签")。三条规则:
- 人名保持整体 —— 姓名不拆开。
李镇全→李镇全(而非李 镇全/李 镇 全)。 - 标点独立成词 —— 每个标点单独切出。
你好,世界。→你好 , 世界 。 - 数字 / 英文按字符类型边界切 —— 汉字、数字、拉丁字母交界处一律切开。
2015年→2015 年;GDP增长3.5%→GDP 增长 3 . 5 %。
因此模型只在纯汉字序列上做真正的分词决策;数字、英文、标点是按字符类型
先切出来的。使用时若输入含中英数字混排,应先做同样的预切分再喂给模型
(GitHub 仓库 REPL 与 Python 绑定的 cut 已内置该预处理)。评测的 gold 数据
也必须是 retag2 口径,否则字符类型边界对不上、F1 会偏低。
文件
| 文件 | 说明 |
|---|---|
model/wapic-cws.wac |
主模型(发布代号 h25_30,48 MB,二进制格式) |
model/wapic-cws-base.wac |
Stage-1 base,warm-start 锚点(仅复现训练时需要) |
model/pattern.txt |
特征模板(unigram + bigram) |
指标
在 retag2 gold 测试集上(见 Ismantic/wapic-cws-data):
| 测试集 | F1 | P | R |
|---|---|---|---|
| PD-1998 (modern+punct) | 97.70 | 97.60 | 97.81 |
| 12M 泛化集 | 97.48 | 97.55 | 97.42 |
人名回归 case:15/15 全过。
用法
需先从源码编译 wapic(见 GitHub 仓库):
# 交互式分词
./build/wapic -m model/wapic-cws.wac
# >>> 李镇全今天接受了记者的采访
# 李镇全 今天 接受 了 记者 的 采访
# 批量标注:输入为每行一个字符、空行分句
./build/wapic test -m model/wapic-cws.wac input_nolabel.txt output_tags.txt
Python 绑定(pybind11,见仓库 build_py):
import wapic
seg = wapic.Segmenter("model/wapic-cws.wac")
seg.cut("中华人民共和国是一个伟大的国家")
训练
两阶段 warm-start:model/wapic-cws-base.wac(Stage-1,12M LTP 语料)
→ 在 name-rich / 现代语料 mix 上 --init-from fine-tune → 剪枝。
完整配方与数据见数据集仓库 Ismantic/wapic-cws-data 的 RELEASE_TRAINING_DATA.md。
许可
MIT(代码/模型权重)。训练语料源自人民日报 1998、LTP 标注及公开新闻语料, 原始语料版权归各自所有者。