Embedding(一下簡化寫為emb)是深度學習推薦領域中非常基礎和關鍵的應用, 它直譯為"向量化"或者"向量映射". 它的主要作用是:
將高維稀疏向量轉換成低維稠密向量,便于上層深度神經網絡處理.
書中將emb的內容分為3大部分:
- emb基礎
- 介紹emb的發展演化過程
- 線上部署方式和快速服務的方法
emb是什么
剛才已經介紹過, embedding就是用一個低維稠密的向量"表示"一個對象(商品,電影,用戶等等)
emb是深度學習的"核心操作",主要原因主要有以下三個:
- 推薦場景中,大量使用one-hot對類別\id型特征進行編碼,導致樣本特征向量季度稀疏,而深度學習的結構特點是其不利于稀疏特征向量的處理,因此通常會加入emb層,將這些高維稀疏特征胡在哪換成低維稠密向量.
- emb的表達能力強, 可以引入大量信息進行emb編碼,有利于模型學習.
- emb對物品\用戶相似度的計算是常用的推薦系統召回層技術.更適用于對海量備選物品進行快速"初篩".
word2vec - 經典emb方法
word to vector, 的假設是任務一句話中的相鄰詞之間關系緊密.即每個詞都是有相鄰詞決定的(skip-gram),或者每個詞都決定了相鄰的詞(cbow).
訓練方法
數據: 選取長度為的滑動窗口, 從語料庫中抽取一個句子,將滑動窗口有左至右滑動,每一棟一次,窗口中的詞組就行成了一個訓練樣本,以skip-gram為例,
即為窗口中中間且需要被學習emb的詞,
周圍的詞.
目標: 極大似然估計, 我們希望所有樣本的條件概率之積最大.
其中,的定義是: 我們可以把word2vec定義為一個多分類問題,那么就可以使用softmax函數.
其中, 是指被預測的中間詞
(skip-gram)
word2vec的負采樣訓練方法
上一節給出了word2vec的模型目標和訓練方法,實際上,這種方式挺不可行,如果語料庫中的詞的數量很多如10000個詞,那么就意味著softmax層要計算10000個內積,然后根據這10000個計算誤差,成本太高.
為了減輕訓練的負擔,通常使用負采樣
的方法進行訓練. 將優化目標從一個多分類問題簡化成為一個近似的二分類問題:
迭代過程推導: http://www.lxweimin.com/p/b05dfd48c43f
item2vec- word2vec在推薦系統領域的推廣
與之前提到的word2vec不同的是數據構造方式, 將用戶一段時間的點擊或者其他行為作為一句話里的詞
使用word2vec方法進行學習得到相應的word vector.
雙塔模型
embedding方法不只item2vec, 目前比較常用的是雙塔模型,將item和user分為兩個nn塔進行學習. 是一種廣義上的item2vec模型.
輸入特征有用戶行為序列生成的one-hot特征想咯昂,變成了可包含更多信息的\全面的物品特征向量.
item2vec方法的局限性
item2vec只能用序列數據,在互聯網場景下大量的網絡化數據時往往顯得捉襟見肘.
Graph Embedding-引入更多結構信息的圖嵌入技術
word2vec和item2vec使用的是"序列"樣本數據, 互聯網場景下, 數據對象之間更多呈現的是圖結構.典型的場景是由用戶行為數據
生成的物品關系圖(下圖b),以及由屬性和實體組成的知識圖譜(下圖c).
傳統的word2vec方式并不能直接學習圖結構, GraphEmbedding(簡稱GE)是一個新的方向,逐漸在深度學習推薦系統里流行了起來.
GraphEmbedding是一種對圖結構中的節點進行Embedding編碼的方法. 生成節點的emb向量一般包含圖的結構信息以及附近節點的局部相似性信息.
接下來按照書中的順序,介紹幾個常用的GE方法
DeepWalk-基礎GE方法
它的思路是在物品組成的圖結構上進行隨機有組,產生大量的物品序列,然后將這些序列作為樣本輸入Word2Vec訓練,得到EMb.
如上圖所示,主要的算法流程為:
- 通過日志分析挖掘到用戶的行為序列;
- 基于序列構建物品關系圖,
- 隨機游走方式產生序列,
隨機游走的跳轉概率為相應出邊的權重除以所有出邊的權重和
- 輸入w2v進行訓練
Node2vec-同質性和結構性權衡
DeepWalk在隨機游走時使用的是比較單一的概率方式, NOde2vec考慮了圖結構的同質性和結構性
,對于與起始點不同距離的節點采取不同的概率進行游走,通過調節超參控制學習的同質性和結構性
emb.
同質性
:指相近的節點盡量相似,如上圖中的U和S1234是同質;
為了能夠學習到同質性,需要讓隨機游走的過程更傾向于DFS,因為dfs更有可能通過多次跳轉,游走到遠方的節點上,但大概率率會在一個大的集團內部進行,使得一個集團或者社區內部的節點emb更為相似,從而更多地表達網絡的"同質性";
結構性
:主要指結構上相似, 例如U和S6.
BFS能夠學習結構性,主要是因為它能夠在相鄰節點遍歷,當前節點是"局部中心節點","邊緣節點","連接性節點"學到的emb也是不同的,所以能夠學習到結構性.
通過節點間的跳轉概率控制BFS和DFS的傾向性 , 下圖所示為從t
跳轉到節點v,再從v條狀到周圍點的概率示意圖,我們針對距離起始節點t
的距離來采用不同的跳轉概率,p
越小BFS概率越大學習結構性信息,q
越小DFS學習同質性信息.
EGES-阿里巴巴的綜合性GE方法
之前介紹的emb方法只使用了物品id, 如果我們遇到了冷啟動
即之前沒有遇到過的物品或者是長尾
的物品,那么對導致沒有相應的emb或者emb學習的不充分的問題. 為了解決這個問題,alibaba加入了補充信息sideinfo
來豐富embedding信息的來源,從而使沒有歷史行為記錄的商品獲得較合理的初始embedding.
EGES使用引入了與item相關的類別\價格\品牌等基礎信息,得到各自的emb,再通過attention的方法將emb進行加權pooling得到最終的emb表達.
這里值得注意的是,ali采用了作為emb的權重, 主要原因是:
- 避免權重為0
- 因為
梯度下降過程中有優良的數學性質.
目前業界用graphSage比較多也比較成熟
emb與推薦系統相結合
之前介紹了一些emb的常用產出方式,實際在推薦系統中emb的利用可以分為3個方面:
- 在深度學習網絡中作為embedding層,完成從高位稀疏特征向量到低維稠密特征向量的轉換(預訓練);
- 作為與訓練的embeding特征向量,與其他特征向量連接后,一同輸入深度學習網絡進行訓練;
- 通過計算用戶和物品的embe相似度,進行匯總安徽.
embedding作為推薦系統召回層的方法
這里主要介紹youtube召回模型,這個模型是業界最為基礎和常用的范式,他將user的session以及屬性特征送入nn中使用最后一層的emb和和item emb進行softmax學習. 最終在通過線上實時預測用戶的emb與已經訓練好的emb進行相似度計算得到topN召回物料.
這里值得注意的是user的emb是離線或者實時產出的(書中說是離線產出的,我認為有問題,實時產出才能實時精準表達user的emb,效果才好),同時item的emb是單獨直接進入softmax的,與user session里邊的item無關(有人驗證過這樣效果好).
關于embeding相似topN的計算
一般用LSH方法進行快速計算,不做贅述. 主要是將emb進行分桶,每次從最相似的統計計算減少計算量.