pkuseg:一个多领域中文分词工具包

pkuseg简单易用,支持细分领域分词,有效提升了分词准确度。

目录

  • 主要亮点
  • 编译和安装
  • 各类分词工具包的性能对比
  • 使用方式
  • 相关论文
  • 作者
  • 常见问题及解答

主要亮点

pkuseg具有如下几个特点:

  1. 多领域分词。不同于以往的通用中文分词工具,此工具包同时致力于为不同领域的数据提供个性化的预训练模型。根据待分词文本的领域特点,用户可以自由地选择不同的模型。 我们目前支持了新闻领域,网络领域,医药领域,旅游领域,以及混合领域的分词预训练模型。在使用中,如果用户明确待分词的领域,可加载对应的模型进行分词。如果用户无法确定具体领域,推荐使用在混合领域上训练的通用模型。各领域分词样例可参考 example.txt。
  2. 更高的分词准确率。相比于其他的分词工具包,当使用相同的训练数据和测试数据,pkuseg可以取得更高的分词准确率。
  3. 支持用户自训练模型。支持用户使用全新的标注数据进行训练。
  4. 支持词性标注。

编译和安装

  • 目前仅支持python3
  • 新版本发布:2019-1-23
    • 修改了词典处理方法,扩充了词典,分词效果有提升
    • 效率进行了优化,测试速度较之前版本提升9倍左右
    • 增加了在大规模混合数据集训练的通用模型,并将其设为默认使用模型
  • 新版本发布:2019-1-30
    • 支持fine-tune训练(从预加载的模型继续训练),支持设定训练轮数
  • 新版本发布:2019-2-20
    • 支持词性标注,增加了医疗、旅游细领域模型
  • 为了获得好的效果和速度,强烈建议大家通过pip install更新到目前的最新版本
  1. 通过PyPI安装(自带模型文件):

    1. pip3 install pkuseg
    2. 之后通过import pkuseg来引用

    建议更新到最新版本以获得更好的开箱体验:

    pip3 install -U pkuseg
  2. 如果PyPI官方源下载速度不理想,建议使用镜像源,比如:
    初次安装:

    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pkuseg

    更新:

    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -U pkuseg

    注意:安装方式一和二目前仅支持linux,mac,windows 64 位的python3.5,python 3.6,python 3.7版本。

  3. 如果不使用pip安装方式,选择从GitHub下载,可运行以下命令安装:

    python setup.py build_ext -i

    GitHub的代码并不包括预训练模型,因此需要用户自行下载或训练模型,预训练模型可详见release。使用时需设定"model_name"为模型文件。

各类分词工具包的性能对比

我们选择jieba、THULAC等国内代表分词工具包与pkuseg做性能比较。

考虑到jieba分词和THULAC工具包等并没有提供细领域的预训练模型,为了便于比较,我们重新使用它们提供的训练接口在细领域的数据集上进行训练,用训练得到的模型进行中文分词。

我们选择Linux作为测试环境,在新闻数据(MSRA)、混合型文本(CTB8)、网络文本(WEIBO)数据上对不同工具包进行了准确率测试。我们使用了第二届国际汉语分词评测比赛提供的分词评价脚本。其中MSRA与WEIBO使用标准训练集测试集划分,CTB8采用随机划分。对于不同的分词工具包,训练测试数据的划分都是一致的;即所有的分词工具包都在相同的训练集上训练,在相同的测试集上测试。对于所有数据集,pkuseg使用了不使用词典的训练和测试接口。以下是pkuseg训练和测试代码示例:

  1. pkuseg.train('msr_training.utf8', 'msr_test_gold.utf8', './models')
  2. pkuseg.test('msr_test.raw', 'output.txt', user_dict=None)

细领域训练及测试结果

以下是在不同数据集上的对比结果:

MSRAPrecisionRecallF-score
jieba87.0189.8888.42
THULAC95.6095.9195.71
pkuseg96.9496.8196.88
WEIBOPrecisionRecallF-score
jieba87.7987.5487.66
THULAC93.4092.4092.87
pkuseg93.7894.6594.21

默认模型在不同领域的测试效果

考虑到很多用户在尝试分词工具的时候,大多数时候会使用工具包自带模型测试。为了直接对比“初始”性能,我们也比较了各个工具包的默认模型在不同领域的测试效果。请注意,这样的比较只是为了说明默认情况下的效果,并不一定是公平的。

DefaultMSRACTB8PKUWEIBOAll Average
jieba81.4579.5881.8383.5681.61
THULAC85.5587.8492.2986.6588.08
pkuseg87.2991.7792.6893.4391.29

