fastText(三):微博短文本下fastText的應用(二)

上一篇講到,fastText在訓練數據中過擬合的問題。接下來將介紹一些提升fastText泛化能力的嘗試。網絡

模型泛化
使用過fastText的人,每每會被它的不少特性徵服,例如訓練速度、兼具word embedding和分類等。可是正如一個硬幣有正反兩面,fastText也並不是完美,fastText的泛化性是它的短板。函數

增長正則項
在Logistic Regression中,調節正則項可以提升模型的泛化性能。經過上一篇博客可知,fastText的代價函數是:性能

L(d,h)=−∑i=1CyilogPi=−∑i=1CyilogeθTih∑Cj=1eθTjh
L(d,h)=−∑i=1Cyilog⁡Pi=−∑i=1Cyilog⁡eθiTh∑j=1CeθjTh
增長正則項後,代價函數:學習

L(d,h)=−∑i=1CyilogPi+λ∑i=1V∥wi∥+μ∑j=1C∥θj∥
L(d,h)=−∑i=1Cyilog⁡Pi+λ∑i=1V‖wi‖+μ∑j=1C‖θj‖
此時詞向量的更新方式變爲:.net

wj=wj−η∑i=1C(Pi−yi)θi−λwj, j=1,2,...,L
wj=wj−η∑i=1C(Pi−yi)θi−λwj, j=1,2,...,L
增長了正則項後,同一個句子的詞向量沒法按照相同的方向更新,詞向量間的類似便沒法保證。此時,fastText與常見的前饋神經網絡(DNN)沒有任何差異,它的不少優秀的特質所有喪失了。我的猜想,這是Mikolov大神爲何沒有在word2vec或者fastText中增長正則項的緣由。設計

Dropout
Dropout是常見的增長神經網絡泛化性能的trick,它按照必定的機率將神經網絡單元暫時從網絡中丟棄。fastText做爲一種淺層神經網絡,可以加入dropout的地方很是有限:blog

在惟一的隱層,增長dropout,即hidden=dropout(1n∑ni=1wi)hidden=dropout(1n∑i=1nwi)
在輸入層增長dorpout,即hidden=1n∑ni=1dropout(wi)hidden=1n∑i=1ndropout(wi)。在輸入層dropout中,有兩種方法:
按照機率,隨機幹掉某個詞
按照機率,隨機幹掉某個詞的某個維度
在微博場景下,第二種方法的第一個子方法是最好的,即按照機率,隨機幹掉某個詞。在引入dropout時,最開始經過等機率幹掉某個詞,即博客

dropout(wi)={wi  if p>t0 otherwise
dropout(wi)={wi  if p>t0 otherwise
通過試驗發現效果很差,模型對於某些關鍵詞的學習效果不佳,例如上面提到的皮膚問題。考慮到微博廣告文本中有許多強特徵(關鍵詞),它們的存在干擾了模型的泛化能力,所以等機率dropout是不適用的,須要一種不等機率的dropout——category dropout,簡記爲cdropout。在cdropout中,某個詞被幹掉的機率與它在某個類別的出現頻率相關:io

cdropout(c,wi)={wi  if p>1−t(c,i)0  otherwise
cdropout(c,wi)={wi  if p>1−t(c,i)0  otherwise
其中cc表示訓練樣本的類別,t(c,i)t(c,i)表示詞ii在類別cc中的閾值。設計t(c,i)t(c,i)時,須要考慮兩個問題:微博

cdropout會幹掉那些強特徵,使模型可以從剩餘的句子中,尋找有用的信息。
模型會把某些無用的詞看成特徵。
基於上述兩個問題,t(c,i)t(c,i)的形式以下:

t(c,i)=max(0.5,log7n(c,i)10)
t(c,i)=max(0.5,log7n(c,i)10)
其中n(c,i)n(c,i)表示詞ii在類別cc中出現的機率。t(c,i)t(c,i)既保證強特徵不會被徹底幹掉,也使模型可以從剩餘的句子中尋找有用的信息。使用上述方法後,fastText對於關鍵詞的預測效果以下所示:

關鍵詞 類別
祛痘 label祛痘 1.00001 label郵政業務 1e-05 label買點卡 1e-05
痘痘 label祛痘 1.00001 label郵政業務 1e-05 label買點卡 1e-05
黑頭 label祛痘 1.00001 label郵政業務 1e-05 label買點卡 1e-05
長痘 label祛痘 1.00001 label郵政業務 1e-05 label買點卡 1e-05
痤瘡 label祛痘 1.00001 label郵政業務 1e-05 label買點卡 1e-05
痘坑 label祛痘 1.00001 label郵政業務 1e-05 label買點卡 1e-05
皮膚問題 label美甲美瞳 1.00001 label祛痘 1.05769e-05 label美髮護髮 1.00299e-05
關鍵詞 類別
婚紗照 label美甲美瞳 1.00001 label祛痘 1.05769e-05 label美髮護髮 1.00299e-05
婚紗照 label旅行跟拍 0.549722 label婚紗攝影 0.450298 label郵政業務 1e-05
相冊 label婚紗攝影 1.00001 label郵政業務 1e-05 label買點卡 1e-05
拍一套 label旅行跟拍 1.00001 label郵政業務 1e-05 label買點卡 1e-05
婚照 label婚紗攝影 1.00001 label郵政業務 1e-05 label買點卡 1e-05
樣片 label婚紗攝影 1.00001 label祛痘 1.00004e-05 label美甲美瞳 1.00003e-05
金夫人 label婚紗攝影 1.00001 label減肥瘦身 1.00005e-05 label美髮護髮 1.00002e-05
客片 label婚紗攝影 1.00001 label旅行跟拍 1.00002e-05 label國內遊 1e-05
顯然,加入cdropout後,類別準確度有了長足的進步。與此同時,cdropout也兼顧了詞的餘弦類似度

祛痘
黑頭 0.962714
粉刺 0.941785
痤瘡 0.941042
毛孔 0.939662
痘坑 0.937129
長痘 0.934889
青春痘 0.915363
痘 0.910426
痘痘 0.910171
祛 0.909382
1
2
3
4
5
6
7
8
9
10
11
婚紗照
攝 0.921392
婚照 0.905441
海景 0.848199
造 0.832112
全送 0.831038
婚紗 0.826123
夜景 0.818146
放大 0.81653
視覺 0.807251
這座 0.804767
1
2
3
4
5
6
7
8
9
10
11
可見cdropout,不只提升了模型的泛化性能,並且保證了fastText的不少優秀特質。

總結經過cdropout,fastText的泛化性能獲得了長足的進步,可是對於實際場景,尤爲是微博短文本場景,依然是不夠。在實際應用中,咱們作了不少模型之外的工做,例如規則、爬蟲等等。但願這三篇博客,可以對你有所幫助!吃飯去嘍~

相關文章
相關標籤/搜索