2.3.3 群组个性化范式

群组个性化范式需要先将用户分组,分组的原则及方法非常重要。一般有如下两类分组方案。

1.基于用户画像圈人的推荐

先基于用户的人口统计学数据或者用户行为数据构建用户画像。用户画像一般用于做精准的运营,通过显示特征将一批人圈起来,对这批人做针对性运营。前面已做了介绍,这里不再说明。

2.采用聚类算法的推荐

聚类是非常直观的一种思路,将行为偏好相似的用户聚成一类,因为他们有相似的兴趣。常用的聚类策略有如下两类。

(1)将用户嵌入一个高维向量空间,基于用户的向量表示做聚类

将用户相关特征嵌入向量空间的方式有很多,下面介绍的都是非常主流的做法。

采用基于内容推荐的思路,可以构建用户的特征向量(TF-IDF、LDA、标签等,前面已经介绍过)。有了用户的特征向量就可以聚类,该类所有用户特征向量的加权平均就是该组用户的特征向量,再利用群组特征向量与标的物特征向量的内积来计算群组与标的物的相似度,从而为该群组做个性化推荐。

采用基于用户的协同过滤的思路,可以构建用户和标的物的行为矩阵,矩阵的元素就是用户对标的物的评分,该矩阵的行向量就是一个衡量用户特征的向量,基于该特征向量可以对用户聚类。原理为:先对该组用户所有的特征向量求均值,可以取k个最大的特征向量,其他特征向量忽略不计(设置为0),最终得到该组用户的特征向量。最后就可以基于用户协同过滤的思路来为该组用户计算推荐列表了。

利用矩阵分解可以得到每个用户的特征向量,我们可以将该组用户特征向量的均值作为该用户组的特征向量。再利用用户组的特征向量与标的物特征向量的内积来计算群组对该标的物的偏好,所有偏好计算出来后,通过降序排列就可以为该组用户推荐topN的标的物列表了。前面提到的电视猫的重排序算法就是基于该思路实现的。

还可以基于词嵌入的方式,将每个用户对标的物的所有操作(购买、观看等)看成一个文档集合,标的物的唯一标识符(sid)就是一个单词。采用类似Word2vec的方式可以获得标的物的向量表示(见本章参考文献[9]),用户的向量表示就是用户操作过的所有标的物的向量表示的均值(可以采用时间加权,对更早操作的标的物给予更低的权重),这样就获得了每个用户的特征向量。该组所有用户的平均特征向量就是该组的特征向量。这时可以采用类似上面矩阵分解的方式计算该组特征向量与标的物特征向量的内积,通过将所有计算出的内积降序排列取topN作为该组用户的个性化推荐。

除了上面几种计算群组推荐的方法外,还有一种基于计数统计的更直观的推荐方法。在对用户进行聚类后,我们可以对这一组用户操作过的标的物采用计数的方式统计每个标的物被操作的次数,将同一标的物的操作次数累加,最后按照标的物计数大小降序排列。将标的物列表topN推荐给该组,这个topN列表就是绝大多数人喜欢的标的物。

(2)构建用户关系图,基于图做聚类

我们可以构建用户关系图,顶点是用户,边是用户之间的关系。若采用图的分割技术,将图分割成若干个连通子图,这些子图即用户的聚类。还有一种方法是将图嵌入高维向量空间中,这样就可以采用k均值聚类算法来聚类。有了用户的聚类就可以采用上面基于计数统计的直观方法做推荐了,或者采用更复杂的方案做推荐。

那么怎么构建用户关系图呢?一般有两种方法。如果是社交类产品,可以基于社交关系来构建用户关系图,用户之间的边代表好友关系。如果是非社交类产品,如果两个用户对同一标的物都有操作行为,那么这两个用户之间可以构建一条边。

群组个性化推荐的优势是每组给出一样的推荐,可以减少推荐的计算和存储。但该方案最大的问题就是,对同一组推荐一样的标的物列表,很可能某个用户已看过推荐的标的物,但是其他用户没有看过,所以无法过滤掉该标的物,导致针对某些用户的推荐体验不够好。另外,同一组用户在兴趣特征上多少是有差别的,无法精细地照顾到每个用户的兴趣点。

群组个性化推荐的思路和优点也可以用于完全个性化范式的推荐。方法如下:将用户先分组,每一个分组看成一个等价类(熟悉数学的读者应该很容易理解,不熟悉的可以将其理解为一个兴趣小组),同一组的用户当成一个用户,这样就可以利用完全个性化范式中的算法思路来做推荐。Google公司在2007年发表的一篇论文(本章参考文献[17])就是采用该思路的协同过滤实现的。将用户分组可以减少计算量,支持大规模并行计算。