其中,All Average显示的是在所有测试集上F-score的平均。

更多详细比较可参见和现有工具包的比较。

使用方式

代码示例

以下代码示例适用于python交互式环境。

代码示例1:使用默认配置进行分词(如果用户无法确定分词领域,推荐使用默认模型分词)

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

代码示例2:细领域分词(如果用户明确分词领域,推荐使用细领域模型分词)

  1. import pkuseg
  2. seg = pkuseg.pkuseg(model_name='medicine') # 程序会自动下载所对应的细领域模型
  3. text = seg.cut('我爱北京天安门') # 进行分词
  4. print(text)

代码示例3:分词同时进行词性标注,各词性标签的详细含义可参考 tags.txt

  1. import pkuseg
  2. seg = pkuseg.pkuseg(postag=True) # 开启词性标注功能
  3. text = seg.cut('我爱北京天安门') # 进行分词和词性标注
  4. print(text)

代码示例4:对文件分词

  1. import pkuseg
  2. # 对input.txt的文件分词输出到output.txt中
  3. # 开20个进程
  4. pkuseg.test('input.txt', 'output.txt', nthread=20)

代码示例5:额外使用用户自定义词典

  1. import pkuseg
  2. seg = pkuseg.pkuseg(user_dict='my_dict.txt') # 给定用户词典为当前目录下的"my_dict.txt"
  3. text = seg.cut('我爱北京天安门') # 进行分词
  4. print(text)

代码示例6:使用自训练模型分词(以CTB8模型为例)

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

代码示例7:训练新模型 (模型随机初始化)

  1. import pkuseg
  2. # 训练文件为'msr_training.utf8'
  3. # 测试文件为'msr_test_gold.utf8'
  4. # 训练好的模型存到'./models'目录下
  5. # 训练模式下会保存最后一轮模型作为最终模型
  6. # 目前仅支持utf-8编码,训练集和测试集要求所有单词以单个或多个空格分开
  7. pkuseg.train('msr_training.utf8', 'msr_test_gold.utf8', './models')

代码示例8:fine-tune训练(从预加载的模型继续训练)

  1. import pkuseg
  2. # 训练文件为'train.txt'
  3. # 测试文件为'test.txt'
  4. # 加载'./pretrained'目录下的模型,训练好的模型保存在'./models',训练10轮
  5. pkuseg.train('train.txt', 'test.txt', './models', train_iter=10, init_model='./pretrained')

参数说明

模型配置

  1. pkuseg.pkuseg(model_name = "default", user_dict = "default", postag = False)
  2. model_name 模型路径。
  3. "default",默认参数,表示使用我们预训练好的混合领域模型(仅对pip下载的用户)。
  4. "news", 使用新闻领域模型。
  5. "web", 使用网络领域模型。
  6. "medicine", 使用医药领域模型。
  7. "tourism", 使用旅游领域模型。
  8. model_path, 从用户指定路径加载模型。
  9. user_dict 设置用户词典。
  10. "default", 默认参数,使用我们提供的词典。
  11. None, 不使用词典。
  12. dict_path, 在使用默认词典的同时会额外使用用户自定义词典,可以填自己的用户词典的路径,词典格式为一行一个词。
  13. postag 是否进行词性分析。
  14. False, 默认参数,只进行分词,不进行词性标注。
  15. True, 会在分词的同时进行词性标注。

对文件进行分词

  1. pkuseg.test(readFile, outputFile, model_name = "default", user_dict = "default", postag = False, nthread = 10)
  2. readFile 输入文件路径。
  3. outputFile 输出文件路径。
  4. model_name 模型路径。同pkuseg.pkuseg
  5. user_dict 设置用户词典。同pkuseg.pkuseg
  6. postag 设置是否开启词性分析功能。同pkuseg.pkuseg
  7. nthread 测试时开的进程数。

模型训练

  1. pkuseg.train(trainFile, testFile, savedir, train_iter = 20, init_model = None)
  2. trainFile 训练文件路径。
  3. testFile 测试文件路径。
  4. savedir 训练模型的保存路径。
  5. train_iter 训练轮数。
  6. init_model 初始化模型,默认为None表示使用默认初始化,用户可以填自己想要初始化的模型的路径如init_model='./models/'

多进程分词

