文章目录
- pkuseg:中文分词这件事,它分得很细
- 1、为什么还需要一个新的分词工具
- 2、分词效果到底怎么样
- 3、怎么用
- 4、谁适合用
pkuseg:中文分词这件事,它分得很细
pkuseg 在 GitHub 上已经拿到 6,706 Star 了。
北大语言计算与机器学习研究组开源了这个工具,专门干一件事:多领域中文分词。支持新闻、网络、医药、旅游等多个细分领域的预训练模型,分词准确率压过 jieba 和 THULAC,还支持用户自训练模型和词性标注。
1、为什么还需要一个新的分词工具
中文分词这件事,jieba 已经足够好用了。但 jieba 的设计思路是通用的,不管什么领域的文本,用的都是同一套模型。
pkuseg 走的是另一条路:不同领域的文本,用不同的模型。新闻稿的语言习惯和微博评论不一样,医药文献的术语体系和旅游攻略也不一样。用一套通用模型硬切所有领域,效果总是差一口气。
pkuseg 给每个领域单独训练了预训练模型,用户分词时可以根据自己的文本类型选择对应的模型域。如果你不确定文本属于哪个领域,也可以用混合领域上训练的通用模型兜底。
2、分词效果到底怎么样
pkuseg 在 MSRA 新闻数据集上的 F-score 达到 96.88,jieba 是 88.42,THULAC 是 95.71。在微博数据集上,pkuseg 的 F-score 是 94.21,同样领先 jieba 的 87.66 和 THULAC 的 92.87。
用默认模型做跨领域对比,pkuseg 在四个测试集上的平均 F-score 是 91.29,THULAC 是 88.08,jieba 是 81.61。
这些数字意味着什么?jieba 每切 10 个词就错 1 个以上,pkuseg 每切 100 个词才错 3 个左右。在搜索引擎、文本分类、情感分析这些需要高精度分词的下游任务里,上游几个点的差距传到下游会被逐级放大。
3、怎么用
安装很简单,pip 一行搞定:
pip3installpkuseg基础分词只需要三行代码:
importpkuseg seg=pkuseg.pkuseg()text=seg.cut('我爱北京天安门')print(text)如果明确知道文本的领域,可以直接指定模型,程序会自动下载对应的领域模型:
seg=pkuseg.pkuseg(model_name='medicine')目前支持的领域模型有:news(新闻)、web(网络)、medicine(医药)、tourism(旅游),以及 mixed(混合通用)。通过领域自适应方法,还额外提供了 art(艺术文化)、entertainment(娱乐体育)、science(科学)三个模型,可以在 release 页面单独下载。
开启词性标注只需要把 postag 参数设为 True:
seg=pkuseg.pkuseg(postag=True)批量处理文件可以用内置的多进程方法,开 20 个进程并行切分:
pkuseg.test('input.txt','output.txt',nthread=20)如果现有领域模型都够不着你的业务场景,pkuseg 还支持用自己的标注数据训练模型:
pkuseg.train('train.txt','test.txt','./saved_model')4、谁适合用
做中文 NLP 系统的开发者,jieba 的准确率已经卡住瓶颈了,换 pkuseg 的领域模型能把分词准确率往上拉几个百分点。做垂直领域文本处理的团队,可以用自己的标注数据训练一个专属模型,精准适配业务场景。科研场景下,论文提供了完整的实验数据和对比基准,拿过来就能做消融实验和后续研究。
pkuseg 的代码采用 MIT 许可证,可以自由用于商业项目。
研场景下,论文提供了完整的实验数据和对比基准,拿过来就能做消融实验和后续研究。
pkuseg 的代码采用 MIT 许可证,可以自由用于商业项目。