fastext 中文文本分類


1. 輸入文本預處理, 通過jieba分詞, 空格" "拼接文本串.  每行一個樣本, 最后一個單詞為雙下划線表明label,  __label__'xxx' . eg:

邱縣 繼剛 家庭 農場 小麥 、 玉米 、 棉花 、 大豆 、 蔬菜 、 苗木 種植 、 銷售 ( 依法 須 經 批准 的 項目 , 經 相關 部門 批准 后方 可 開展 經營 活動 ) __label__A
江蘇 嘉利欣 農業 科技 有限公司 農業 科技 研發 、 轉讓 、 咨詢服務 展覽 展示 服務 現代農業 休閑 觀光 種植 、 銷售 糧食 、 果蔬 、花卉 、 苗木 種植 中草葯 銷售 本 公司 種植 的 中草葯 ( 特殊 中草葯 除外 ) 養殖 、 銷售 魚 、 蝦 、 螃蟹 ( 依法 須 經 批准 的 項
目 , 經 相關 部門 批准 后方 可 開展 經營 活動 ) __label__B
贊皇縣 和諧 家庭 農場 農作物 果樹 蔬菜 種植 銷售 需 有關 部門 審批 的 審批 后 經營 __label__C
深圳市 修元 農業 開發 有限公司 農業 開發 、 綠化 工程 、 苗圃 種植 __label__A

 

# 文本預處理
df2 = pd.read_csv('./industry_dalei_train.txt', encoding='utf-8')
df3 = pd.read_excel('./industry_standard.xlsx', encoding='utf-8')

# 映射轉換
dalei2label_dict = dict((x, y) for x, y in zip(df3[u'大類名稱'], df3[u'大類編號']))
df2['dalei_label'] = df2['sub_industry_name'].apply(lambda x: dalei2label_dict[x])
# 切割
df2['cut_name'] = df2['name'].apply(lambda x: ' '.join(jieba.cut(x))) 
df2['cut_business'] = df2['business'].apply(lambda x: ' '.join(jieba.cut(x))) 
df2['cut_train'] = df2['cut_name'] + ' ' + df2['cut_business'] + ' __label__' + df2['dalei_label']
df2['cut_train'].to_csv('industry_dalei_train.txt', index=None, header=None, encoding='utf-8')

 

2. pip install fasttext, 利用fasttext 的python 包進行分類.

# 訓練和保存模型
da_clf = fasttext.supervised('./industry_dalei_train.txt', 'models/dalei_clf')

# 加載模型
da_clf = fasttext.load_model('./models/dalei_clf.bin')

# 測試
res = da_clf.test('./industry_dalei_test.txt')
print res.precision
print res.recall

# 預測使用, data為['cut document1' ,'cut document2']
da_clf.predict(data ,k=1)  # 預測標簽
da_clf.predict_proba(da_df.iloc[:5],k=3)  # 預測標簽概率

簡單高效, 結果也不差.  good luck~

參考:

https://pypi.python.org/pypi/fasttext/

http://www.41443.com/HTML/Python/20160909/449360.html

http://www.360doc.com/content/17/0427/02/20558639_648968041.shtml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM