5.4.3 基于用户行为为用户生成推荐候选集
与单个视频生成候选集类似,对于单个用户也是很容易采用上面的方式生成推荐候选集的。我们可以将用户播放过的视频或者明确表示过喜欢的视频作为初始种子视频集。
对于初始种子集S,可以采用如下方式来生成候选集。
基于上面视频的有向图解释,我们可以沿着集合S的有向边向外拓展,对于任意的种子视频vi(vi∈S),考虑它的相关视频集Ri。我们将所有通过这种方式拓展出的视频集记为C1,那么有如下公式:
一般情况下,我们计算出C1就足够获得比较多的、效果还可以的、有一定多样性的推荐候选集了。但实际上,通过这种方式生成的推荐候选集种类比较狭窄,跟用户的兴趣太相似。这种方式虽然生成了用户可能感兴趣的视频,但是可能用户没有太多惊喜,会让用户沉浸在比较小的视频范围内,就像进入了一个漩涡中,无法发现更大、更精彩的世界。
为了拓展用户的推荐候选集的空间,解决上述越推越窄的问题,我们可以沿着种子视频集S所在的视频有向图进行n次向外拓展(用图论的术语,就是n次传递闭包),我们记Cn为借助种子集S中的某个种子视频通过不超过n次路由可达的所有视频组成的集合,那么有如下公式:
注意,C0=S,上面的公式也与前面提到的C1的公式是兼容的。最终生成的推荐候选集就是
一般N很小(拓展很少的几步)时就可以获得非常多具备多样性的推荐结果,即使是种子集很小的用户也是如此。拓展上述路径,我们可以为每个候选的推荐视频关联一个种子视频(基于从某个种子视频到候选视频的路径,将候选视频关联到了种子视频),该种子视频既可用于后面的推荐结果排序,也可以作为推荐解释(例如如果候选视频vj是通过种子视频vi获得的,我们可以用“因为你喜欢/看过vi”来作为推荐解释语,vi与vj是通过多步相似链接在一起的,它们多少是有一些相似性的,用户从这两个视频中可以直接感知到这种相似,所以该推荐理由是有一定说服力的)。