许多推荐系统生成的结果集包含大量高度相似的项。使这些结果多样化通常是通过启发式实现的,这些启发式算法是用户对多样化渴望的贫乏模型。然而,将更复杂的多样性统计模型集成到大规模成熟系统中是一项挑战。如果模型对多样性的定义与用户对多样性的感知不匹配,该模型很容易降低用户对推荐的感知。在这项工作中,我们提出了一个基于行列式点过程(DPP)的多样性统计模型。我们从用户偏好的例子中训练这个模型,使用一个简单的过程,可以相对容易地集成到大型和复杂的生产系统中。我们使用一种近似推理算法在规模上为该模型服务,YouTube主页实时流量的实证结果表明,该模型与重新排序算法相结合,在短期和长期内显著提高了用户满意度。

背景

file 推荐包含三个阶段:生成候选集,排序,特定策略(比如让某个item出现在特定位置的策略)。

  • 常规的推荐系统:根据用户特征和视频特征为每个候选集的item计算一个分数q,然后按照分数的降序对item进行排序,然后将排序后的list发送给用户。
  • 作者认为,内容相似的item往往计算得到的分数也是相近的,这样的话就容易造成一堆内容相近的item在推荐列表中会扎堆在一起。
  • 显然,相似内容的视频扎堆在一起不是一件好事,例如,用户是一个篮球爱好者,有一些篮球视频的得分是相近的,如果在推荐列表中将这些篮球视频都排在一起的话,用户可能就会放弃一些。如果能将这些用户喜欢的篮球视频分散开的话,用户可能都会进行观看。

核心思想:让相似的视频尽量分散开

介绍DPP

先思考这样一个问题,在一个给定的(1,100)*(1,100)的坐标中上随机采样100个点(只能在整数坐标位置采样),怎么才能使这些点尽量均匀分散开?

  • 首先有一种采样方法,independent,进行100次的采样,每次都从整个采样空间中随机采样一个点。 这不好,因为按照这个方法采样出来的结果可能是这样的,会出现扎堆的情况 file
  • 我们有一种直观的感觉,就是如果采样到一个点比如(50,50),那就尽量不去采到紧挨着它的点(比如(49,50)等)。

那我们能不能这样做呢?从10000个位置里面采样100个有$$C_{10000}^{100}$$可能的组合,能不能给每一种组合分配一个概率。如果某种组合里面的点越分散,就让它概率比较高,组合里面的点越集中,就给他分配一个较低的概率。然后我们依这样的概率分布去选择某一种组合,作为最后的结果。

如果有这样一种工具,能够计算每一种组合的概率,那我们就能完成这件事,而且这样的效果还挺好。 这就是行列式点过程的核心思想。具体可以参考 [wpdm_package id='159'] 。

下面我们回到本文的场景中,结合场景中的例子去阐述这样的一种工具。

上面举得采样的例子是如何从10000个点中采样一百个,我们本文场景中是要对N个item进行重新的排序,意思就是N个item都要被采样到,这样就只有一种可能的组合,即使我们用这个神奇的工具给这个组合计算一个概率也是没有意义的。

作者是这样解决的:作者认为在一个list中,如果两个相似的item距离(这里的距离指的是两个item在list中的index的距离)足够远了,那么继续增加这两个item的index之间的距离,我们系统的收益也不会继续增加了。比如,我们的list中有100个视频,我们认为只要把两个item在list中的index距离增加到10之后,继续增加index距离(比如11,15,90...),系统收益也不会变大了。因此,我们可以设置这样一个阈值k,第一次,从N个item的list中采样k个视频,填充到新列表的前k个位置;第二次,从剩余的N-k个items中再采样k个视频,放在新列表的k+1到2k的位置,以此类推,直到所有的item都被采样过了,那么新的list就是我们排完序的list了。

那么现在核心的问题就是给定一个包含N个items的集合,怎么计算一个包含k个items的组合的概率呢?

首先,要解决diversity的问题,因为我们要求采样的k个视频之间的相似度尽可能小,所以不可避免的要引入视频相似度的概念(或者差异性、距离,距离和相似度正好负相关)。

我们把问题简化一下,假设k=2,意思就是采样两个视频(用i和j表示),我们应该怎样设计这个组合的概率呢?

假设我们没什么专业知识,也不懂什么行列式点过程,只会设计启发式的计算方法。那么我们设计出来的计算公式大概是这样的: $$p_{(i,j)}=f(q_i,q_j)-S(i,j)$$ 其中f泛指一个函数,S指的是相似度函数。反正这个组合的概率与这两个item的分数呈正相关,与他们之间的相似度呈负相关。

如果认同了上面这一点,那么我可以说,这个计算公式也是符合这个要求的$$p_{(i,j)}=q_i\times q_j-S(i,j)\times S(j,i)$$。这两个相似度可以认为是相等的,无伤大雅。

我继续把这个公式改写成一个二阶行列式(实在是不好编辑,这里就不写了):主对角线元素分别是$$q_i 和 q_j$$,另外两个位置分别是两个相似度的值。

推广一下,一个包含k个item的组合的概率,就是一个k阶行列式的值,主对角线元素是item的得分q,其他元素就是item与item之间的相似度。(这里我们不讲数学证明,这样推广是没有问题的)

这个工具太好了,给你N个item的集合,你只需要计算这些item的得分和两两之间的相似度,就可以构建一个N*N的行列式。当你想计算某一种包含k个item的组合的概率时,你需要从这个行列式中取出这个组合中的item所对应那些行列,组成一个k*k的子式,然后这个子式对应的值就是这个组合的概率。

为什么设计一种计算概率的启发式模型呢???

k=2时,这个模型可以很容易设计出来,那当k=100时呢?这个模型就变得很复杂,行列式点过程就很巧妙的解决了这个问题。

[wpdm_package id='166']

[wpdm_package id='167']