一、应用场景
在基于用户兴趣召回物品时,每个用户都有兴趣标签,有时候可能兴趣标签非常多,每一个标签都有计算出来的权重,从高到底进行排序。在进行推荐的时候,我们到底基于哪些兴趣标签进行推荐呢,只选取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 个元素的样本集合就是个蓄水池,是任意时刻的采样结果,可以随时取用。