1. 程式人生 > 實用技巧 >NLP——天池新聞文字分類 Task4:fasttext深度學習

NLP——天池新聞文字分類 Task4:fasttext深度學習

NLP——新聞文字分類:TASK3 深度學習Fasttext

Fasttext是一種深度學習詞向量的表示方法,它是一種三層神經網路,包含輸入層,隱含層和輸出層。
模型架構:fastText 模型輸入一個詞的序列(一段文字或者一句話),輸出這個詞序列屬於不同類別的概率。序列中的詞和片語組成特徵向量,特徵向量通過線性變換對映到中間層,中間層再對映到標籤。fastText 在預測標籤時使用了非線性啟用函式,但在中間層不使用非線性啟用函式。

層次softmax:在某些文字分類任務中類別很多,計算線性分類器的複雜度高。為了改善執行時間,fastText 模型使用了層次 Softmax 技巧。層次 Softmax 技巧建立在哈夫曼編碼的基礎上,對標籤進行編碼,能夠極大地縮小模型預測目標的數量。

N-gram 特徵:fastText 可以用於文字分類和句子分類。不管是文字分類還是句子分類,我們常用的特徵是詞袋模型。但詞袋模型不能考慮詞之間的順序,因此 fastText 還加入了 N-gram 特徵。

##coding=utf-8
import pandas as pd
from sklearn.metrics import f1_score
import numpy
train_df=pd.read_csv('train_set.csv',encoding='gbk', sep='\t')
train_df['label_ft'] = '__label__'+train_df['label'].astype(str)
train_df[['text','label_ft']].iloc[:-5000].to_csv('train.csv',index=None,header=None,sep='\t')

import fasttext.FastText as ff
model = ff.train_supervised('train.csv',lr=1.0,wordNgrams=2,verbose=2,minCount=1,epoch=25,loss='hs')

val_pred=[model.predict(x)[0][0].split('__')[-1] for x in train_df.iloc[-5000:]['text']]
print(f1_score(train_df['label'].values[-5000:].astype(str),val_pred,average='macro'))

可得到結果

Read 177M words
Number of words:  6858
Number of labels: 14
Progress: 100.0% words/sec/thread:  647070 lr:  0.000000 avg.loss:  0.091541 ETA:   0h 0m 0s
0.913031467414968