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

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
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再进行一次词性标注(未验证)。
相关文章
|
10天前
|
人工智能 自然语言处理 语音技术
利用Python进行自然语言处理(NLP)
利用Python进行自然语言处理(NLP)
24 1
|
12天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
19 2
|
12天前
|
C语言 开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第21天】在Python的世界里,代码的优雅与效率同样重要。列表推导式(List Comprehensions)作为一种强大而简洁的工具,允许开发者通过一行代码完成对列表的复杂操作。本文将深入探讨列表推导式的使用方法、性能考量以及它如何提升代码的可读性和效率。
|
21天前
|
人工智能 自然语言处理 语音技术
利用Python进行自然语言处理(NLP)
利用Python进行自然语言处理(NLP)
26 3
|
22天前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
40 2
|
30天前
|
测试技术 Python
Python MagicMock: Mock 变量的强大工具
Python MagicMock: Mock 变量的强大工具
|
1月前
|
存储 Python
python数据类型、debug工具(一)
python数据类型、debug工具(一)
|
9天前
|
C语言 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第24天】在Python编程的世界中,追求代码的简洁性和可读性是永恒的主题。列表推导式(List Comprehensions)作为Python语言的一个特色功能,提供了一种优雅且高效的方法来创建和处理列表。本文将深入探讨列表推导式的使用场景、语法结构以及如何通过它简化日常编程任务。
|
1月前
|
网络协议 IDE iOS开发
Python编程---简单的聊天工具
Python编程---简单的聊天工具
|
1月前
|
数据处理 开发者 Python
Python编程中的列表推导式:简洁而强大的工具
【9月更文挑战第35天】在Python的众多特性中,列表推导式以其简明扼要和强大功能脱颖而出。本文不仅将介绍列表推导式的基础知识,还将探讨其背后的逻辑,并辅以实际代码示例。无论你是初学者还是有经验的开发者,都能从中获取新的见解和应用技巧。
25 5