Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2406798
  • 博文数量: 392
  • 博客积分: 7040
  • 博客等级: 少将
  • 技术积分: 4138
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-17 13:03
个人简介

范德萨发而为

文章分类

全部博文(392)

文章存档

2017年(5)

2016年(19)

2015年(34)

2014年(14)

2013年(47)

2012年(40)

2011年(51)

2010年(137)

2009年(45)

分类: 大数据

2015-01-19 17:58:40

利用现有数据测试了libshorttext,准确率比liblinear要高,原因分析中


TextGrocery,更好用的文本分类Python库

古龙说,无论什么东西,最好的都只有一种。经历半年的文本分类实践,我们基本已断定,最好的文本分类算法就是SVM — 支持向量机。
但是纵然知道了天机,新手做文本分类仍然需要学习不少东西,例如算法原理、分词、向量化等等。如果用上scikit-learn这样的庞然大物,更有种高射炮打蚊子的异样感。
有没有可能把最好的文本分类算法,包装成一个超级简单的工具提供给大家?
这是我开发TextGrocery的初衷。

设计原则

幸好,我不是没有参照系。打下了一个很好的基础,不仅提供了足够简单的API,而且背后的原理也有扎实的实验数据支撑(不过滤停用词,不过滤词性,使用线性核)。当然,LibShortText也有显著的缺陷:

  1. 不支持中文分词,这导致其在中文语料上的表现一塌糊涂
  2. Analyzer模块不仅多余,而且输出全部为无格式文本,不可爱
  3. 如果不是专业的算法人员,默认参数永远是最好的选择,所以参数的自定义并不是很必要
  4. 中间数据的保存全部以文件格式,每次的训练和测试留下一些陌生文件,而且小规模的训练和测试用列表对象会更合适
  5. 代码很不Pythonic,也不支持Pypi的简便安装方式

总而言之,LibShorText虽然有引以为傲的技术,但对技术的使用者来说是不友好的。而TextGrocery希望把LibShortText变得更友好一些。

TextGrocery,是一个怎样的杂货铺?

  1. 引入作为内置的默认分词器
  2. 精简LibShortText的代码,去掉Analyzer和参数自定义模块,修复bug,改善PEP8
  3. 训练和测试的文本都支持列表传入
  4. 提供Pypi的安装方式

示例代码

>>> from tgrocery import Grocery # 新开张一个杂货铺,别忘了取名! >>> grocery = Grocery('sample') # 训练文本可以用列表传入 >>> train_src = [
    ('education', '名师指导托福语法技巧:名词的复数形式'),
    ('education', '中国高考成绩海外认可 是“狼来了”吗?'),
    ('sports', '图文:法网孟菲尔斯苦战进16强 孟菲尔斯怒吼'),
    ('sports', '四川丹棱举行全国长距登山挑战赛 近万人参与')
] >>> grocery.train(train_src) # 也可以用文件传入 >>> 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)

安装

pip install tgrocery

让文本分类更爽一些吧!

GitHub传送门 —> 

未完成

  1. 训练时仍然要耗费写入.svm的文件再读取的额外I/O时间,下一步希望改成直接通过内存传递
  2. LibLinear的输出实际上可以看成一个dict,包含一个样本对所有类别的决策变量,目前仅把值最高的类别取了出来,也许有朋友会想用这个决策变量做一些更有趣的事情。
  3. 0.2版本会提供过程数据和结果数据的统计工具

盗火者

普罗米修斯是希腊神话中的一个人物,他从太阳神阿波罗那里盗走火种送给人类,给人类带来的光明,他因此而受到宙斯的处罚,被绑在高加索山,每日忍受风吹日晒和鹫鹰啄食。

希望会有志同道合的同学加入到「盗火者」的行列,一起来让机器学习更简单!

, , , , , 
阅读(6094) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

mymusise2015-06-06 13:04:17

请问下「盗火者」是个团队么?