当将以上代码示例置于文件中运行时,如涉及多进程功能,请务必使用if __name__ == '__main__'保护全局语句,如:
mp.py文件

  1. import pkuseg
  2. if __name__ == '__main__':
  3. pkuseg.test('input.txt', 'output.txt', nthread=20)
  4. pkuseg.train('msr_training.utf8', 'msr_test_gold.utf8', './models', nthread=20)

运行

python3 mp.py

详见无法使用多进程分词和训练功能,提示RuntimeError和BrokenPipeError。

在Windows平台上,请当文件足够大时再使用多进程分词功能,详见关于多进程速度问题。

预训练模型

从pip安装的用户在使用细领域分词功能时,只需要设置model_name字段为对应的领域即可,会自动下载对应的细领域模型。

从github下载的用户则需要自己下载对应的预训练模型,并设置model_name字段为预训练模型路径。预训练模型可以在release部分下载。以下是对预训练模型的说明:

  • news: 在MSRA(新闻语料)上训练的模型。

  • web: 在微博(网络文本语料)上训练的模型。

  • medicine: 在医药领域上训练的模型。

  • tourism: 在旅游领域上训练的模型。

  • mixed: 混合数据集训练的通用模型。随pip包附带的是此模型。

欢迎更多用户可以分享自己训练好的细分领域模型。

版本历史

  • v0.0.11(2019-01-09)
    • 修订默认配置:CTB8作为默认模型,不使用词典
  • v0.0.14(2019-01-23)
    • 修改了词典处理方法,扩充了词典,分词效果有提升
    • 效率进行了优化,测试速度较之前版本提升9倍左右
    • 增加了在大规模混合数据集训练的通用模型,并将其设为默认使用模型
  • v0.0.15(2019-01-30)
    • 支持fine-tune训练(从预加载的模型继续训练),支持设定训练轮数
  • v0.0.18(2019-02-20)
    • 支持词性标注,增加了医疗、旅游两个细领域模型

开源协议

  1. 本代码采用MIT许可证。
  2. 欢迎对该工具包提出任何宝贵意见和建议,请发邮件至jingjingxu@pku.edu.cn。

相关论文

该代码包主要基于以下科研论文,如使用了本工具,请引用以下论文:

  • 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

传送门

PKUSeg的作者有三位,Ruixuan Luo (罗睿轩),Jingjing Xu (许晶晶) ,以及Xu Sun (孙栩) 。

工具包的诞生,也是基于其中两位参与的ACL论文

准确率又那么高,还不去试试?

GitHub传送门:
https://github.com/lancopku/PKUSeg-python

论文传送门:

 

http://www.aclweb.org/anthology/P12-1027

 

 

http://aclweb.org/anthology/P16-2092

 

转载于:https://www.cnblogs.com/zhangyafei/p/10520960.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

积木Sketch Plugin:设计同学的贴心搭档

| A consistent experience is a better experience.——Mark Eberman | 一致的体验是更好的体验。——Mark Eberman 《摘自设计师的16句名言》 背景 1.UI一致性项目 积木(Tangram)Sketch插件源于美团外卖UI的一致性项目,该项目自2019年5月份…

简单讲述一下Intent的传值过程

昨晚带女友Android入门,她本是照着一本书敲得,可以运行,后来她自己凭思维自己写了一个,然后出现了值没有传过来的问题,然后简单的了解了一下Intent是如何传递数据的。 我们的例子是这样的: 由A Activity通…

何恺明团队:stop gradient是孪生网络对比学习成功的关键

文 | Happy源 | 极市平台本文是FAIR的陈鑫磊&何恺明大神在无监督学习领域又一力作,提出了一种非常简单的表达学习机制用于避免表达学习中的“崩溃”问题,从理论与实验角度证实了所提方法的有效性;与此同时,还侧面证实了对比学…

美团无人配送CVPR2020论文CenterMask解读

计算机视觉技术是实现自动驾驶的重要部分,美团无人配送团队长期在该领域进行着积极的探索。不久前,高精地图组提出的CenterMask图像实例分割算法被CVPR2020收录,本文将对该方法进行介绍。 CVPR的全称是IEEE Conference on Computer Vision an…

如何使用ListView实现一个带有网络请求,解析,分页,缓存的公共的List页面来大大的提高工作效率

在平常的开发中经常会有很多列表页面,每做一个列表页就需要创建这个布局文件那个Adapter适配器文件等等一大堆与之相关的附属的不必要的冗余文件。如果版本更新迭代比较频繁,如此以往,就会使项目工程变得无比庞大臃肿。 如果看过这篇文章或者…

从信息检索顶会CIKM'20看搜索、推荐与计算广告新进展

