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

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: pkuseg-python简单易用,支持多领域分词,在不同领域的数据上都大幅提高了分词的准确率。

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 使用默认模型及默认词典分词

import pkuseg
seg = pkuseg.pkuseg() #以默认配置加载模型
text = seg.cut('我爱北京天安门') #进行分词
print(text)

loading model
finish
['我', '爱', '北京', '天安门']


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

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

loading model
finish
['我', '爱', '北京天安门']


代码示例3 指定模型


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

import pkuseg
seg = pkuseg.pkuseg(model_name='ctb8') #假设用户已经下载好了ctb8的模型并放在了'./ctb8'目录下,通过设置model_name加载该模型
text = seg.cut('我爱北京天安门') #进行分词
print(text)

loading model
finish
['我', '爱', '北京', '天安门']


代码示例4 支持多线程


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

import pkuseg
pkuseg.test('data/input.txt', 'data/output.txt', nthread=20) #对input.txt的文件分词输出到output.txt中,使用默认模型和词典,开20个进程

loading model
finish
Total time: 128.30054664611816


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


代码示例5 训练模型


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

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


5 参数说明


pkuseg.pkuseg(model_name='msra', user_dict='safe_lexicon')
model_name      模型路径。默认是'msra'表示我们预训练好的模型(仅对pip下载的用户)。用户可以填自己下载或训练的模型所在的路径如model_name='./models'。
user_dict       设置用户词典。默认为'safe_lexicon'表示我们提供的一个中文词典(仅pip)。用户可以传入一个包含若干自定义单词的迭代器。

pkuseg.test(readFile, outputFile, model_name='msra', user_dict='safe_lexicon', nthread=10)
readFile        输入文件路径
outputFile      输出文件路径
model_name      同pkuseg.pkuseg
user_dict       同pkuseg.pkuseg
nthread         测试时开的进程数

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再进行一次词性标注(未验证)。
相关文章
|
2月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
62 4
|
4天前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
2月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
2月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1天前
|
程序员 Linux Python
python中模板和包的使用
本文介绍了 Python 模块和包的基本概念及使用方法。模块是 Python 程序结构的核心,每个以 `.py` 结尾的源文件都是一个模块,包含可重用的代码。文章详细讲解了模块的导入方式(如 `import` 和 `from...import`),模块的搜索顺序,以及如何创建和发布自己的模块。此外,还介绍了包的概念,包是包含多个模块的特殊目录,并通过 `__init__.py` 文件定义对外提供的模块列表。最后,文章简述了如何使用 `pip` 工具管理第三方模块的安装与卸载。作者:大石头的笔记;来源:稀土掘金。
|
1月前
|
数据可视化 编译器 Python
Manim:数学可视化的强大工具 | python小知识
Manim(Manim Community Edition)是由3Blue1Brown的Grant Sanderson开发的数学动画引擎,专为数学和科学可视化设计。它结合了Python的灵活性与LaTeX的精确性,支持多领域的内容展示,能生成清晰、精确的数学动画,广泛应用于教育视频制作。安装简单,入门容易,适合教育工作者和编程爱好者使用。
302 7
|
1月前
|
Python 容器
[oeasy]python048_用变量赋值_连等赋值_解包赋值_unpack_assignment _
本文介绍了Python中变量赋值的不同方式,包括使用字面量和另一个变量进行赋值。通过`id()`函数展示了变量在内存中的唯一地址,并探讨了变量、模块、函数及类类型的地址特性。文章还讲解了连等赋值和解包赋值的概念,以及如何查看已声明的变量。最后总结了所有对象(如变量、模块、函数、类)都有其类型且在内存中有唯一的引用地址,构成了Python系统的基石。
30 5
|
2月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
49 5
|
2月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
2月前
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
236 4