vlambda博客
学习文章列表

中文分词工具包的比较以及ThemeRiver

英文单词与单词间存有空格,中文词与词之间则没有界限。例如,“我爱北京天安门”通常认为包括四个词:我、爱、北京、天安门。将中文句子拆成词,即为中文分词。它是中文文本处理的一个基础步骤。

中文分词目前基本由计算机来做,由于分词粒度(例如,“北京社会科学院大学”是一个词还是四个词?)、歧义、未登录词(如“打call”)等原因,由计算机进行中文分词难以做到100%准确(见https://www.zhihu.com/question/19578687)。

目前的中文分词工具有:结巴分词(jieba)、北大pkuseg、清华THULAC、北理工的nlpir、一家青岛公司的hanlp、国人开发的snownlp 等等。

这些工具包之间的竞争自然是无可避免,常用的比较指标包括:分词准确性 与速度。分词准确性常用Precision(精确率)、Recall(召回率)、F1 值(见https://www.zhihu.com/question/30643044)。其中的F1值是一个综合考虑精确率和召回率的指标。

网络上的比较结果各不相同,可能主要是由于所用测试数据以及测试时间不同。各工具包的版本在不断的升级……

本文以pku_training.utf8和pku_test.utf8为训练集和测试集,参考https://github.com/mdzzmdzzmdzz/Daily_Code/tree/main/中文分词,利用python代码,比较了jieba(及其变体jieba_fast)、pkuseg、snownlp和hanlp,结果如下。THULAC和nlpir由于某种原因,没有得出结果(再鼓捣一下可能会有结果,但我失去了耐心)。

方法 Precision Recall F1 所用时间(秒)
jieba 0.5195 0.4856 0.5020 204.5374
jieba_fast 0.5195 0.4856 0.5020 194.2756
pkuseg 0.5958 0.5744 0.5849 266.2837
snownlp 0.5872 0.5759 0.5815 842.9314
hanlp 0.5399 0.4980 0.5181 38.6851

速度最快的是 hanlp,准确性最高的是 pkuseg。pkuseg准确性最高可能是由于它采用大量人民日报语料进行了训练,而测试集也是新闻语料。


利用pkuseg分词工具,使用一台10核20线程32G内存的电脑,将人民日报的新闻语料分词,电脑跑了近15小时才完成。

使用Matplotlib包的Themeriver Stackplot,对一些关键词在人民日报语料中出现的频次,进行了可视化(1946-2003年)。以下为三个例子。

Fig. 1 历时可见度:翻译

Fig. 2 历时可见度:翻译与文化(翻译在文化中的重要性?)

Fig. 3 历时可见度:几个国家

注:1992年的语料可能有问题,还没有细看。