比如某個特徵的類別數特別大(如機構代碼、公司代碼等),可能有幾千類,或上萬類,常用方案為,轉換為onehot向量。然後送到神經網路如DNN中,責中間層unit數量即為降維後緯度,權值矩陣W的行即為embeding向量。但實際實驗時卻遇到問題,和其他特徵一起送到神經網路後,發現由於矩陣非常稀疏,網路對隱層embedding矩陣的訓練效果很差,應該如何解決?是否還需要有其他輔助處理?


題主是希望用詞向量的方式來實現高緯度稀疏向量的到低緯度稠密向量的特徵降維。

然而,詞向量模型是可以在無監督語料上訓練的,我們可以輕鬆收集到海量的文本來訓練詞向量,再在相對較小的有監督數據集上使用詞向量替代one-hot。

但題主所述的場景顯然不是這樣的。在一個較小規模的有監督數據集上學習低維向量,還不如直接做有監督建模,同時結合特徵形式使用一些傳統的降維方法。

深度學習從來不是萬能的,不要亂用。


根據特徵出現的頻率進行特徵過濾,例如過濾掉樣本中出現次數小於某個閾值的特徵;或者根據特徵出現頻率,取top N個類別。其餘類別當作是新的一類。

如果多種高緯特徵同時使用,例如機構代碼,公司代碼同時作為輸入,可以分組做embedding.


我就說一個點吧

稀疏特徵的一個做法是想辦法通過規則稠密化,主要是能把id關聯到其他東西上去,比如兩個同樣的機構代碼屬於同一個區域。

如果有機構名稱或屬性等,其他特徵豐富了之後,也可以專門做度量學習稠密化。


兩條路,一個是把你的連續特徵(原來想送到DNN中的),離散化,再進行一些人工的組合(第四範式特徵自動組合演算法瞭解一下)。然後交給LR、FM這種淺層的網路就行了。

第二條路,wide and deep,對應paper已經一大把了,然後,祈禱你有足夠的算力和足夠多的調參經驗吧。。。。


1 樣本中離散特徵頻次控制,頻次太低的統一劃分為一個類型,對應一個embedding訓練

2 有點不明白你是要總體的訓練效果好還是要embedding的效果好。我理解你是想要總體的訓練效果好,因為公司代碼這種特徵的embedding沒什麼意義,不像nlp中的word embedding ,這個是有意義的。如果是想要總體效果好,那麼就沒必要關注某些特徵的embedding訓的不好。參考1的方法重新訓一下吧。


個人思路,如果是隻有一個高基數類別特徵或者多個類別特徵之間完全沒有任何共現關係則考慮使用特徵編碼,否則如果多個類別存在一定交互關係考慮item2vec的思路或者fasttext的思路,當作文本問題處理。


推薦閱讀:
相關文章