一、應用場景
在基於用戶興趣召回物品時,每個用戶都有興趣標簽,有時候可能興趣標簽非常多,每一個標簽都有計算出來的權重,從高到底進行排序。在進行推薦的時候,我們到底基於哪些興趣標簽進行推薦呢,只選取topN的嗎,還是全部?如果只選取topN的,那每次推薦結果都比較相似,而且權重低的興趣標簽似乎得不到推薦;如果按照全部標簽進行推薦,可能計算量會非常大。
這個時候可以加權采樣方式篩選用戶的興趣標簽,每次召回的不是全部興趣標簽,而是按照權重采樣一部分標簽進行召回,這樣做的好處是顯然的:
1)減少召回的時間復雜度
2)可以保留更多的標簽
3)每次召回計算都有所變化,滿足了推薦多樣性
4)雖有變化,但依然受標簽相對權重大小的約束
在熱門排行榜的展示中,也可以采用加權采樣方法,比如熱門展示位只有10個,那每次可以加權采樣10個展示,刷新還有細微變化。
所以,加權采樣應該屬於推薦系統中的技巧性方法,能夠細微的改善用戶的推薦結果,還是非常重要的。
二、有限數據集的加權采樣
現在假設你有用戶標簽若干,每一個標簽都有個權重 w,權重高低反映了用戶對這個標簽的感興趣程度高低。你希望每次輸出一部分標簽用於召回推薦候選集,每次輸出時都不一樣,但是又能反映用戶標簽的權重,輸出的概率和權重成正比,公式如下:
- wi 是每個樣本的權重,比如用戶標簽權重;
- R 是遍歷每個樣本時產生的 0 到 1 之間的隨機數;
- Si 就是每個樣本的采樣分數
三、無限數據集-蓄水池抽樣
兩種采樣都是針對有限數據集的,也就是采樣之前都要遍歷一遍所有樣本。那么如果面對的數據集無限大,或者不知道多大時,該怎么做加權采樣呢?這就要講到另一個采樣算法了,名字叫蓄水池采樣(也叫蓄水池抽樣)。
蓄水池采樣:
2.從第 k+1 個開始,每個都以 k/n 的概率去替換那留着的 k 個樣本中的一個。
這個過程,隨時可以取用那 k 個集合作為輸出結果,任意時刻,當總樣本遍歷了 n 個時,他們的概率都是 k/n 。這就是蓄水池采樣,蓄水池采樣,顧名思義,k 個元素的樣本集合就是個蓄水池,是任意時刻的采樣結果,可以隨時取用。