本次討論的問題目錄有:
- 什么是Embedding?
- 推薦系統(tǒng)為什么需要Embedding?
- 推薦系統(tǒng)代碼中如何用數(shù)據(jù)生成Embedding?
- 推薦系統(tǒng)代碼中的Embedding技術(shù)分類有哪些?
1. 什么是Embedding?
Embedding往簡單的說就是浮點數(shù)的“數(shù)組”(這個定義是我下的可能不一定準(zhǔn)確,如,[0.2,0.4]這就是二維Embedding),往復(fù)雜了說就是用一個低維稠密的向量“表示”一個對象,這里所說的對象可以是一個詞(Word2Vec),也可以是一個物品(Item2Vec),亦或是網(wǎng)絡(luò)關(guān)系中的節(jié)點(Graph Embedding)。其中“表示”這個詞意味著Embedding向量能夠表達相應(yīng)對象的某些特征,同時向量之間的距離反映了對象之間的相似性,說人話就是:Embedding實質(zhì)上是反映了一種興趣程度。
在 Embedding大行其道之前 oneHot才是最靚的仔。如果和我們比較熟悉的 oneHot 對比起來理解,頓時會發(fā)現(xiàn) Embedding這個玄里玄乎的概念,實際上 so easy。直觀上看 Embedding相當(dāng)于是對 oneHot 做了平滑,而 oneHot 相當(dāng)于是對 Embedding做了 max pooling。

一般意義的 Embedding是神經(jīng)網(wǎng)絡(luò)倒數(shù)第二層的參數(shù)權(quán)重,只具有整體意義和相對意義(很重要!很重要!很重要?。?,不具備局部意義和絕對含義(所有又叫l(wèi)atent factor,隱向量,可以細看參考文獻中——FM的DNN實現(xiàn))。這與 Embedding的產(chǎn)生過程有關(guān),任何 Embedding一開始都是一個隨機數(shù),然后隨著優(yōu)化算法,不斷迭代更新,最后網(wǎng)絡(luò)收斂停止迭代的時候,網(wǎng)絡(luò)各個層的參數(shù)就相對固化,得到隱層權(quán)重表(此時就相當(dāng)于得到了我們想要的 Embedding),然后在通過查表可以單獨查看每個元素的 Embedding。
我解釋一下為什么Embedding是神經(jīng)網(wǎng)絡(luò)倒數(shù)第二層的參數(shù)權(quán)重。首先,最后一層是預(yù)測層,倒數(shù)第二層與目標(biāo)任務(wù)強相關(guān),得到了Embedding,就可以用權(quán)重來表征該樣本。其次,獲得Embedding的目的是為了方便檢索,檢索實際上就是求距離最近,就是叉積最小。倒數(shù)第二層之前的隱層和倒數(shù)第二層的權(quán)重相乘可以理解為檢索的過程,因為也是求叉積,而且一次性求了和所有候選item的叉積,所以可以拿Embedding直接做權(quán)重。
2. 推薦系統(tǒng)為什么需要Embedding?
在推薦系統(tǒng)中我們可以用Embedding作為向量,運用在推薦算法中作為近鄰?fù)仆扑](Nearest Neighbor,NN),從而實現(xiàn)物物推薦,人人推薦,人物推薦。
Embedding向量作為推薦算法中必不可少的部分,主要有四個運用方向:
(1)在深度學(xué)習(xí)網(wǎng)絡(luò)中作為Embedding層,完成從高維稀疏特征向量到低維稠密特征向量的轉(zhuǎn)換(比如Wide&Deep、DIN等模型)。因為推薦場景中大量使用One-hot編碼對類別、id型特征進行編碼,導(dǎo)致樣本特征向量極度稀疏,而深度學(xué)習(xí)的結(jié)構(gòu)特點使其不利于稀疏特征向量的處理,因此幾乎所有的深度學(xué)習(xí)推薦模型都會利用Embedding層將高維稀疏特征向量轉(zhuǎn)換成稠密低維特征向量。因此,掌握各類Embedding技術(shù)是構(gòu)建深度學(xué)習(xí)推薦模型的基礎(chǔ)性操作。
(2)作為預(yù)訓(xùn)練的Embedding特征向量,與其他特征向量連接后,一同輸入深度學(xué)習(xí)網(wǎng)絡(luò)進行訓(xùn)練(比如FNN模型)。 Embedding本身就是極其重要的特征向量。相比MF矩陣分解等傳統(tǒng)方法產(chǎn)生的特征向量,Embedding的表達能力更強,特別是Graph Embedding技術(shù)被提出后,Embedding幾乎可以引入任何信息進行編碼,使其本身就包含大量有價值的信息。在此基礎(chǔ)上,Embedding向量往往會與其他推薦系統(tǒng)特征連接后一同輸入后續(xù)深度學(xué)習(xí)網(wǎng)絡(luò)進行訓(xùn)練。
(3)通過計算用戶和物品的Embedding相似度,Embedding可以直接作為推薦系統(tǒng)的召回層或者召回策略之一(比如Youtube推薦模型等)。 Embedding對物品、用戶相似度的計算是常用的推薦系統(tǒng)召回層技術(shù)。在局部敏感哈希(Locality-Sensitive Hashing)等快速最近鄰搜索技術(shù)應(yīng)用于推薦系統(tǒng)后,Embedding更適用于對海量備選物品進行快速“篩選”,過濾出幾百到幾千量級的物品交由深度學(xué)習(xí)網(wǎng)絡(luò)進行“精排”。
YouTube 是利用 embedding 特征做推薦的開山之作,論文中user_vec是通過DNN學(xué)習(xí)到的,而引入DNN的好處則是任意的連續(xù)特征和離散特征可以很容易添加到模型當(dāng)中。同樣的,推薦系統(tǒng)常用的矩陣分解方法雖然也能得到user_vec和item_vec,但同樣是不能Embedding嵌入更多feature。

