中文分词工具包的比较以及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年的语料可能有问题,还没有细看。