選單

當推薦遇到冷啟動

冷啟動問題,大家並不陌生。但是如何解決呢?加特徵,加樣本,加圖譜,加規則?十方在做資訊流廣告推薦時,主要透過加一些泛化特徵解決冷啟動問題,但是這樣並不一定是較好的方案,新廣告很大程度上,還是會被模型“低估”。如何解決冷啟動問題呢?

不得不面對的冷啟動!

冷啟動問題可以逃避嗎?當然不能,就拿廣告推薦來說,當一個客戶想投廣告,由於該廣告從未曝光過,召回模型可能都無法召回,更別說後面的粗排和精排模型是否會過濾掉,所以很難起量。《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

我們知道,用偽標籤訓練模型,會造成模型最佳化過程不穩定,所以該論文引入了co-training方法,該方法同時訓練兩個模型f和g,每個模型的訓練都依賴對方模型的預估結果。學習演算法簡單描述如下:

(1) 取樣兩個mini-batches  B 和 B。 並透過f和g分別算出偽標籤。

(2) 透過loss計算梯度,模型f用 B 更新引數,模型g用B 更新引數。

因此f在B的loss函式定義如下:

當推薦遇到冷啟動

實驗

實驗比較了各種基於KG的推薦演算法,用了3個開源資料集,如下:

當推薦遇到冷啟動

實驗結果發現,KGPL在各個資料集的效果是可圈可點的。

當推薦遇到冷啟動

宣告:文章收集於網路,版權歸原作者所有,為傳播資訊而發,如有侵權,請聯絡小編刪除,謝謝!