用隐式反馈做推荐模型,你做对了吗
現在大家都習慣用隱式反饋來學習推薦模型,并作用于線上推薦系統(十方也不例外)。大量的隱式反饋數據確實緩解了數據稀疏的問題,但是這些數據很多并沒有反饋用戶真正的需求。拿電商舉例,大量的點擊,并不會帶來支付行為,就算是支付,用戶也可能給差評,這種情況往往應該是負例,但是我們卻把它們當初正例用于推薦模型,這樣不可避免帶來了噪聲。《Denoising Implicit Feedback for Recommendation》這篇論文發現了這種偏差對推薦產生了嚴重的負面影響,所以提出了一種新的訓練策略Adaptive Denoising Training(ADT),在訓練過程中就能發現噪聲。下面我們就看看如何用這種訓練策略,去提升推薦質量吧。
噪聲的惡劣影響
從下表中,我們可以看到有噪聲的數據訓練(Normal training)在Recall和NDCG上都遠低于用無噪聲訓練(Clean training),所以糾偏就很重要了。
其實以往就有很多工作進行糾偏,如下圖所示。(b)方法通過一些用戶行為過濾掉噪聲樣本,如用戶在頁面停留時間和一些其他行為模式,同時還增加了很多item特征,如item描述長度,來達到糾偏效果。(c)通過補充其他反饋,從而緩解隱式反饋的影響。這些方法都要補充很難獲取且較少的數據,并不是解決問題的好方法。(d)就是本論文提出的好方法,并不需要任何額外數據。(d)方法糾偏,主要是發現了那些false-positive(FP)的交互的loss在訓練的早期都偏大,所以會誤導模型學習,并且在訓練模型,模型就會過擬合這些噪聲,所以我們要對這種loss進行糾偏,但是要避免錯誤的對true-positive(TP)交互糾偏。
本文提到,該糾偏方法主要聚焦false-positive交互帶來的噪聲,忽視false-negative的交互。也很容易理解,正例遠比負例稀疏,所以false-positive會帶來更多影響。需要注意的是,false-positive交互在早期訓練中會非常難擬合,很容易擬合的樣本大多是非噪聲的樣本,過早的擬合hard的樣本也會損傷模型的泛化能力。從下圖中,我們對比true-positive和false-positive交互的loss,我們會發現兩種樣本的loss會最終收斂,說明模型不僅記住了正確的信息,也把噪聲學到了。同時我們還發現兩種樣本loss下降速度不同,并在早期訓練過程中,false-positive要遠大于true-positive,這也說明了模型很難學到這些噪聲,雖然最終還是學到了。
降噪兩板斧
Truncated Loss: 通過一個動態閾值直接裁剪hard樣本的loss,如下式所示。
T-CE loss 會無差別的移除loss超過閾值的部分,這個閾值是不能固定的,因為loss會隨著訓練的進行逐漸下降,所以閾值也會有個drop rate。這個drop rate必須有個上限,限制丟掉loss的比例,該drop rate需要平滑的從0增長到它的上限,這樣使得模型可以逐漸的區分true-positive和false-positive,所以drop rate定義如下:
整個T-CE loss的算法定義如下所示:
Reweighted Loss: 在訓練中給hard樣本一個較小的權重。
這個定義如下式,就是給loss乘個weight:
同理,這個weight在訓練過程中應該動態更新,盡量需要對hard的樣本給予一個較小的weight,并且可以適用于不同的模型和數據。該方法主要收到Focal Loss的啟發,通過預估的score評估w的大小。預估的score是在[0,1]范圍,而CE loss范圍是[0,∞],對positive樣本預估較小的值會導致很大的CE loss,所以w定義如下:
這里beta是一個超參控制weights的范圍,從下圖我們可以看到用上述weights,我們可以顯著降低hard樣本的loss。
我們需要注意的是,負例也會產生很大的loss,所以我們把公式修訂為下式:
實驗
從下面實驗中我們發現,使用這“兩板斧”效果還是不錯的。
總結
以上是生活随笔為你收集整理的用隐式反馈做推荐模型,你做对了吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 入坑推荐系统,从Google这篇开始
- 下一篇: 模型调参指南北东西