推荐系统-利用用户标签
目前推荐算法主要分为三种:第一种方式是利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品,这就是前面提到的基于物品的算法。第二种方式是利用和用户兴趣相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品,这是前面提到的基于用户的算法。除了这两种方法,第三种重要的方式是通过一些特征( feature)联系用户和物品,给用户推荐那些具有用户喜欢的特征的物品。
UCG标签系统通常指的是用户生成内容(User Generated Content)标签系统。这是一种用于组织和管理用户生成的内容的分类系统,旨在帮助用户更容易地浏览和发现感兴趣的内容。UCG标签系统可以应用于各种在线平台,如社交媒体、论坛、博客等,以帮助用户过滤和搜索内容。
标签应用一般分为两种:一种是让作者或者专家给物品打标签;另一种是让普通用户给物品打标签,也就是UGC( User Generated Content,用户生成的内容)的标签应用。
举例:
Delicious 给网站打标签,CiteULike 给论文打标签,
标签系统中的推荐问题主要有以下两个。
- 如何利用用户打标签的行为为其推荐物品(基于标签的推荐)?
- 如何在用户给物品打标签时为其推荐适合该物品的标签(标签推荐)?
为了研究上面的两个问题,我们首先需要解答下面问题。
- 用户为什么要打标签?
首先是社会维度,有些用户标注是给内容上传者使用的(便于上传者组织自己的信息),而有些用户标注是给广大用户使用的(便于帮助其他用户找到信 息)。另一个维度是功能维度,有些标注用于更好地组织内容,方便用户将来的查找,而另一些标注用于传达某种信息,比如照片的拍摄时间和地点等。
基于标签的推荐系统
实验,预测用户会给什么物品打标签
评价指标
对于用户u,令R(u)为给用户u的长度为N的推荐列表,里面包含我们认为用户会打标签的物品。令T(u)是测试集中用户u实际上打过标签的物品集合。然后,我们利用准确率( precision)和召回率( recall)评测个性化推荐算法的精度。
覆盖率的计算公式如下
通过余弦计算出的相似度之后计算多样性。多样性计算公式如下
定义它的流行度item_pop(i)为给这个物品打过标签的用户数。而对推荐系统,我们定义它的平均热门度如下:
方法1:
统计每个用户最常用的标签。
对于每个标签,统计被打过这个标签次数最多的物品。
所以就可以对于一个用户先找到他最常用的标签然后找到具有这些标签的热门物品推荐给他
B(u)是用户u打过的标签集合, B(i)是物品i被打过的标签集合,${n_{u,b}}$ 是用户u打过标签b的次数,${n_{b,i}}$是物品i被打过标签b的次数 。那么用户对一个物品的兴趣程度就可以通过如下的式子表示。
在Python中,我们遵循如下约定:
用 records 存储标签数据的三元组,其中records[i] = [user, item, tag]
用 user_tags 存储${n_{u,b}}$ ,其中user_tags[u][b] = ${n_{u,b}}$
用 tag_items存储${n_{b,i}}$ ,其中tag_items[b][i] = ${n_{b,i}}$。
改进1:增加热门标签惩罚
方法1对于热门标签的推荐比重很大不能代表用户的思想。所以可以借鉴TF-IDF的形式${n_b^{(u)}}$ 记录了标签b被多少个不同的用户使用过 ,这样的话虽然用户打了很多的热门标签但是会除以一个热门的系数进而减少他的权重。可以看到各个指标都有提升
改进2增加热门物品惩罚
对于热门物品${n_{b,i}}$是物品i被打过标签b的次数,我们也应该给予一定的惩罚,这样用户就可以获得更多的这个标签的物品。可以看到覆盖率有大幅提升
改进3新物品和新用户推荐
对于用户兴趣和物品的联系是通过 ${B(u)∩B(i)}$中的标签建立的(用户u打过标签和物品被打的标签一致时)。 但是,对于新用户或者新物品,这个集合 ${B(u)∩B(i)}$中的标签数量会很少。 为了提高准确率,我们需要进行标签的拓展。标签拓展也就是要计算标签的相似度。相似度的计算公式余弦相似度
改进4标签清理
清理掉用户标记为负面的标签
一般来说有如下标签清理方法:
- 去除词频很高的停止词;
- 去除因词根不同造成的同义词,比如 recommender system和recommendation system
- 去除因分隔符造成的同义词,比如 collaborative_filtering和collaborative-filtering。
基于图的推荐算法
可以使用personrank的随机游走算法计算,每次选择重新开始还是继续游走,然后就可以因为边的长度边的数量以及边的两顶点之间经过的路径计算出一个相关性。然后按照相关性的排序进行推荐。
方法2
构建用户标签物品的三元组,然后这样每个物品被用户打上标签,标签和物品的之间连线的权重就加一,用户每打一次相同标签用户和标签之间连线的权重就加1那么就可以像最开始推荐的算法一样,给用户推荐最喜欢标签的热门物品。
给用户推荐标签
给用户推荐标签的原因:
- 方便用户输入标签
- 提高标签质量
推荐标签的算法:
- 给用户推荐网站最热门的标签
- 给用户推荐正要打标签物品的热门标签
- 给用户推荐 常用的标签
- 23方法进行线性的加权
结果最好的是方法2但是当加权为2 0.8时效果超过方法2因为仍然还会有用户一些需要的常用标签。