摘要:是一个开源的短文本包括标题短信问题句子等分类工具包。又比如,选择被误分的样本,调用输出和的混淆表格,以了解哪些类别的特征界限比较模糊。终端输出如下第一行表示预测类别,第一列表示真实类别完整请见。
LibShortText是一个开源的Python短文本(包括标题、短信、问题、句子等)分类工具包。它在LibLinear的基础上针对短文本进一步优化,主要特性有:
- 支持多分类
- 直接输入文本,无需做特征向量化的预处理
- 二元分词(Bigram),不去停顿词,不做词性过滤
- 基于线性核SVM分类器(参见SVM原理简介:最大间隔分类器),训练和测试的效率极高
- 提供了完整的API,用于特征分析和Bad Case检验
下载并在解压后的目录下make就OK了。
注意:不支持Windows系统;Mac OS和Linux之间的库不通用
关于LibShortText的性能,我们可以拿scikit-learn的朴素贝叶斯(参见用scikit-learn实现朴素贝叶斯分类器)和SVM(也是基于LibLinear)就前文提到的网页标题分类问题进行横向对比:
分类器 | 准确率 | 计算时间(秒) |
---|---|---|
scikit-learn(nb) | 76.8% | 134 |
scikit-learn(svm) | 76.9% | 121 |
libshorttext | 79.6% | 49 |
测试环境为低配版MBA2013
显然LibShortText无论在准确率和效率上都要更胜一筹。
API说明虽然LibShortText提供了训练和测试的类命令行操作方式,但直接从Python脚本调用更加灵活和强大,了解和训练、预测和分析相关的API是有帮助的。
预处理
Converter模块负责将文本转化为数值化的数据集(数据格式与LibSVM相同),由于内置的分词器仅支持英文,如果要用于中文短文本的分类,就必须替换分词器(如下代码所示)。分词器是一个将文本转化为单词列表的函数,值得注意的是:分词器不会和模型一起保存,当重载模型时也必须重载分词器。
pythonfrom libshorttext.libshorttext.converter import * text_converter = Text2svmConverter() text_converter.text_prep.tokenizer = comma_tokenizer convert_text(train_file, text_converter, svm_file)
训练文本的格式如下:
娱乐 组图:刘亦菲短裙秀腿 浓妆变冷艳时髦女
模型
LibShortText提供两组参数供训练时使用:
- train_arguments实际上是LibLinear的训练参数,可设定松弛参数C等
- feature_arguments是特征的表现形式,如词数、词频、TF-IDF等
预测
获得模型后,我们可以预测新文本的类别,LibShortText提供了两个API:
predict_text(text_file, model) -- 针对以行分隔的测试文本
predict_single_text(single_text, model) -- 针对单条文本
类别预测将返回一个PredictResult的对象,包含下列属性:
predicted_y -- 预测的类别(对单条文本预测时是字符串对象,对测试文本预测时是列表对象)
decvals -- 被预测文本对所有类别的决策变量,与文本到分类超平面的距离有关。它是一个列表而非字典对象,如果你希望和类别关联起来,可借助model的get_labels():
pythondecvals = zip(model.get_labels(), predict_result.decvals)
true_y -- 真实的类别(仅对测试文本预测时存在)
get_accuracy() -- 获得测试的准确率(仅对测试文本预测时存在)
分析
analyzer的作用是分析LibShortText的预测结果,通过它我们可以了解哪些特征更为关键、哪些类别容易被混淆。
比如分析一条体育新闻的标题:
pythonanalyzer = Analyzer(model) analyzer.analyze_single("国青错失绝杀0-0韩国 下轮平越南就出线")
终端输出如下:
sports | news | game | food | porn | |
---|---|---|---|---|---|
…… | |||||
国 青 | 4.600e-01 | -1.349e-01 | -4.283e-03 | 0.000e+00 | 0.000e+00 |
…… | |||||
decval | 1.192e+00 | 3.396e-01 | 3.132e-01 | 2.196e-01 | 1.910e-01 |
可见「国」和「青」一起促成最关键的sports类特征。
又比如,选择被误分的样本,调用gen_confusion_table()输出sports、star和movie的混淆表格,以了解哪些类别的特征界限比较模糊。
pythonanalyzer = Analyzer(model) insts = InstanceSet(predict_result).select(wrong, with_labels(["sports", "movie", "star"])) analyzer.gen_confusion_table(insts)
终端输出如下(第一行表示预测类别,第一列表示真实类别):
star | movie | sports | |
---|---|---|---|
star | 0 | 19 | 5 |
movie | 21 | 0 | 1 |
sports | 15 | 4 | 0 |
完整demo请见lst_classifier.py。
来自:建造者说
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37481.html
摘要:古龙说,无论什么东西,最好的都只有一种。经历半年的文本分类实践,我们基本已断定,最好的文本分类算法就是支持向量机。有没有可能把最好的文本分类算法,包装成一个超级简单的工具提供给大家这是我开发的初衷。 古龙说,无论什么东西,最好的都只有一种。经历半年的文本分类实践,我们基本已断定,最好的文本分类算法就是SVM -- 支持向量机。 但是纵然知道了天机,新手做文本分类仍然需要学习不少东西,例...
摘要:在线挑战,还没用过,貌似现在对英文资料心里还有种抵触,必须克服实验楼研发工程师包含了等学习课程。书的作者就是开发了用于数据分析的著名开源库的作者英文资料,对数据分析中要用到的一些库,等等做了简要介绍。形式的资料,示例代码都很全。 showImg(https://segmentfault.com/img/remote/1460000004852849); 一、说明 面对网络上纷繁复杂的资...
摘要:购买登录官网查看云服务器购买列表,购买时选择地区操作系统镜像等,购买云服务器后会发送短信通知,这里只列出一个阿里云尊敬的用户您的云服务器创建成功实例名称,公网。1.购买 登录官网查看云服务器购买列表,购买时选择地区、操作系统镜像等,购买云服务器后会发送短信通知,这里只列出一个: 【阿里云】尊敬的用户:您的云服务器ECS创建成功(实例名称:xxxxxxxxxx,公网IP:xxx.xxx.xxx...
摘要:购买登录官网查看云服务器购买列表,购买时选择地区操作系统镜像等,购买云服务器后会发送短信通知,这里只列出一个阿里云尊敬的用户您的云服务器创建成功实例名称,公网。1.购买 登录官网查看云服务器购买列表,购买时选择地区、操作系统镜像等,购买云服务器后会发送短信通知,这里只列出一个: 【阿里云】尊敬的用户:您的云服务器ECS创建成功(实例名称:xxxxxxxxxx,公网IP:xxx.xxx.xxx...
摘要:更多相关介绍请看这特点仅仅只是虚拟最大限度减少与的交互类似于使用操作单向数据流很大程度减少了重复代码的使用组件化可组合一个组件易于和其它组件一起使用,或者嵌套在另一个组件内部。在使用后,就变得很容易维护,而且数据流非常清晰,容易解决遇到的。 欢迎移步我的博客阅读:《React 入门实践》 在写这篇文章之前,我已经接触 React 有大半年了。在初步学习 React 之后就正式应用到项...
阅读 2276·2021-11-24 10:18
阅读 2707·2021-11-19 09:59
阅读 1695·2019-08-30 15:53
阅读 1168·2019-08-30 15:53
阅读 1039·2019-08-30 14:19
阅读 2465·2019-08-30 13:14
阅读 2955·2019-08-30 13:00
阅读 1893·2019-08-30 11:11