1.整個模型架構(gòu)是包含三個隱層的DNN結(jié)構(gòu)。輸入是用戶瀏覽歷史watch vector、搜索歷史search vector、人口統(tǒng)計學(xué)信息gender,age和其余上下文信息concat成的輸入向量;輸出分:線上和離線訓(xùn)練兩個部分。
2.類似于word2vec的做法,每個視頻都會被Embedding到固定維度的向量中。用戶的觀看視頻歷史則是通過變長的視頻序列表達,最終通過加權(quán)平均(可根據(jù)重要性和時間進行加權(quán))得到固定維度的watch vector作為DNN的輸入。
3.離線訓(xùn)練階段輸出層為softmax層,而線上則直接利用user向量查詢相關(guān)商品。模型進行serving的過程中,沒有直接使用整個模型去做inference,而是直接使用user embedding和item embedding去做相似度的計算。其中user embedding是模型最后一層mlp的輸出,video embedding則直接使用的是softmax的權(quán)重。
(4)通過計算用戶和物品的Embedding,將其作為實時特征輸入到推薦或者搜索模型中(比如Airbnb的Embedding應(yīng)用)。值得一提的,就是以前的Embedding都是離線計算的,但是在2017年facebook發(fā)布了faiss算法,就可以流式添加Embedding,然后百萬數(shù)據(jù)量的計算縮短在毫秒ms級了。
2018年Airbnb 論文主要貢獻是在稀疏樣本的構(gòu)造上有所創(chuàng)新, Airbnb 這個操作部分彌補了 YouTube 在新聞推薦領(lǐng)域水土不服的問題。從一個 Embedding主義者的角度看,他的創(chuàng)新點主要有一下兩點,一個是分群 embedding,另一個是用戶和 item 混合訓(xùn)練。

3. 推薦系統(tǒng)代碼中如何用數(shù)據(jù)生成Embedding?
結(jié)合上圖,羅列3個代碼片段來說一下具體Embedding是怎么計算的?這3個場景分別為:word2vec、系統(tǒng)過濾和DNN。
3.1 基于內(nèi)容的word2vec
先看紅色方框有3句話是做為輸入。然后word2vec就算了每個詞的Embedding。
然后右邊,我們可以把文檔換成用戶,詞語換成電影,那么得到電影的推薦了。

