1、使用One-hot 方法編碼的向量會很高維也很稀疏。假設我們在做自然語言處理(NLP)中遇到了一個包含2000個詞的字典,當使用One-hot編碼時,每一個詞會被一個包含2000個整數的向量來表示,其中1999個數字是0,如果字典再大一點,這種方法的計算效率會大打折扣。
2、訓練神經網路的過程中,每個嵌入的向量都會得到更新。通過上面的圖片我們就會發現在多維空間中詞與詞之間有多少相似性,這使我們能視覺化的瞭解詞語之間的關係,不僅僅是詞語,任何能通過嵌入層 Embedding 轉換成向量的內容都可以這樣做。
上面說的概念可能還有些不清楚,那我們就舉個例子看看嵌入層 Embedding 對下面的句子怎麼處理的。Embedding的概念來自於word embeddings,如果您有興趣閱讀更多內容,可以查詢 word2vec 。
deep learning is very deep
使用嵌入層embedding 的第一步是通過索引對該句子進行編碼,這裡我們給每一個不同的單詞分配一個索引,上面的句子就會變成這樣:
1、2、3、4、1
接下來會建立嵌入矩陣,我們要決定每一個索引需要分配多少個“潛在因子”,這大體上意味著我們想要多長的向量,通常使用的情況是長度分配為32和50。在這篇文章中,為了保持文章可讀性這裡為每個索引指定6個潛在因子。嵌入矩陣就會變成這樣:
嵌入矩陣
這樣,我們就可以使用嵌入矩陣而不是龐大的one-hot編碼向量來保持每個向量更小。簡而言之,嵌入層embedding在這裡做的就是把單詞“deep”用向量[.32, .02, .48, .21, .56, .15]來表達。然而並不是每一個單詞都會被一個向量來代替,而是被替換為用於查詢嵌入矩陣中向量的索引。其次這種方法面對大資料時也能有效計算。由於在深度神經網路的訓練過程中嵌入向量也會被更新,我們就可以探索在高維空間中哪些詞語之間具有相似性,再通過使用t-SNE 這樣的降維技術就可以將這些相似性視覺化。
不僅是詞嵌入
前面的例子表明,單詞嵌入在自然語言處理領域非常重要。通過單詞嵌入,我們可以使用語言捕捉關係。並且,嵌入層可以用來嵌入比單詞更多的東西。在目前的研究專案中,可使用嵌入層來嵌入使用者線上行為。將索引分配給使用者行為,如“入口網站Y上的頁面型別X的頁面檢視”或“滾動X畫素”。然後,這些索引用於構建一系列使用者行為。
在“傳統”機器學習模型(支援向量機、隨機森林、梯度提升樹)與深度學習模型(深度神經網路、遞迴神經網路)的比較中,我發現這種嵌入方法對於深度神經網路非常有效。
“傳統”機器學習模型依賴於特徵工程的表格輸入。這意味著,作為研究人員,我們決定特徵是什麼。在這種情況下,特徵可能是:訪問的主頁數量、完成的搜尋數量、滑鼠滾動的畫素總量。然而,在進行特徵工程時,很難捕捉空間(時間)維度。通過使用深度學習嵌入層,我們可以通過提供一系列使用者行為(作為索引)作為模型的輸入來有效地捕捉這個空間維度。
在我的研究中,遞迴神經網路表現最好。從“傳統”特徵工程模型來看,梯度提升樹表現最佳。其他研究探索了在MOOCs中使用嵌入層來編碼學生行為( Piech等人.2016 )和電子商務中使用者行為建模( Tamhane等人.2017年)。
推薦系統
嵌入層還可以用來處理推薦系統中的稀疏矩陣問題。
推薦系統的使用非常廣泛,我們也都不陌生。最常見的例子是亞馬遜的產品推薦和 Netflix’s 的專案推薦系統。Netflix還曾舉辦過一場價值100萬美元的競賽,為他們的推薦系統尋找最佳的協同過濾演算法。
推薦系統有兩種主要型別,區分這兩種型別很重要。
基於內容的過濾:這種型別的過濾是基於有關專案或者產品的資料。例如,讓使用者填寫一份關於他們喜歡什麼電影的調查。如果他們說他們喜歡科幻電影,系統便推薦他們去看科幻電影。在這種情況下,所有專案都必須有大量元資訊可用。
協同過濾:讓系統找到像你一樣的人,看看他們喜歡什麼,假設你也喜歡同樣的東西。和你一樣的人=以相似的方式評價你看的電影的人。在大型的資料集中,這比後設資料方法工作得好得多。本質上,詢問人們的行為不如觀察他們的實際行為好。
要解決這個問題,我們可以建立一個巨大的矩陣,將所有使用者對所有電影的評價進行比較。然而,在許多情況下,這將產生一個極其稀疏的矩陣。想想你的Netflix賬戶。你看過的電影占他們總供應量的百分比是多少?這可能是一個相當小的百分比。然後,通過梯度下降,可以訓練一個神經網路來預測每個使用者對每部電影的評價有多高。如果你想更多地瞭解深度學習在推薦系統中的應用,可以關注我們,並加入我們的社群,提出你想了解的內容。
深研資料
原文連結:
https://towardsdatascience.com/deep-learning-4-embedding-layers-f9a02d55ac12
word2vec:
https://arxiv.org/pdf/1301.3781.pdf
t-SNE:
https://lvdmaaten.github.io/tsne/
嵌入層編碼學生行為:
https://stanford.edu/~cpiech/bio/papers/deepKnowledgeTracing.pdf
電子商務使用者行為建模:
https://link.springer.com/chapter/10.1007/978-3-319-57529-2_42
關於embedding的理解:
https://towardsdatascience.com/neural-network-embeddings-explained-4d028e6f0526
https://www.tensorflow.org/guide/embedding
https://github.com/WillKoehrsen/wikipedia-data-science/blob/master/notebooks/Book%20Recommendation%20System.ipynb