清澈如初|个性化推荐算法(推荐系统)概要( 七 )


还可以基于词嵌入的方式 , 将每个用户对标的物的所有操作(购买、观看等)看成一个文档集合 , 标的物的sid就是一个单词 , 采用类似word2vec的方式可以获得标的物的向量表示(见参考文献9) , 那么用户的向量表示就是用户操作过的所有标的物的向量表示的均值(可以采用时间加权 , 对最早操作的标的物给予最低的权重) , 这样就获得了每个用户的特征向量了 。 该组所有用户的平均特征向量就是该组的特征向量 。 这时可以采用类似上面矩阵分解的方式计算该组特征向量与标的物特征向量的内积为该组用户做个性化推荐 。
除了上面几种计算群组推荐的方法外 , 还有一种基于计数统计的更直观的推荐方法 。 当我们对用户进行聚类后 , 我们可以对这一组用户操作过的标的物采用计数的方式统计每个标的物被操作的次数 , 将同一标的物的操作次数累加 , 最后按照标的物计数大小按照降序排列 。将标的物列表topn推荐给该组 , 这个topN列表就是绝大多数人喜欢的标的物 。

  • b 基于图的聚类
我们可以构建用户关系图 , 顶点是用户 , 边是用户之间的关系 , 我们可以采用图的分割技术 , 将图分割成若干个联通子图 , 这些子图即是用户的聚类 。 还有一种方法是将图嵌入到高维向量空间中 , 这样就可以采用kmeans聚类方法做聚类了 。 有了用户的聚类就可以采用上面基于计数统计的直观方法做推荐了 , 或者采用更复杂的方案做推荐 。
那怎么构建用户关系图呢?一般有两种方法 。 如果是社交类产品 , 可以基于社交关系来构建用户关系图 , 用户之间的边 , 代表好友关系 。 如果是非社交类产品 , 如果两个用户对同一标的物都有操作行为 , 那么这两个用户之间可以构建一条边 。
群组个性化推荐的优势是每组给出一样的推荐 , 可以减少推荐的计算和存储 。 但该方案有一个最大的问题 , 同一组推荐一样的标的物列表 , 很可能对某个用户来说 , 推荐的标的物他已经看过 , 但是其他用户没有看过 , 所以无法过滤掉该标的物 , 针对某些用户推荐体验不够好 。 另外 , 同一组用户在兴趣特征上多少是有差别的 , 无法精细地照顾到每个用户的兴趣点 。
群组个性化推荐的思路和优点也可以用于完全个性化范式的推荐 。 可以将用户先分组 , 每一个分组看成一个等价类(熟悉数学的同学应该很容易理解 , 不熟悉的同学可以理解为一个兴趣小组) , 同一组的用户当成一个用户 , 这样就可以利用完全个性化范式中的算法思路来做推荐 。 Google在07年发表的一篇论文(参考文献17)就是采用该思路的协同过滤实现 。 将用户分组可以减少计算量 , 支持大规模并行计算 。
4. 标的物关联标的物范式
标的物关联标的物就是为每个标的物推荐一组标的物 。 该推荐范式的核心是怎么从一个标的物关联到一组标的物 。 这种关联关系可以是相似的 , 也可以是基于其他维度的关联 。 常用的推荐策略是相似推荐 。 下面给出4种常用的生成关联推荐的策略 。
(1)基于内容的推荐
这类方法一般可以利用已知的数据和信息利用向量来描述标的物 , 如果每个标的物都被向量化了 , 那么我们就可以利用向量之间的相似度来计算标的物之间的相似度 。
如果标的物是新闻等文本信息 , 可以采用TF-IDF将标的物映射为词向量 , 我们可以通过词向量的相似度来计算标的物之间的相似度 。
即使不是文本 , 只要标的物具备metadata等文本信息 , 也可以采用该方法 。 很多互联网产品是具备用户评论功能的 , 这些评论文本就可以看成是标的物的描述信息 。
LDA模型也非常适合文本类的推荐 , 通过LDA模型将文章(文档)表示为主题及相关词的概率 , 我们可以通过如下方式计算两个文档的相似度:先计算两个文档某个主题的相似度 , 将所有主题的相似度加权平均就可以得到两篇文档的相似度 , 而主题的相似度可以采用主题的词向量的余弦内积来表示 。