3.2 協(xié)同過濾矩陣的分解方法
其實指定輸入的“用戶id”,“電影id”,“評分”,然后fit,就的得到了每個item(表中的id電影)的Embedding向量(表中的features)。
因為他們都是行文相關(guān)的,那就可以物物推薦,人人推薦,人物推薦。

3.3 DNN深度學(xué)習(xí)的方法
其實上面特別說了一下,這里在細節(jié)說一下。Embedding其實是DNN的副產(chǎn)品。
什么意思呢?下面左邊這個圖,紅色箭頭指的Relu,其實包含了256個向量,其實這個256向量就是Embedding,這個Embedding就是權(quán)重。
然后最左邊得到 video的向量,配合著Nearest Neighbor就能把通過Embedding權(quán)重計算的結(jié)果一起送去softmax最后輸出預(yù)測top N。
是不是感覺似曾相識?其實transformer也是類似,利用QW的計算權(quán)重賦給V,然后送給softmax,唯一區(qū)別在于這里用DNN,而transformer用的是多頭attention。

4. 推薦系統(tǒng)代碼中的Embedding技術(shù)分類有哪些?
4.1 特征Embedding化
在特征工程中,對于離散值,連續(xù)值,多值大致有以下幾種 Embedding的方法。預(yù)先訓(xùn)練的 Embedding特征向量,訓(xùn)練樣本大,參數(shù)學(xué)習(xí)更充分。end2end 是通過 Embedding層完成從高維稀疏向量到低維稠密特征向量的轉(zhuǎn)換,優(yōu)點是端到端,梯度統(tǒng)一,缺點是參數(shù)多,收斂速度慢,如果數(shù)據(jù)量少,參數(shù)很難充分訓(xùn)練。

4.2 Embedding運算
不同的深度學(xué)習(xí)模型中,除了對網(wǎng)絡(luò)結(jié)構(gòu)的各種優(yōu)化外,在 Embedding的運算上也進行了各種優(yōu)化的嘗試,對網(wǎng)絡(luò)結(jié)構(gòu)的各種優(yōu)化本質(zhì)上也是對 Embedding的運算的優(yōu)化。

4.3 Embedding缺陷
Embedding作為一種技術(shù),雖然很流行,但是他也存在一些缺陷,比如增量更新的語義不變性,很難同時包含多個特征,長尾數(shù)據(jù)難以訓(xùn)練等。

2020的KDD會議中,華為的一篇AutoFIS文章談到了對Embedding持續(xù)優(yōu)化,可以得到合適的特征向量化表達,同時得到內(nèi)積“更合適”的值來表示組合特征的重要性。
其原理是在<Vi, Vj>前面增加了一個參數(shù)。我們可能會問再引入一個參數(shù)不是多此一舉?我反而覺得這才是AutoFIS精華。Embedding的作用是將特征用向量化表示,并且保證相似特征的距離更近。基于此,相似特征內(nèi)積就更大。而“相似”和“重要”是兩碼事,很“相似”的特征不一定能對預(yù)測起到更“重要”的作用。但是DeepFM在訓(xùn)練的過程中并沒有將這兩部分解耦,可能造成的結(jié)果就是Embedding的向量化表達不一定能讓相似的特征距離更近,同時重要的特征內(nèi)積也不一定大。

參考
深度學(xué)習(xí)推薦系統(tǒng)中各類流行的Embedding方法(上) - 云+社區(qū) - 騰訊云 (tencent.com)
推薦系統(tǒng) embedding 技術(shù)實踐總結(jié) - 知乎 (zhihu.com)
Deep Neural Network for YouTube Recommendation論文精讀 - 知乎 (zhihu.com)
推薦系統(tǒng)中的embedding技術(shù) - 知乎 (zhihu.com)
FM的DNN實現(xiàn)——隱向量可以認為就是embedding學(xué)習(xí)的權(quán)重程序大猩猩的博客-CSDN博客隱向量