推荐系统实践-利用标签数据进行推荐

前言

  • 本文为《推荐系统实践—项亮》第四章的学习笔记

1. 思维导图

  • 《推荐系统实践—项亮》第四章的学习笔记

2. UGC标签

  • 标签应用一般分为两种:一种是让作者或者专家给物品打标签;另一种是让普通用户给物品打标签,也就是UGC(User Generated Content,用 户生成的内容)的标签应用。我们本篇主要讨论UGC的标签应用。
  • 标签系统中的推荐问题主要有以下两个:
    • 如何利用用户打标签的行为为其推荐物品(基于标签的推荐)?
    • 如何在用户给物品打标签时为其推荐适合该物品的标签(标签推荐)?
  • 本节,我们主要介绍基于标签的推荐问题

3. 一个简单的推荐算法

  • 拿到了用户标签行为数据,相信大家都可以想到一个最简单的个性化推荐算法。这个算法的描述如下所示。
    • 统计每个用户最常用的标签
    • 对于每个标签,统计被打过这个标签次数最多的物品
    • 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户
  • 对于上面的算法,用户u对物品i的兴趣公式如下:
  • 这里,B(u)是用户u打过的标签集合,B(i)是物品i被打过的标签集合,nu,b是用户u打过标签b 的次数,nb,i是物品i被打过标签b的次数

4. 基于TFIDF的算法改进

  • 上述简单的算法公式倾向于给热门标签对应的热门物品很大的权重,因此会造成推荐热门的物品给用户,从而降低推荐结果的新颖性
  • 另外,这个公式利用用户的标签向量对用户兴趣建模,其中每个标签都是用户使用过的标签,而标签的权重是用户使用该标签的次数。这种建模方法的缺点是给热门标签过大的权重,从而不能反应用户个性化的兴趣。这里我们可以借鉴TF-IDF的思想, 对这一公式进行改进:
  • 这里, $n_b^u$记录了标签b被多少个不同的用户使用过。这个算法记为TagBasedTFIDF

  • 同理,我们也可以借鉴TF-IDF的思想对热门物品进行惩罚,从而得到如下公式:

  • 其中, $n_i^u$记录了物品i被多少个不同的用户打过标签。这个算法记为TagBasedTFIDF++。

5. 标签扩展

  • 在前面的算法中,用户兴趣和物品的联系是通过 B(u) ∩B(i) 中的标签建立的。但是,对于新用户或者新物品,这个集合( B(u)∩B(i) )中的标签数量会很少。为了提高推荐的准确率,我们可能要对标签集合做扩展,比如若用户曾经用过“推荐系统”这个标签,我们可以将这个标签的相似标签也加入到用户标签集合中,比如“个性化”、“协同过滤”等标签。

  • 标签扩展的本质是对每个标签找到和它相似的标签,也就是计算标签之间的相似度。最简单的相似度可以是同义词。如果有一个同义词词典,就可以根据这个词典进行标签扩展。如果没有这个词典,我们可以从数据中统计出标签的相似度。

  • 如果认为同一个物品上的不同标签具有某种相似度,那么当两个标签同时出现在很多物品的标签集合中时,我们就可以认为这两个标签具有较大的相似度。对于标签b,令N(b)为有标签b的物品的集合,$n_{b,i}$为物品i打g过标签b的次数,我们可以通过如下余弦相似度公式计算标签 b和标签b’的相似度:

6. 标签清理

  • 标签需要清理主要有两个原因:
    • 不是所有标签都能反应用户的兴趣
    • 标签清理的另一个重要意义在于将标签作为推荐解释
  • 标签清理的主要方法有:
    • 去除词频很高的停止词
    • 去除因词根不同造成的同义词
    • 去除因分隔符造成的同义词

7. 基于图的推荐算法

  • 首先,我们需要将用户打标签的行为表示到一张图上。我们知道,图是由顶点、边和边上的权重组成的。而在用户标签数据集上,有3种不同的元素,即用户、物品和标签。因此,我们需要定义3种不同的顶点,即用户顶点、物品顶点和标签顶点。然后,如果我们得到一个表示用户u给物品i打了标签b的用户标签行为(u,i,b),那么最自然的想法就是在图中增加3条边,首先需要在用户u对应的顶点v(u)和物品i对应的顶点v(i)之间增加一条边(如果这两个顶点已经有边相连,那么就应该将边的权重加1),同理,在v(u)和v(b)之间需要增加一条边,v(i)和v(b)之间也需要边相连接。
  • 下图是一个简单的用户-物品-标签图的例子。该图包含3个用户(A、B、C)、3个物品(a、 b、c)和3个标签(1、2、3)。在定义出用户-物品-标签图后,我们可以用基于随机游走的PersonalRank算法计算所有物品节点相对于当前用户节点在图上的相关性,然后按照相关性从大到小的排序,给用户推荐排名最高的N个物品

-------------The End-------------
谢谢大锅请我喝杯阔乐~