前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NLP系列(一)pkuseg-python:一个高准确度的中文分词工具包

NLP系列(一)pkuseg-python:一个高准确度的中文分词工具包

作者头像
致Great
发布2019-02-13 10:16:29
1.3K0
发布2019-02-13 10:16:29
举报
文章被收录于专栏:程序生活程序生活

1 简介

pkuseg-python简单易用,支持多领域分词,在不同领域的数据上都大幅提高了分词的准确率。

pkuseg是由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。pkuseg具有如下几个特点:

  1. 高分词准确率。相比于其他的分词工具包,我们的工具包在不同领域的数据上都大幅提高了分词的准确度。根据我们的测试结果,pkuseg分别在示例数据集(MSRA和CTB8)上降低了79.33%和63.67%的分词错误率。
  2. 多领域分词。我们训练了多种不同领域的分词模型。根据待分词的领域特点,用户可以自由地选择不同的模型。
  3. 支持用户自训练模型。支持用户使用全新的标注数据进行训练。

2 编译和安装

  1. 通过pip下载(自带模型文件)

pip install pkuseg 之后通过import pkuseg来引用

  1. 从github下载(需要下载模型文件,见预训练模型)

将pkuseg文件放到目录下,通过import pkuseg使用 模型需要下载或自己训练。

3 性能对比

pkuseg官方给出与来自清华的THULAC和目前主流中文分词工具jieba的比较效果,pkuseg的准确率远超于THULAC和jieba。

实验人员选择Linux作为测试环境,在新闻数据(MSRA)和混合型文本(CTB8)数据上对不同工具包进行了准确率测试,使用了第二届国际汉语分词评测比赛提供的分词评价脚本。评测结果如下:

MSRA

F-score

Error Rate

jieba

81.45

18.55

THULAC

85.48

14.52

pkuseg

96.75 (+13.18%)

3.25 (-77.62%)

CTB8

F-score

Error Rate

jieba

79.58

20.42

THULAC

87.77

12.23

pkuseg

95.64 (+8.97%)

4.36 (-64.35%)

我们可以看到从F1-Score和错误率上,pkuseg都明显优于另外两者

4 使用教程

代码实例1 使用默认模型及默认词典分词

代码语言:javascript
复制
import pkuseg
seg = pkuseg.pkuseg() #以默认配置加载模型
text = seg.cut('我爱北京天安门') #进行分词
print(text)
代码语言:javascript
复制
loading model
finish
['我', '爱', '北京', '天安门']

代码示例2 设置用户自定义词典

代码语言:javascript
复制
import pkuseg
lexicon = ['北京大学', '北京天安门'] #希望分词时用户词典中的词固定不分开
seg = pkuseg.pkuseg(user_dict=lexicon)  #加载模型,给定用户词典
text = seg.cut('我爱北京天安门')       #进行分词
print(text)
代码语言:javascript
复制
loading model
finish
['我', '爱', '北京天安门']

代码示例3 指定模型

默认情况下,pkuseg使用的预模型是msra

代码语言:javascript
复制
import pkuseg
seg = pkuseg.pkuseg(model_name='ctb8') #假设用户已经下载好了ctb8的模型并放在了'./ctb8'目录下,通过设置model_name加载该模型
text = seg.cut('我爱北京天安门') #进行分词
print(text)
代码语言:javascript
复制
loading model
finish
['我', '爱', '北京', '天安门']

代码示例4 支持多线程

可以指定输入和输出文件,直接从输入读取文本,将分词结果输出到结果文件

代码语言:javascript
复制
import pkuseg
pkuseg.test('data/input.txt', 'data/output.txt', nthread=20) #对input.txt的文件分词输出到output.txt中,使用默认模型和词典,开20个进程
代码语言:javascript
复制
loading model
finish
Total time: 128.30054664611816

刚开始input.txt只有一句话用了两分钟。另外怀疑时间不是按句子个数线性增加的,然后又向input.txt添了一篇文章,差不多100句话也是两分钟

代码示例5 训练模型

这部分因为还没确定msr_training.utf8里面数据的格式,没有训练集,先不做测试

代码语言:javascript
复制
import pkuseg
#训练文件为'msr_training.utf8',测试文件为'msr_test_gold.utf8',模型存到'./models'目录下,开20个进程训练模型
pkuseg.train('msr_training.utf8', 'msr_test_gold.utf8', './models', nthread=20) 

5 参数说明

代码语言:javascript
复制
pkuseg.pkuseg(model_name='msra', user_dict='safe_lexicon')
model_name      模型路径。默认是'msra'表示我们预训练好的模型(仅对pip下载的用户)。用户可以填自己下载或训练的模型所在的路径如model_name='./models'。
user_dict       设置用户词典。默认为'safe_lexicon'表示我们提供的一个中文词典(仅pip)。用户可以传入一个包含若干自定义单词的迭代器。
代码语言:javascript
复制
pkuseg.test(readFile, outputFile, model_name='msra', user_dict='safe_lexicon', nthread=10)
readFile        输入文件路径
outputFile      输出文件路径
model_name      同pkuseg.pkuseg
user_dict       同pkuseg.pkuseg
nthread         测试时开的进程数
代码语言:javascript
复制
pkuseg.train(trainFile, testFile, savedir, nthread=10)
trainFile       训练文件路径
testFile        测试文件路径
savedir         训练模型的保存路径
nthread         训练时开的进程数

6 相关论文

本工具包基于以下文献:

  • Xu Sun, Houfeng Wang, Wenjie Li. Fast Online Training with Frequency-Adaptive Learning Rates for Chinese Word Segmentation and New Word Detection. ACL. 253–262. 2012
  • Jingjing Xu, Xu Sun. Dependency-based Gated Recursive Neural Network for Chinese Word Segmentation. ACL 2016: 567-572

7 客观看待

  • 第一条 与其余分词工具包的性能对比是否公平

针对这个问题,有人也在issue提出了质疑,有兴趣大家可以看下,这里不做过多评价

  • 第二条 不支持词性标注 感觉这个可以和jieba结合使用,分完词之后空格隔开,然后jieba再进行一次词性标注(未验证)。

欢迎大家关注我的简书 致Great

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 简介
  • 2 编译和安装
  • 3 性能对比
  • 4 使用教程
    • 代码实例1 使用默认模型及默认词典分词
      • 代码示例2 设置用户自定义词典
        • 代码示例3 指定模型
          • 代码示例4 支持多线程
            • 代码示例5 训练模型
            • 5 参数说明
            • 6 相关论文
            • 7 客观看待
            相关产品与服务
            NLP 服务
            NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档