一、背景
工業界現有的推薦系統都需要從一個超大規模的候選集中拉取item進行打分排序。解決資料稀疏和指數級候選集分布的一種通常做法是從item的内容特征中學習出item的稠密表示。這裡很自然地就想到了工業界大名鼎鼎且應用廣泛的雙塔神經網絡結構,其中的一塔就是從豐富的item内容特征中學習到item的表示。
工業界目前訓練雙塔結構一般是通過随機mini-batch的方式來優化損失函數。這種訓練方式存在的一個顯著問題就是in-batch loss會因為随機采樣偏差而導緻模型效果不好,尤其是當樣本分布出現明顯傾斜的時候。我們提出了一種全新的算法,可以從流式資料中預估item的頻率。通過理論分析和實驗,新算法有能力在不知道候選集全部的詞典情況下做出無偏差的估計并且可以自适應候選集分布的變化。在Youtube線上的實驗也證明了該算法的有效性。
二、亮點
在大規模的推薦系統中,利用雙塔模型對user-item對的互動關系進行模組化,學習【使用者,上下文】向量與【item】向量,針對大規模流資料,提出in-batch softmax損失函數與流資料頻率估計方法(Streaming Frequency Estimation),可以更好的适應item的多種資料分布。
三、模型結構
3.1 模型架構
利用雙塔模型構架推薦系統,Queries特征向量 { x i } i = 1 N \{x_i\}^N_{i=1} {xi}i=1N和item特征向量 { y j } j = 1 M \{y_j\}^M_{j=1} {yj}j=1M ,目标是給定一個query,檢索到一系列item子集用于後續排序推薦任務。模型結構如圖所示:
3.2 In-batch loss function
直覺上,檢索問題可以看作是一個多分類問題,給定query X,從M個item中得到y的機率可以利用softmax函數計算:
當M非常大時,我們通常可以利用負采樣算法進行計算。然而對于流資料,我們考慮在同一個batch中采樣負樣本,batch-softmax函數為:
在每個batch中,由于存在幂律分布現象,即如果在每個batch中随機采樣負樣本,會使熱門商品更容易被采樣到,在損失函數中就“過度”懲罰了這些熱門商品,是以考慮用頻率對采樣進行修正,即:
這裡引入 p j p_j pj的作用是:當 p j p_j pj越小時, − l o g ( p j ) -log(p_j) −log(pj)越大, s c ( x i , y j ) s^c(x_i,y_j) sc(xi,yj)就越大;反之,當 p j p_j pj越大時, s c ( x i , y j ) s^c(x_i,y_j) sc(xi,yj)就越小。相當于降低了熱門商品的得分,提高了冷門商品的得分。
3.3 Streaming Frequency Estimation
此方法用于估計在流資料中,每個batch下item出現的機率。
如果一個item每50步出現一次,那麼該item出現的機率p=1/50=0.02。按照這樣的想法,針對流資料,利用哈希序列來記錄采樣id(暫時不考慮hash collision的問題)。
定義兩個大小為H的數組A,B,哈希函數h可以把每個item映射為[H]内的整數。
A[h(y)]表示item y上次被采樣到的時刻
B[h(y)]表示每多少步item y可以被采樣一次
先說結論,當第t步y被采樣到時,利用疊代可更新A,B:
利用上述的In-batch loss function與Streaming Frequency Estimation可建立雙塔模型:
為了解決hash collision的問題,可以建立多個數組 A i , B i A_i,B_i Ai,Bi,最終在多個數組中取最大:
3.4 YouTube推薦
利用雙塔模型訓練,對YouTube的視訊推薦,模型架構如下圖所示:
訓練标簽:當點選了video并觀看完整,則 r i = 1 r_i=1 ri=1 ,否則 r i = 0 r_i=0 ri=0
視訊特征:視訊 id,頻道id等,特征轉化為embedding,對于多值類别時,對embedding權重平均
使用者特征:曆史觀看視訊embedding等
參考資料
- Google工業風最新論文, Youtube提出雙塔結構流式模型進行大規模推薦
- 【推薦系統經典論文(九)】谷歌雙塔模型