文 | 谷育龙Eric源 | 搜索推荐广告排序艺术我是谷育龙Eric,研究方向有深度学习、搜索推荐,喜欢为大家分享深度学习在搜索推荐广告排序应用的文章。CIKM作为信息检索、数据挖掘等领域的国际一流会议,每年都有很多搜索推荐广告领域的精彩论文。…

复杂风控场景下,如何打造一款高效的规则引擎

| 在互联网时代,安全已经成为企业的命脉。美团信息安全团队需要采用各种措施和手段来保障业务安全,从而确保美团平台上的用户和商户利益不会受到侵害。 本文主要介绍了美团在打造自有规则引擎Zeus(中文名“宙斯”)的过程中&#x…

Android消息队列图片记录

很早之前为了给学生讲明白整个消息队列是怎么个情况,于是大概阅读了一下消息队列的整个工作过程,鉴于网上大部分都是文字说明,没有一个图例,于是做出了下面这张图,权当作以后复习之用,也供大家学习参考&…

Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!

原文连接:https://blog.csdn.net/u011535541/article/details/83379151 转载自 Git使用教程 预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料)一:Git是什么? Git是目前世界上最先…

主动学习入门篇:什么是主动学习?有哪些具体应用

文 | 淘系技术部 初类来源 | 知乎在大数据和算力的助力下,深度学习掀起了一波浪潮,在许多领域取得了显著的成绩。以监督学习为主的深度学习方法,往往期望能够拥有大量的标注样本进行训练,模型能够学到更多有价值的知识&#xff08…

LeetCode 59. 螺旋矩阵 II LeetCode 54. 螺旋矩阵

文章目录1. 题目信息2. LeetCode 59 解题3. LeetCode 54. 螺旋矩阵4.《剑指Offer》面试题291. 题目信息 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例:输入: 3 输出: [[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7…

如何查看Activity任务栈以及dumpsys_activity命令的简要使用及介绍

今天看到淘宝客户端的某个页面效果,效果是在两个Activity中做动画,为了知道究竟是不是在同一个Activity中做的效果,就必须采取一种手段来知道是不是同一个Activity.描述一下这个动画效果:列表页面点击图片,图片会滑动到…

论文浅尝 | 基于微量资源的神经网络跨语言命名实体识别

论文笔记整理:谭亦鸣,东南大学博士生,研究方向为跨语言知识图谱问答。来源:EMNLP 2018链接:https://www.aclweb.org/anthology/D18-1034问题背景与动机本文关注小语种/资源匮乏语言的跨语言命名实体识别问题&#xff0…

美团命名服务的挑战与演进

| 本文根据美团基础架构部技术专家舒超在2019 ArchSummit(全球架构师峰会)上的演讲内容整理而成。 命名服务主要解决微服务拆分后带来的服务发现、路由隔离等需求,是服务治理的基石。美团命名服务(以下简称MNS)作为服务…

NeurIPS 2020 | 自步对比学习:充分挖掘无监督学习样本

文 | 葛艺潇源 | PaperWeekly本文介绍一篇我们发表于 NeurIPS-2020 的论文《Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID》,该工作提出自步对比学习框架及混合记忆模型,旨在解决无监督及领域自适应表征学习中…

Postman安装与使用

原文链接:https://blog.csdn.net/fxbin123/article/details/80428216 一、Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。…

LeetCode 35. 搜索插入位置(二分查找)

文章目录1. 题目信息2. 解题2.1 暴力遍历2.2 二分查找1. 题目信息 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1:输入…

青年人在美团是怎样成长的?

2020年五四青年节,我们采访了美团技术团队9位青年代表,他们是来自清华大学、北京大学、中国科学院大学等国内高校的2位博士研究生和7位硕士研究生。在这个属于青年人的特别的日子里,我们请他们分享了自己在美团成长的故事。 道阻且长&#xf…

它来了它来了!2020深度学习硬核技术干货集锦!

这份干货来自于今天要给大家推荐的一个深度学习与计算机视觉领域知名公众号:「极市平台」。从2016年创立至今,极市平台深耕于DL与CV领域,输出300篇高质量原创文章,并积累了近10万名海内外专业算法开发者。极市平台公众号坚持每日更…

容器的使用和创建虚拟环境 vitualenv

xshell jupter容器的使用方法 #容器相当于子服务器 1 创建指定python版本的虚拟环境 方法1: 1.安装虚拟环境的第三方包 venv pip install venv 2.创建虚拟环境 cd 到存放虚拟环境的地址 在当前目录下创建名为env的虚拟环境: python -m venv env python…