TextGrocery 基于 LibLinear 和 结巴分词 的短文本分类工具

发布于 2022-08-14 17:32:13 字数 4180 浏览 318 评论 0

TextGrocery是一个基于 LibLinear 和 结巴分词 的短文本分类工具,特点是高效易用,同时支持中文和英文语料。

GitHub 项目链接

性能

  • 训练集:来自32个类别的4.8万条中文新闻标题
  • 测试集:来自32个类别的1.6万条中文新闻标题
  • 与scikit-learn的svm和朴素贝叶斯算法做横向对比
分类器准确率(%)计算时间(秒)
scikit-learn(朴素贝叶斯)76.8%134
scikit-learn(svm)76.9%121
TextGrocery79.6%49

安装

  1. 通过GitHub(最新版本)
git clone https://github.com/2shou/TextGrocery.git
cd TextGrocery
make
  1. 通过pip(更稳定)
pip install tgrocery

快速开始

>>> from tgrocery import Grocery
# 新开张一个杂货铺(别忘了取名)
>>> grocery = Grocery('sample')
# 训练文本可以用列表传入
>>> train_src = [
    ('education', '名师指导托福语法技巧:名词的复数形式'),
    ('education', '中国高考成绩海外认可 是“狼来了”吗?'),
    ('sports', '图文:法网孟菲尔斯苦战进16强 孟菲尔斯怒吼'),
    ('sports', '四川丹棱举行全国长距登山挑战赛 近万人参与')
]
>>> grocery.train(train_src)
# 也可以用文件传入(默认以tab为分隔符,也支持自定义)
>>> grocery.train('train_ch.txt')
# 保存模型
>>> grocery.save()
# 加载模型(名字和保存的一样)
>>> new_grocery = Grocery('sample')
>>> new_grocery.load()
# 预测
>>> new_grocery.predict('考生必读:新托福写作考试评分标准')
education
# 测试
>>> test_src = [
    ('education', '福建春季公务员考试报名18日截止 2月6日考试'),
    ('sports', '意甲首轮补赛交战记录:米兰客场8战不败国米10年连胜'),
]
>>> new_grocery.test(test_src)
# 输出测试的准确率
0.5
# 同样可支持文件传入
>>> new_grocery.test('test_ch.txt')
# 自定义分词模块(必须是一个函数)
>>> custom_grocery = Grocery('custom', custom_tokenize=list)

API 文档

Grocery

class tgrocery.Grocery(name, custom_tokenize=None)
  • 确定你的分类项目名
  • custom_tokenize会覆盖默认的分词单元(结巴分词),要求custom_tokenize的类型必须是函数
def Grocery.train(train_src, delimiter='\t')

获取训练样本,生成分类模型

  • train_src可以是嵌套列表或文件路径
    • 嵌套列表:实体是两个字符串构成的tuple,第一个字符串是类别标签,第二个字符串是语料文本
    • 文件路径:一行为一个训练样本,类别标签在前、语料文本在后,默认分隔符是\t
  • delimiter是解析训练样本时所用的分隔符,仅在train_src为文件路径时生效
def Grocery.get_load_status()

返回目前模型是否在已训练或已加载的状态

def Grocery.predict(single_text)
  • 对单一文本预测其类别(预测前会检测模型是否已训练或已加载)
  • 返回一个GroceryPredictResult对象
def Grocery.save()

保存模型到本地

  • 默认文件夹名是Grocery的name属性
  • 如果本地存在同名文件夹,将被覆盖
def Grocery.load()

从本地加载模型

  • 默认文件夹名是Grocery的name属性
  • 分词单元的信息不会被自动加载,如果自定义了分词单元,需要在创建Grocery的过程中再次指定
def Grocery.test(test_src, delimiter='\t')

测试模型在测试样本中取得的准确率

  • test_src可以是嵌套列表或文件路径
    • 嵌套列表:实体是两个字符串构成的tuple,第一个字符串是类别标签,第二个字符串是语料文本
    • 文件路径:一行为一个测试样本,类别标签在前、语料文本在后,默认分隔符是\\t
  • delimiter是解析测试样本时所用的分隔符,仅在test_src为文件路径时生效
  • 返回一个GroceryTestResult对象

GroceryPredictResult

对新语料预测后的结果

GroceryPredictResult.predicted_y

预测的类别标签

GroceryPredictResult.dec_values
  • 对所有类别的决策变量(一个浮点数,可正可负,越大表示归属于该类别的可能性越大)
  • dict,key是类别标签,value是决策变量

GroceryTestResult

对测试样本测试后的结果

GroceryTestResult.accuracy_overall

不分类别的总体准确率,浮点数,0到1之间

GroceryTestResult.accuracy_labels
  • 区分类别的准确率
  • dict,key是类别标签,value是准确率
GroceryTestResult.recall_labels
  • 区分类别的召回率
  • dict,key是类别标签,value是召回率
def GroceryTestResult.show_result()
  • 打印各类别的准确率和召回率表格,方便比较

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

1CH1MKgiKxn9p

文章 0 评论 0

ゞ记忆︶ㄣ

文章 0 评论 0

JackDx

文章 0 评论 0

信远

文章 0 评论 0

yaoduoduo1995

文章 0 评论 0

霞映澄塘

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文