天池學(xué)習(xí)賽-NLP新聞文本分類(4/6)-fasttext模型

1 賽題理解

2 數(shù)據(jù)分析

3 詞向量+機(jī)器學(xué)習(xí)模型

4 Fasttext

一势就、簡(jiǎn)介

keras版本的fasttext實(shí)現(xiàn)

image.png

fastText是Facebook于2016年開源的一個(gè)詞向量計(jì)算和文本分類工具,在學(xué)術(shù)上并沒有太大創(chuàng)新脉漏。但是它的優(yōu)點(diǎn)也非常明顯苞冯,在文本分類任務(wù)中,fastText(淺層網(wǎng)絡(luò))往往能取得和深度網(wǎng)絡(luò)相媲美的精度侧巨,卻在訓(xùn)練時(shí)間上比深度網(wǎng)絡(luò)快許多數(shù)量級(jí)舅锄。在標(biāo)準(zhǔn)的多核CPU上, 能夠訓(xùn)練10億詞級(jí)別語料庫(kù)的詞向量在10分鐘之內(nèi)司忱,能夠分類有著30萬多類別的50多萬句子在1分鐘之內(nèi)皇忿。
這里有原理和基礎(chǔ)知識(shí)的介紹,可以看一看

二烘贴、實(shí)例

import numpy as np
import pandas as pd
import fasttext
from sklearn.metrics import f1_score

train = pd.read_csv(r'E:\jupyter_lab\TianChi\News_classifier\data\train\train_set.csv',sep='\t',encoding='utf8')
train.head()
train.shape  #(200000,2)
image.png
1.處理成fasttext的輸入格式,并保存
train['label_ft'] = '__label__' + train['label'].astype(str)
train[['text','label_ft']].iloc[:-5000].to_csv(r'E:\jupyter_lab\TianChi\News_classifier\data\train\train_fasttext.csv',index=None,header=None,sep='\t')
#默認(rèn)逗號(hào)分隔
train[['text','label_ft']].iloc[-5000:].to_csv(r'E:\jupyter_lab\TianChi\News_classifier\data\test_a\test_fasttext.csv',index=None,header=None,sep='\t')
2.訓(xùn)練并保存
%%time
data_path = r'E:\jupyter_lab\TianChi\News_classifier\data\train\train_fasttext.csv'
model = fasttext.train_supervised(input=data_path, lr=1.0, wordNgrams=3, minCount=1,label='__label__',epoch=25,loss='hs')

output_dir = r"E:\jupyter_lab\TianChi\News_classifier\model\model.bin"
model.save_model(output_dir)

超長(zhǎng)時(shí)間預(yù)警:
image.png
fasttext的參數(shù)解釋
  input: 訓(xùn)練數(shù)據(jù)文件路徑
  lr: 學(xué)習(xí)率
  dim: 向量維度
  ws: cbow模型時(shí)使用
  epoch: 次數(shù)
  minCount: 詞頻閾值, 小于該值在初始化時(shí)會(huì)過濾掉
  minCountLabel: 類別閾值禁添,類別小于該值初始化時(shí)會(huì)過濾掉
  minn: 構(gòu)造subword時(shí)最小char個(gè)數(shù)
  maxn: 構(gòu)造subword時(shí)最大char個(gè)數(shù)
  neg: 負(fù)采樣
  wordNgrams: n-gram個(gè)數(shù)
  loss: 損失函數(shù)類型, softmax, ns: 負(fù)采樣, hs: 分層softmax
  label: 類別前綴

3.重新加載模型并測(cè)試

model_reload = fasttext.load_model(output_dir)

pred_result = model_reload.predict(train.iloc[-1]['text'])
pred_result
#看看返回的形式   return 標(biāo)簽列表, 概率列表

image.png
單個(gè)樣本單個(gè)樣本的預(yù)測(cè),最后計(jì)算 f1_score

%%time
val_pred = [model_reload.predict(x)[0][0].split('__')[-1] for x in train.iloc[-5000:]['text']]
#return 類別的列表

print(f1_score(train['label'].values[-5000:].astype(str),val_pred,average='macro'))

image.png
以整個(gè)文件的形式進(jìn)行test桨踪,返回準(zhǔn)確率

%%time
data_test_path = r'E:\jupyter_lab\TianChi\News_classifier\data\test_a\test_fasttext.csv'
clf_model = r"E:\jupyter_lab\TianChi\News_classifier\model\model.bin"

def predict(input_data, clf_model): #return [樣本個(gè)數(shù), 準(zhǔn)確率, 召回率]
    classifier_model = fasttext.load_model(clf_model)
 
    prd_label = classifier_model.test_label(input_data)
    print(prd_label)
    prd_label = classifier_model.test(input_data)
    acc = prd_label[1]
    return acc

acc=predict(data_test_path,clf_model)

pre_label長(zhǎng)這個(gè)樣子
classifier_model.test_label.png

acc:0.94

4.關(guān)于參數(shù)調(diào)優(yōu)

改變fasttext里的參數(shù)老翘,進(jìn)行模型調(diào)整。
(1)API中默認(rèn)wordNgrams為1锻离,其實(shí)就是默認(rèn)不加入N-gram feature铺峭。當(dāng)然是加入之后效果更好。
(2)lr 在[0.1-1]之間進(jìn)行嘗試汽纠。
還有其他的一些參數(shù)卫键,可以嘗試修改。由于運(yùn)行時(shí)間有點(diǎn)長(zhǎng)虱朵,就先撤了~
更新中莉炉,下節(jié)預(yù)告:word2vec+texcnn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碴犬,隨后出現(xiàn)的幾起案子絮宁,更是在濱河造成了極大的恐慌,老刑警劉巖服协,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍昂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)窘游,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門唠椭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忍饰,你說我怎么就攤上這事贪嫂。” “怎么了喘批?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵撩荣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我饶深,道長(zhǎng)餐曹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任敌厘,我火速辦了婚禮台猴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俱两。我一直安慰自己饱狂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布宪彩。 她就那樣靜靜地躺著休讳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尿孔。 梳的紋絲不亂的頭發(fā)上俊柔,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音活合,去河邊找鬼雏婶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛白指,可吹牛的內(nèi)容都是我干的留晚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼告嘲,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼错维!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橄唬,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤赋焕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后轧坎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泽示,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年缸血,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜜氨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捎泻,死狀恐怖飒炎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笆豁,我是刑警寧澤郎汪,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站闯狱,受9級(jí)特大地震影響煞赢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜哄孤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一照筑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘦陈,春花似錦凝危、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捉貌,卻和暖如春支鸡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昏翰。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工苍匆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棚菊。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓浸踩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親统求。 傳聞我的和親對(duì)象是個(gè)殘疾皇子检碗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354