fasttext**:bag of tricks for efficient text classification
與傳統機器學習不同,深度學習既提供特徵提取功能,也可以完成分類的功能。
基於fasttext的文字分類
如何使用驗證集調參
在基於機器學習的文字分類中,介紹了4中文字表示方法:one-hot、bag of word、n-gram和tf-idf。但上述方法存在一定的問題:轉換得到的向量維度很高,需要較長的訓練實踐;沒有考慮單詞與單詞之間的關係,只是進行了統計。
與這些表示方法不同,深度學習也可以用於文字表示,並將其對映到乙個低維空間。其中比較典型的例子有fasttext、word2vec和bert。本章介紹fasttext。
fasttext是一種典型的深度學習詞向量的表示方法,它非常簡單通過embedding層將單詞對映到稠密空間,然後將句子中所有的單詞在embedding空間中進行平均,進而完成分類操作。
所以fasttext是乙個三層的神經網路,輸入層、隱含層和輸出層。
下圖是使用keras實現的fasttext網路結構:
fasttext在文字分類任務上,是優於tf-idf的:
fasttext用單詞的embedding疊加獲得的文件向量,將相似的句子分為一類
fasttext可以快速的在cpu上進行訓練,最好的實踐方法就是官方開源的版本:
在使用tf-idf和fasttext中,有一些模型的引數需要選擇,這些引數會在一定程度上影響模型的精度,那麼如何選擇這些引數呢?
#給文字序號標記標籤
label2id =
for i in
range
(train_df.shape[0]
):label =
str(train_df[
'label'
][i]
)if label not
in label2id:
label2id[label]
=[i]
else
: label2id[label]
df = pd.dataframe(pd.series(label2id)
, columns=
['id'])
df = df.reset_index(
).rename(columns=
)#選取每個標籤下的前1/10 id對應的文字資料作為驗證集,剩餘作為訓練集
testset =
for i in
range(14
):for j in
range
(int
(len
(df[
'id'
][i])/
10)):
index
'id'
][i]
[j],1]
) trainset = train_df.drop(df[
'id'
][i]
[j])
本章作業
1.閱讀fasttext的文件,嘗試修改引數,得到更好的分數
2.基於驗證集的結果調整超引數,使得模型效能更優
NLP 基於深度學習的文字分類2
另外提出兩種更加高效的訓練方法 1.skip grams原理和網路結構 word2vec模型中,主要有skip gram和cbow兩種模型,從直觀上理解,skip gram是給定input word來 上下文。而cbow是給定上下文,來 input word。word2vec模型實際上分為了兩個部分...
文字分類深度學習實踐 學習記錄
word2vec的主要思路 通過單詞和上下文彼此 對應的兩個演算法分別為 也就是說模型的輸出概率代表著到我們詞典中每個詞有多大可能性跟input word同時出現。例如 如果我們向神經網路模型中輸入乙個單詞 soviet 那麼最終模型的輸出概率中,像 union russia 這種相關詞的概率將遠高...
Task4基於深度學習的文字分類
fasttext是一種典型dl詞向量的表示方法,它通過embedding層將單詞對映到稠密空間,然後將句子中所有的單詞在embedding空間中進行平均,進而完成分類操作 它是乙個三層神經網路 輸入層 隱含層 輸出層 它用單詞的embedding疊加獲得的文件向量,將相似的句子分為一類 它學到的em...