Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

作者:罗睿轩、许晶晶、孙栩

北大开源全新中文分词工具包:准确率远超THULAC、结巴分词

最近,北大开源了一个中文分词工具包,它在多个分词数据集上都有非常高的分词准确率。其中广泛使用的结巴分词误差率高达 18.55% 和 20.42,而北大的 pkuseg 只有 3.25% 与 4.32%。

pkuseg 是由北京大学语言计算与机器学习研究组研制推出的一套全新的中文分词工具包。它简单易用,支持多领域分词,在不同领域的数据上都大幅提高了分词的准确率

  • 项目地址:https://github.com/lancopku/PKUSeg-python

pkuseg 具有如下几个特点:

  • 高分词准确率:相比于其他的分词工具包,该工具包在不同领域的数据上都大幅提高了分词的准确度。根据北大研究组的测试结果,pkuseg 分别在示例数据集(MSRA 和 CTB8)上降低了 79.33% 和 63.67% 的分词错误率。

  • 多领域分词:研究组训练了多种不同领域的分词模型。根据待分词的领域特点,用户可以自由地选择不同的模型。

  • 支持用户自训练模型:支持用户使用全新的标注数据进行训练。

此外,作者们还选择 THULAC、结巴分词等国内代表分词工具包与 pkuseg 做性能比较。他们选择 Linux 作为测试环境,在新闻数据(MSRA)和混合型文本(CTB8)数据上对不同工具包进行了准确率测试。此外,测试使用的是第二届国际汉语分词评测比赛提供的分词评价脚本。评测结果如下:

我们可以看到,最广泛使用的结巴分词准确率最低,清华构建的 THULAC 分词准确率也没有它高。当然,pkuseg 是在这些数据集上训练的,因此它在这些任务上的准确率也会更高一些。

预训练模型

分词模式下,用户需要加载预训练好的模型。研究组提供了三种在不同类型数据上训练得到的模型,根据具体需要,用户可以选择不同的预训练模型。以下是对预训练模型的说明:

  • MSRA:在 MSRA(新闻语料)上训练的模型。新版本代码采用的是此模型。

  • CTB8:在 CTB8(新闻文本及网络文本的混合型语料)上训练的模型。

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

其中,MSRA 数据由第二届国际汉语分词评测比赛提供,CTB8 数据由 LDC 提供,WEIBO 数据由 NLPCC 分词比赛提供。在 GitHub 项目中,这三个预训练模型都提供了下载地址。

安装与使用

pkuseg 的安装非常简单,我们可以使用 pip 安装,也可以直接从 GitHub 下载:

pip install pkuseg

使用 pkuseg 实现分词也很简单,基本上和其它分词库的用法都差不多:

'''代码示例1: 使用默认模型及默认词典分词'''
import pkuseg

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

'''代码示例2: 设置用户自定义词典'''
import pkuseg

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

'''代码示例3'''
import pkuseg

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

对于大型文本数据集,如果需要快速分词的话,我们也可以采用多线程的方式:

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

最后,pkuseg 还能重新训练一个分词模型:

'''代码示例5'''
import pkuseg

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

这些都是 GitHub 上的示例,详细的内容请参考 GitHub 项目,例如参数说明和参考论文等。

入门分词NLP中文
84
相关数据
机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

推荐文章
简单用了文本测试一下: "中文混合英文混合test,期望输出是english word as english word" pkuseg: 中文/ 混合/ 英文/ / 混合/ te/ st/ ,/ / 期望/ 输出/ 是/ e/ n/ g/ l/ i/ s/ h/ wo/ rd/ as/ en/ g/ l/ i/ s/ h/ wo/ rd jieba: 中文/ 混合/ 英文/ / 混合/ test/ ,/ / 期望/ 输出/ 是/ english/ / word/ / as/ / english/ / word "权重和算力集中在极少数巨鲸手里" pkusg: 权重/ 和/ 算力/ 集中/ 在/ 极/ 少数/ 巨/ 鲸/ 手/ 里 jieba: 权重/ 和/ 算力/ 集中/ 在/ 极少数/ 巨鲸/ 手里 明显是久经考验的jieba胜出。没想到你这样浓眉大眼的人居然也。。。
引用 "pkuseg 是在这些数据集上训练的,因此它在这些任务上的准确率也会更高一些", 这种数据评测方式本身就有问题。拟合拟合再拟合,拟合整个数据集,到别的数据集就不行了,单个数据集的过拟合,呵呵
哇!!!你这对比试验确定不是为了给北大招黑用的???看看人在北大自己的对比是怎么做的吧,什么人都能当小编吗?
机器之心・产品经理
回复Chaos
那个……对比实验是 pkuseg 的作者做的……和小编好像没啥关系……