TextGrocery,更好用的文本分類Python庫

古龍說,不管什麼東西,最好的都只有一種。經歷半年的文本分類實踐,咱們基本已判定,最好的文本分類算法就是SVM -- 支持向量機。
可是縱然知道了天機,新手作文本分類仍然須要學習很多東西,例如算法原理、分詞、向量化等等。若是用上scikit-learn這樣的龐然大物,更有種高射炮打蚊子的異樣感。
有沒有可能把最好的文本分類算法,包裝成一個超級簡單的工具提供給你們?
這是我開發TextGrocery的初衷。python

設計原則

幸虧,我不是沒有參照系。LibShortText打下了一個很好的基礎,不只提供了足夠簡單的API,並且背後的原理也有紮實的實驗數據支撐(不過濾停用詞,不過濾詞性,使用線性核)。固然,LibShortText也有顯著的缺陷:git

  1. 不支持中文分詞,這致使其在中文語料上的表現一塌糊塗
  2. Analyzer模塊不只多餘,並且輸出所有爲無格式文本,不可愛
  3. 若是不是專業的算法人員,默認參數永遠是最好的選擇,因此參數的自定義並非很必要
  4. 中間數據的保存所有以文件格式,每次的訓練和測試留下一些陌生文件,並且小規模的訓練和測試用列表對象會更合適
  5. 代碼很不Pythonic,也不支持Pypi的簡便安裝方式

總而言之,LibShorText雖然有引覺得傲的技術,但對技術的使用者來講是不友好的。而TextGrocery但願把LibShortText變得更友好一些。github

TextGrocery,是一個怎樣的雜貨鋪?算法

  1. 引入結巴分詞做爲內置的默認分詞器
  2. 精簡LibShortText的代碼,去掉Analyzer和參數自定義模塊,修復bug,改善PEP8
  3. 訓練和測試的文本都支持列表傳入
  4. 提供Pypi的安裝方式

示例代碼

python>>> 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傳送門 --> TextGrocery工具

未完成

  1. 訓練時仍然要耗費寫入.svm的文件再讀取的額外I/O時間,下一步但願改爲直接經過內存傳遞
  2. LibLinear的輸出實際上能夠當作一個dict,包含一個樣本對全部類別的決策變量,目前僅把值最高的類別取了出來,也許有朋友會想用這個決策變量作一些更有趣的事情。
  3. 0.2版本會提供過程數據和結果數據的統計工具

盜火者

普羅米修斯是希臘神話中的一我的物,他從太陽神阿波羅那裏盜走火種送給人類,給人類帶來的光明,他所以而受到宙斯的處罰,被綁在高加索山,每日忍受風吹日曬和鷲鷹啄食。學習

但願會有志同道合的同窗加入到「盜火者」的行列,一塊兒來讓機器學習更簡單!測試

來自:建造者說設計

相關文章
相關標籤/搜索