中文分词是中文自然语言处理中的重要的步骤,有一个更高精度的中文分词模型会显著提升文档分类、情感预测、社交媒体处理等任务的效果[1]。

Pubseg是基于BiLSTM中文分词工具,基于ICWS2005PKU语料训练集训练而成,其优点在于在ICWS2005-PKU语料下训练精度达到99.99%,测试集上精度94.34%,召回94.21%, F1值94.26%。

分词模型是基于Keras设计,其详细描述见[2],其模型结构如图1:




HanLP jieba 哪种分词效果好 jieba分词的优点_ik分词和jieba分词哪个好


图1 PretrainedUnigram+Bigram+Context+Dropout+BiLSTM+BN网络

在ICWS2005PKU测试集下比较jieba、IK、pkuseg、Stanza的评价,其对比结果如图2所示:


HanLP jieba 哪种分词效果好 jieba分词的优点_ik分词和jieba分词哪个好_02

图2 ICWS2005PKU测试集下比较jieba、IK、pkuseg、Stanza与Pubseg比较


下面介绍如何安装使用Pubseg工具。准备工作,准备python3.6以上版本。安装依赖: numpy==1.18.1, keras==2.2.4, tensorflow-gpu==1.15.2
下载Pubseg中文分词模型,由于模型太大,结构文件与权重文件分开存储。


图3 Pubseg中文分词模型下载地址

模型下载后,需要下载Pubseg代码git clone https://github.com/ShenDezhou/LSTM

下面介绍基本用法,

首先,创建一个PUB_BiLSTM_BN类的对象bilstm;

其次,通过命令行指定字典文件和模型文件路径:-u <unigramfile> -b <bigramfile> -a <archfile> -w <weightfile>,默认路径为:


UNIGRAM = 'pku_dic/pku_dict.utf8'  #字典
BIGRAM = 'pku_dic/pku_bigram.utf8'  #二字词典
MODELARCH = 'keras/B20-E60-F5-PU-Bi-Bn-De.json'  #keras模型
MODELWEIGHT = "keras/B20-E60-F5-PU-Bi-Bn-De-weights.h5"  #keras权重


再次,调用对象bilstm的加载Keras模型函数loadKeras;

最后,调用对象bilstm的cut函数,入参为待分词中文文本,返回结果为空格分隔后的中文文本。

完整代码如下:


bilstm = PUB_BiLSTM_BN()
bilstm.loadKeras()
segs = bilstm.cut(["我昨天去清华大学。", "他明天去北京大学,再后天去麻省理工大学。"])


完整代码见[3]。

模型的性能如下,在ICWS2005-PKU语料下训练精度达到99.99%,测试集上精度94.34%,召回94.21%, F1-值94.26%。

模型加载性能、推理性能:
CPU:Intel i56300HQ 2.30Ghz
SSD: Samsung 970 EVO 1TB M.2 NVMe PCIe SSD
GPU:GeForce GTX 950M-DDR3
字典加载时间:176ms
模型及权重加载时间:1m45s664ms

推理性能:
47.47ms/字 #以"我 昨天 去 清华 大学 。他 明天 去 北京 大学 , 再 后天 去 麻省 理工大学 。"为测试条件;
13.30ms/行 #以PKUTEST1944行 为测试条件。

结论,本文提出了一种基于预训练字与二字向量的BiLSTM中文分词工具Pubseg,其性能在PKU测试集上取得了超过同类分词模型的效果。

[1]待论证。

[2]基于Pretrained-UnigramBigram的中文分词模型 https://zhuanlan.zhihu.com/p/111681404

[3]Pubseg:一种单双字串的BiLSTM中文分词工具 https://github.com/ShenDezhou/LSTM