達觀數據推薦演算法實現:協同過濾之item embedding

文/達觀數據 范雄雄

推薦系統本質是在用戶需求不明確的情況下,解決信息過載的問題,聯繫用戶和信息,一方面幫助用戶發現對自己有價值的信息,另一方面讓信息能夠展現在對它感興趣的用戶面前,從而實現信息消費者和信息生產者的雙贏(這裡的信息的含義可以非常廣泛,比如諮詢、電影和商品等,下文中統稱為item)。達觀數據相關推薦是達觀推薦系統中的重要組成部分,其價值在於,在沒有用戶畫像信息的情況下,也能給用戶以好的推薦體驗,比如資訊類,通過達觀相關推薦演算法找到item相關的其他item,可以提供對某一類或者針對某一事件多角度多側面的深度閱讀。本文主要先簡單介紹相關推薦的一些常用演算法,然後介紹一下基於item embedding的協同過濾。

1. 達觀相關推薦的常用演算法

1.1 Content-based相關推薦

基於內容的推薦一般依賴於一套好的標籤系統,通過計算item之間tag集合的相似性來衡量item之間的相似性,一套好的標籤系統需要各方面的打磨,一方面需要好的編輯,一方面也依賴於產品的設計,引導用戶在使用產品的過程中,對item提供優質的tag。

1.2 基於協同過濾的相關推薦

協同過濾主要分為基於領域以及基於隱語義模型。

基於領域的演算法中,ItemCF是目前業界應用最多的演算法,其主要思想為「喜歡item A的用戶大都喜歡用戶 item B」,通過挖掘用戶歷史的操作日誌,利用群體智慧,生成item的候選推薦列表。主要統計2個item的共現頻率,加以時間的考量,以及熱門用戶以及熱門item的過濾以及降權。

LFM(latent factor model)隱語義模型是最近幾年推薦系統領域最為熱門的研究話題,該演算法最早在文本挖掘領域被提出,用於找到文本隱含的語義,在推薦領域中,其核心思想是通過隱含特徵聯繫用戶和物品的興趣。主要的演算法有pLSA、LDA、matrix factorization(SVD,SVD++)等,這些技術和方法在本質上是相通的,以LFM為例,通過如下公式計算用戶u對物品i的興趣:

公式中pu,k和qi,k是模型的參數,其中pu,k度量了用戶u的興趣和第k個隱類的關係,而qi,k度量了第k個隱類和物品i之間的關係。而其中的qi,k可視為將item投射到隱類組成的空間中去,item的相似度也由此轉換為在隱空間中的距離。

2. item2vec:NEURAL ITEM EMBEDDING

2.1 word2vec

2013年中,Google發布的word2vec工具引起了大家的熱捧,很多互聯網公司跟進,產出了不少成果。16年Oren Barkan以及Noam Koenigstein借鑒word2vec的思想,提出item2vec,通過淺層的神經網路結合SGNS(skip-gram with

negative sampling)訓練之後,將item映射到固定維度的向量空間中,通過向量的運算來衡量item之間的相似性。下面對item2vec的做簡要的分享:

由於item2vec基本上是參照了google的word2vec方法,應用到推薦場景中的item2item相似度計算上,所以首先簡單介紹word2vec的基本原理。

Word2vec主要用於挖掘詞的向量表示,向量中的數值能夠建模一個詞在句子中,和上下文信息之間的關係,主要包括2個模型:CBOW(continuous bag-of-word)和SG(skip-gram),從一個簡單版本的CBOW模型介紹,上下文只考慮一個詞的情形,如圖1所示,

圖1

假設只有一個隱層的神經網路,輸入層以及輸出層均為詞的one-hot編碼表示,詞表大小假設為V,隱層神經元個數為N,相鄰層的神經元為全連接,層間的權重用V*N的矩陣W表示,隱層到輸出層的activation function採用softmax函數,

其中wI,wj為詞表中不同的詞,yj為輸出層第j個神經元的輸出,uj為輸入層經過權重矩陣W到隱層的score,uj』為隱層經過權重矩陣W』到輸出層的score。訓練這個神經網路,用反向傳播演算法,先計算網路輸出和真實值的差,然後用梯度下降反向更新層間的權重矩陣,得到更新公式:

其中,η為更新的步長,ej為模型預測以及真實值之間的誤差,h為隱層向量。圖2為上下文為多個詞時的情況,中間的隱層h計算由

改為

即輸入向量為多個上下文向量相加求平均,後續的參數學習與上文的單個詞的上下文情況類似。遍歷整個訓練集context-target詞對,經過多次迭代更新模型參數,對模型中的向量的影響將會累積,最終學到對詞的向量表示。

Skip-gram跟CBOW的輸入層和輸出層正好對調,區別就是CBOW是上下文,經過模型預測當前詞,而skip-gram是通過當前詞來預測上下文。

圖2

目前為止,對詞表中的每個詞,有兩種向量表示:input vector和output vector,對應輸入層到隱層權重矩陣W的行向量和隱層到輸出層權重矩陣W的列向量,從等式4、5可以看出,對每一個訓練樣本,都需要遍歷詞表中的每一個詞,因此,學習output vector的計算量是非常大的,如果訓練集或者詞表的規模大的話,在實際應用中訓練不具可操作性。為解決這個問題,直覺的做法是限制每個訓練樣本需要更新的output vectors,google提出了兩個方法:hierarchical softmax和negative sampling,加快了模型訓練的速度,在此不做展開討論。

2.2 item2vec

由於wordvec在NLP領域的巨大成功,Oren Barkan and Noam

Koenigstein受此啟發,利用item-based CF學習item在低維latent space的embedding representation,優化item的相關推薦。

詞的上下文即為鄰近詞的序列,很容易想到,詞的序列其實等價於一系列連續操作的item序列,因此,訓練語料只需將句子改為連續操作的item序列即可,item間的共現為正樣本,並按照item的頻率分布進行負樣本採樣。

圖3

Oren Barkan and Noam Koenigstein以SVD作為baseline,SVD的隱類以及item2vec的維度都取40,用Microsoft Xbox Music

service收集的 user-artists數據集,對結果進行聚類,如圖3所示,圖a是item2vec的聚合效果,圖b是SVD分解的聚合效果,看起來item2vec的聚合效果要更好些。

作者嘗試將item2vec應用到達觀數據的相關推薦當中,由於資訊、短視頻類的場景一般的連續item操作會比較多,因此天然的非常適合用item2vec來訓練item的向量表示,從實際的訓練結果和線上評估來看,item2vec對CTR提升是有明顯幫助的。

| 想了解學習更多技術乾貨,掃描下方二維碼關注「達觀數據」公眾號

推薦閱讀:

如何理解SVM | 支持向量機之我見
Python · SVM(三)· 核方法
【機器學習系列文章】SVM初識之如何解決分類問題|原創
Kaggle 實戰之數字識別 -- 新手入門SVM分類演算法(Python)

TAG:SVM | 推荐 | 机器学习 |