中文分词是中文自然语言处理中的重要的步骤,有一个更高精度的中文分词模型会显著提升文档分类、情感预测、社交媒体处理等任务的效果[1]。
Pubseg是基于BiLSTM中文分词工具,基于ICWS2005PKU语料训练集训练而成,其优点在于在ICWS2005-PKU语料下训练精度达到99.99%,测试集上精度94.34%,召回94.21%, F1值94.26%。
分词模型是基于Keras设计,其详细描述见[2],其模型结构如图1:
在ICWS2005PKU测试集下比较jieba、IK、pkuseg、Stanza的评价,其对比结果如图2所示:
下面介绍如何安装使用Pubseg工具。准备工作,准备python3.6以上版本。安装依赖: numpy==1.18.1, keras==2.2.4, tensorflow-gpu==1.15.2
。
下载Pubseg中文分词模型,由于模型太大,结构文件与权重文件分开存储。下载地址如下:https://pan.baidu.com/s/1LnjZD9HVQ164uAe0-XpPsg
;提取码:zm41
;也可以扫码下载,下载地址见图3:
模型下载后,需要下载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