本次討論的問題目錄有:
- 什么是Embedding胶果?
- 推薦系統為什么需要Embedding匾嘱?
- 推薦系統代碼中如何用數據生成Embedding?
- 推薦系統代碼中的Embedding技術分類有哪些早抠?
1. 什么是Embedding霎烙?
Embedding往簡單的說就是浮點數的“數組”(這個定義是我下的可能不一定準確,如蕊连,[0.2,0.4]這就是二維Embedding)悬垃,往復雜了說就是用一個低維稠密的向量“表示”一個對象,這里所說的對象可以是一個詞(Word2Vec)甘苍,也可以是一個物品(Item2Vec)尝蠕,亦或是網絡關系中的節(jié)點(Graph Embedding)。其中“表示”這個詞意味著Embedding向量能夠表達相應對象的某些特征载庭,同時向量之間的距離反映了對象之間的相似性看彼,說人話就是:Embedding實質上是反映了一種興趣程度扇谣。
在 Embedding大行其道之前 oneHot才是最靚的仔。如果和我們比較熟悉的 oneHot 對比起來理解闲昭,頓時會發(fā)現 Embedding這個玄里玄乎的概念,實際上 so easy靡挥。直觀上看 Embedding相當于是對 oneHot 做了平滑序矩,而 oneHot 相當于是對 Embedding做了 max pooling。
一般意義的 Embedding是神經網絡倒數第二層的參數權重跋破,只具有整體意義和相對意義(很重要簸淀!很重要!很重要6痉怠)租幕,不具備局部意義和絕對含義(所有又叫l(wèi)atent factor,隱向量拧簸,可以細看參考文獻中——FM的DNN實現)劲绪。這與 Embedding的產生過程有關,任何 Embedding一開始都是一個隨機數盆赤,然后隨著優(yōu)化算法贾富,不斷迭代更新,最后網絡收斂停止迭代的時候牺六,網絡各個層的參數就相對固化颤枪,得到隱層權重表(此時就相當于得到了我們想要的 Embedding),然后在通過查表可以單獨查看每個元素的 Embedding淑际。
我解釋一下為什么Embedding是神經網絡倒數第二層的參數權重畏纲。首先,最后一層是預測層春缕,倒數第二層與目標任務強相關盗胀,得到了Embedding,就可以用權重來表征該樣本淡溯。其次读整,獲得Embedding的目的是為了方便檢索,檢索實際上就是求距離最近咱娶,就是叉積最小米间。倒數第二層之前的隱層和倒數第二層的權重相乘可以理解為檢索的過程,因為也是求叉積膘侮,而且一次性求了和所有候選item的叉積屈糊,所以可以拿Embedding直接做權重。
2. 推薦系統為什么需要Embedding琼了?
在推薦系統中我們可以用Embedding作為向量逻锐,運用在推薦算法中作為近鄰推推薦(Nearest Neighbor,NN)夫晌,從而實現物物推薦,人人推薦昧诱,人物推薦晓淀。
Embedding向量作為推薦算法中必不可少的部分,主要有四個運用方向:
(1)在深度學習網絡中作為Embedding層盏档,完成從高維稀疏特征向量到低維稠密特征向量的轉換(比如Wide&Deep凶掰、DIN等模型)。因為推薦場景中大量使用One-hot編碼對類別蜈亩、id型特征進行編碼懦窘,導致樣本特征向量極度稀疏,而深度學習的結構特點使其不利于稀疏特征向量的處理稚配,因此幾乎所有的深度學習推薦模型都會利用Embedding層將高維稀疏特征向量轉換成稠密低維特征向量畅涂。因此,掌握各類Embedding技術是構建深度學習推薦模型的基礎性操作道川。
(2)作為預訓練的Embedding特征向量午衰,與其他特征向量連接后,一同輸入深度學習網絡進行訓練(比如FNN模型)愤惰。 Embedding本身就是極其重要的特征向量苇经。相比MF矩陣分解等傳統方法產生的特征向量,Embedding的表達能力更強宦言,特別是Graph Embedding技術被提出后扇单,Embedding幾乎可以引入任何信息進行編碼,使其本身就包含大量有價值的信息奠旺。在此基礎上蜘澜,Embedding向量往往會與其他推薦系統特征連接后一同輸入后續(xù)深度學習網絡進行訓練。
(3)通過計算用戶和物品的Embedding相似度响疚,Embedding可以直接作為推薦系統的召回層或者召回策略之一(比如Youtube推薦模型等)鄙信。 Embedding對物品、用戶相似度的計算是常用的推薦系統召回層技術忿晕。在局部敏感哈希(Locality-Sensitive Hashing)等快速最近鄰搜索技術應用于推薦系統后装诡,Embedding更適用于對海量備選物品進行快速“篩選”,過濾出幾百到幾千量級的物品交由深度學習網絡進行“精排”践盼。
YouTube 是利用 embedding 特征做推薦的開山之作鸦采,論文中user_vec是通過DNN學習到的,而引入DNN的好處則是任意的連續(xù)特征和離散特征可以很容易添加到模型當中咕幻。同樣的渔伯,推薦系統常用的矩陣分解方法雖然也能得到user_vec和item_vec,但同樣是不能Embedding嵌入更多feature肄程。
1.整個模型架構是包含三個隱層的DNN結構锣吼。輸入是用戶瀏覽歷史watch vector选浑、搜索歷史search vector、人口統計學信息gender玄叠,age和其余上下文信息concat成的輸入向量古徒;輸出分:線上和離線訓練兩個部分。
2.類似于word2vec的做法读恃,每個視頻都會被Embedding到固定維度的向量中描函。用戶的觀看視頻歷史則是通過變長的視頻序列表達,最終通過加權平均(可根據重要性和時間進行加權)得到固定維度的watch vector作為DNN的輸入狐粱。
3.離線訓練階段輸出層為softmax層,而線上則直接利用user向量查詢相關商品胆数。模型進行serving的過程中肌蜻,沒有直接使用整個模型去做inference,而是直接使用user embedding和item embedding去做相似度的計算必尼。其中user embedding是模型最后一層mlp的輸出蒋搜,video embedding則直接使用的是softmax的權重。
(4)通過計算用戶和物品的Embedding判莉,將其作為實時特征輸入到推薦或者搜索模型中(比如Airbnb的Embedding應用)豆挽。值得一提的,就是以前的Embedding都是離線計算的券盅,但是在2017年facebook發(fā)布了faiss算法帮哈,就可以流式添加Embedding,然后百萬數據量的計算縮短在毫秒ms級了锰镀。
2018年Airbnb 論文主要貢獻是在稀疏樣本的構造上有所創(chuàng)新娘侍, Airbnb 這個操作部分彌補了 YouTube 在新聞推薦領域水土不服的問題。從一個 Embedding主義者的角度看泳炉,他的創(chuàng)新點主要有一下兩點憾筏,一個是分群 embedding,另一個是用戶和 item 混合訓練花鹅。
3. 推薦系統代碼中如何用數據生成Embedding氧腰?
結合上圖,羅列3個代碼片段來說一下具體Embedding是怎么計算的刨肃?這3個場景分別為:word2vec古拴、系統過濾和DNN。
3.1 基于內容的word2vec
先看紅色方框有3句話是做為輸入之景。然后word2vec就算了每個詞的Embedding斤富。
然后右邊,我們可以把文檔換成用戶锻狗,詞語換成電影满力,那么得到電影的推薦了焕参。
3.2 協同過濾矩陣的分解方法
其實指定輸入的“用戶id”,“電影id”油额,“評分”烦周,然后fit,就的得到了每個item(表中的id電影)的Embedding向量(表中的features)草雕。
因為他們都是行文相關的伦忠,那就可以物物推薦,人人推薦掂僵,人物推薦航厚。
3.3 DNN深度學習的方法
其實上面特別說了一下,這里在細節(jié)說一下锰蓬。Embedding其實是DNN的副產品幔睬。
什么意思呢?下面左邊這個圖芹扭,紅色箭頭指的Relu麻顶,其實包含了256個向量,其實這個256向量就是Embedding舱卡,這個Embedding就是權重辅肾。
然后最左邊得到 video的向量,配合著Nearest Neighbor就能把通過Embedding權重計算的結果一起送去softmax最后輸出預測top N轮锥。
是不是感覺似曾相識矫钓?其實transformer也是類似,利用QW的計算權重賦給V舍杜,然后送給softmax份汗,唯一區(qū)別在于這里用DNN,而transformer用的是多頭attention蝴簇。
4. 推薦系統代碼中的Embedding技術分類有哪些杯活?
4.1 特征Embedding化
在特征工程中,對于離散值熬词,連續(xù)值旁钧,多值大致有以下幾種 Embedding的方法。預先訓練的 Embedding特征向量互拾,訓練樣本大歪今,參數學習更充分。end2end 是通過 Embedding層完成從高維稀疏向量到低維稠密特征向量的轉換颜矿,優(yōu)點是端到端寄猩,梯度統一,缺點是參數多骑疆,收斂速度慢田篇,如果數據量少替废,參數很難充分訓練。
4.2 Embedding運算
不同的深度學習模型中泊柬,除了對網絡結構的各種優(yōu)化外椎镣,在 Embedding的運算上也進行了各種優(yōu)化的嘗試,對網絡結構的各種優(yōu)化本質上也是對 Embedding的運算的優(yōu)化兽赁。
4.3 Embedding缺陷
Embedding作為一種技術状答,雖然很流行,但是他也存在一些缺陷刀崖,比如增量更新的語義不變性惊科,很難同時包含多個特征,長尾數據難以訓練等亮钦。
2020的KDD會議中译断,華為的一篇AutoFIS文章談到了對Embedding持續(xù)優(yōu)化,可以得到合適的特征向量化表達或悲,同時得到內積“更合適”的值來表示組合特征的重要性。
其原理是在<Vi, Vj>前面增加了一個參數堪唐。我們可能會問再引入一個參數不是多此一舉巡语?我反而覺得這才是AutoFIS精華。Embedding的作用是將特征用向量化表示淮菠,并且保證相似特征的距離更近男公。基于此合陵,相似特征內積就更大枢赔。而“相似”和“重要”是兩碼事,很“相似”的特征不一定能對預測起到更“重要”的作用拥知。但是DeepFM在訓練的過程中并沒有將這兩部分解耦踏拜,可能造成的結果就是Embedding的向量化表達不一定能讓相似的特征距離更近,同時重要的特征內積也不一定大低剔。
參考
深度學習推薦系統中各類流行的Embedding方法(上) - 云+社區(qū) - 騰訊云 (tencent.com)
推薦系統 embedding 技術實踐總結 - 知乎 (zhihu.com)
Deep Neural Network for YouTube Recommendation論文精讀 - 知乎 (zhihu.com)
推薦系統中的embedding技術 - 知乎 (zhihu.com)
FM的DNN實現——隱向量可以認為就是embedding學習的權重程序大猩猩的博客-CSDN博客隱向量