LibShortText简要入门
admin
2023-07-31 01:52:03
0

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)

训练文本的格式如下:

娱乐\\t组图:刘亦菲短裙秀腿 浓妆变冷艳时髦女

模型

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。

来自:建造者说

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...