当推荐遇到冷启动
冷啟動問題,大家并不陌生。但是如何解決呢?加特征,加樣本,加圖譜,加規則?十方在做信息流廣告推薦時,主要通過加一些泛化特征解決冷啟動問題,但是這樣并不一定是最好的方案,新廣告很大程度上,還是會被模型"低估"。如何解決冷啟動問題呢?
冷啟動問題可以逃避嗎?當然不能,就拿廣告推薦來說,當一個客戶想投廣告,由于該廣告從未曝光過,召回模型可能都無法召回,更別說后面的粗排和精排模型是否會過濾掉,所以很難起量。《Alleviating Cold-Start Problems in Recommendation through Pseudo-Labelling over Knowledge Graph》 這篇論文提出了基于GNN的知識圖譜方法解決冷啟動問題,該方法增加了偽標簽做數據增強。這種方法使用了歷史從未觀察到的user和item作為正樣本,補充到樣本中。通過在知識圖譜中為每個用戶選擇可能的正例,同時還進行了負采樣策略,從而抑制偏差。通過實驗證明該方法在各個場景下能顯著提高冷啟動user/item的推薦性能。
我們有一個集合的用戶U和一個集合的item I,如果用戶u和item i有交互,yu,i= 1,我們知道大部分(u,i)都是沒有被觀測過的,這是個非常稀疏的交互矩陣(u, i) U * I。我們把觀測過的user item 對定義為 O = {( , )| ∈ U, ∈ I+ } 。同時我們還有個KG G = {(?, , )|?, ∈ E, ∈ R},看過前幾篇關于 GNN的肯定很清楚,h表示head entity,t表示target entity,r就是h和t的關系。然后我們目標就是預估那些未被觀測到的yu,i。這篇論文用的GNN框架是KGNN-LS("Knowledge-aware graph neural networks with label smoothness regularization for recommender systems"),不是本文重點,本文重點介紹通過3種方法解決冷啟動的樣本問題。
我們的數據必須高度覆蓋未觀測數據,且不能把它們完全當成負樣本。為了緩解觀測到的(u,i)稀疏性問題,我們通過模型預測未觀察到的樣本(u,i)的label來增加正負標記數據。具體內容如下:
I+, I? , 和 I ±分別表示正例,負例和偽標簽,loss定義如下:
為了找到可靠的個性化偽標簽,我們可以用觀測到的user和item對,構建圖,從而用h跳廣度優先搜索算法(BFS)計算某個用戶的正例(I+)到各個未交互過的item( I ±)的路徑數,通過以下概率公式采樣偽標簽:
a是一個控制采樣分布偏度的超參,nu,i± 表示用戶u有交互的item到未交互過的item路徑數之和。從該公式,我們發現,如果觀測過的item到未觀測的item路徑數越多,被采樣到的概率越大。如果控制a為一個很小的值,這個采樣分布就偏向于均勻分布,該論文a取0.5。
此外還有基于流行度的采樣。由于冷啟動的item相比較與流行的item,更容易被采樣作為負樣本,因此這個偏差會影響模型的效果,解決辦法就是用下式概率分布進行負采樣:
mu,i-表示i-與用戶交互過的頻次,b用于控制頻次的重要程度。在訓練時,確保三種樣本(正例,負例,偽標簽)是均勻的。下面算法給出了采樣策略。
我們知道,用偽標簽訓練模型,會造成模型優化過程不穩定,所以該論文引入了co-training方法,該方法同時訓練兩個模型f和g,每個模型的訓練都依賴對方模型的預估結果。學習算法簡單描述如下:
(1) 采樣兩個mini-batches B 和 B . 并通過f和g分別算出偽標簽。
(2) 通過loss計算梯度,模型f用 B 更新參數,模型g用B 更新參數。
因此f在B 的loss函數定義如下:
實驗比較了各種基于KG的推薦算法,用了3個開源數據集,如下:
實驗結果發現,KGPL在各個數據集的效果是可圈可點的。
更多干貨,請關注公眾號:煉丹筆記總結
- 上一篇: 当推荐系统遇上用户画像:你的画像是怎么来
- 下一篇: 再谈序列化推荐