推薦算法之加權采樣


一、應用場景

  在基於用戶興趣召回物品時,每個用戶都有興趣標簽,有時候可能興趣標簽非常多,每一個標簽都有計算出來的權重,從高到底進行排序。在進行推薦的時候,我們到底基於哪些興趣標簽進行推薦呢,只選取topN的嗎,還是全部?如果只選取topN的,那每次推薦結果都比較相似,而且權重低的興趣標簽似乎得不到推薦;如果按照全部標簽進行推薦,可能計算量會非常大。

  這個時候可以加權采樣方式篩選用戶的興趣標簽,每次召回的不是全部興趣標簽,而是按照權重采樣一部分標簽進行召回,這樣做的好處是顯然的:

      1)減少召回的時間復雜度

      2)可以保留更多的標簽

      3)每次召回計算都有所變化,滿足了推薦多樣性

      4)雖有變化,但依然受標簽相對權重大小的約束

在熱門排行榜的展示中,也可以采用加權采樣方法,比如熱門展示位只有10個,那每次可以加權采樣10個展示,刷新還有細微變化。

所以,加權采樣應該屬於推薦系統中的技巧性方法,能夠細微的改善用戶的推薦結果,還是非常重要的。

二、有限數據集的加權采樣

現在假設你有用戶標簽若干,每一個標簽都有個權重 w,權重高低反映了用戶對這個標簽的感興趣程度高低。你希望每次輸出一部分標簽用於召回推薦候選集,每次輸出時都不一樣,但是又能反映用戶標簽的權重,輸出的概率和權重成正比,公式如下:

  1. wi 是每個樣本的權重,比如用戶標簽權重;
  2. R 是遍歷每個樣本時產生的 0 到 1 之間的隨機數;
  3. Si 就是每個樣本的采樣分數

三、無限數據集-蓄水池抽樣

兩種采樣都是針對有限數據集的,也就是采樣之前都要遍歷一遍所有樣本。那么如果面對的數據集無限大,或者不知道多大時,該怎么做加權采樣呢?這就要講到另一個采樣算法了,名字叫蓄水池采樣(也叫蓄水池抽樣)。

蓄水池采樣:

假如有一個數據集合,一共有 n 條,要從中采樣取出 k 個,那么每個樣本被選中的概率就是 k/n 。
蓄水池采樣的做法是:
1.直接先取出前 k 個樣本留着,這 k 個就是隨時准備最終要輸出的;
2.從第 k+1 個開始,每個都以 k/n 的概率去替換那留着的 k 個樣本中的一個。

這個過程,隨時可以取用那 k 個集合作為輸出結果,任意時刻,當總樣本遍歷了 n 個時,他們的概率都是 k/n 。這就是蓄水池采樣,蓄水池采樣,顧名思義,k 個元素的樣本集合就是個蓄水池,是任意時刻的采樣結果,可以隨時取用。
 
加權蓄水池采樣:
現在回到我們今天的主題來,實際上更需要的是加權蓄水池采樣。加權蓄水池采樣利用的依然是在前面說的第一種加權采樣方法,只不過結合了蓄水池采樣的思想:
1、為每一個樣本生成一個分數,分數還是采用上述si的計算公式。
2、如果結果不足 k 個,直接保存到結果中。
3、如果結果中已經有 k 個了,如果 Si 比已有的結果里最小那個分數大,就替換它。
 
參考:《推薦系統三十六式》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM