推荐系统实践-利用用户标签数据(4)

4.1 UGC标签系统的代表应用

标签应用一般分为两种,一种是作者或者专家来给物品打标签,另外一种是让普通用户打标签即UGC(User Generated Content),当用户给物品打标签时,一方面描述了用户的兴趣,一方面表示了物品的语义,将用户和物品联系起来。

4.2 基于标签的推荐系统

用户的打标签行为可以用三元组(u,i,b)来表示,表示用户u给物品i打上了b标签。每一次打标签的行为都用一个三元组表示。

4.2.1 实验设置

学习训练集中的用户标签数据来预测测试集中用户会给什么物品标签,对于用户u,令R(u)为给用户u的长度为N的推荐列表,即我们认为u会打标签的物品,T(u)为实际打标签物品的集合,则precision和recall为:

precision=\frac{|R(u)|\cap |T(u)|}{|R(u)|}

recall=\frac{|R(u)\cap T(u)|}{|T(u)|}

覆盖率计算公式为:

Coverage=\frac{|\bigcup_{u\in U}R(u)|}{|I|}

由于多样性和相似度的定义有关,在此我们选择用物品标签向量的余弦相似度度量物品之间的相似度。得到物品之间相似度以后,可通过如下公式计算一个推荐列表的多样性:

Diversity=1-\frac{\sum_{i\in R(u)}\sum_{j\in R(u),j\neq i}Sim(item\_tags[i],item\_tags[j])}{\begin{pmatrix} |R(u)| \\ 2 \end{pmatrix}}

 新颖性在此简单的用推荐结果的平均热门程度表示:

AveragePopularity=\frac{\sum_{u}\sum_{i\in R(u)}\log{(1+item\_pop(i))}}{\sum_{u}\sum_{i\in R(u)}1}

其中item_pop(i)为给这个物品打过标签的用户数。

4.2.2 一个最简单的算法

算法描述如下:

1.统计每个用户最常用的标签

2.对于每个标签,统计被打过这个标签次数最多的物品

3.对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门的物品推荐给他

用户u对物品i的兴趣公式如下(SimpleTagBased):

p(u,i)=\sum_{b}n_{u,b}n_{b,i}

其中B(u)是用户u打过的标签集合,B(i)是物品i被打过的标签集合,n_{u,b}是用户u打过标签b的次数,n_{b,i}是物品i被打过b标签的次数。

4.2.3 算法的改进

1.TF-IDF 

前面这个公式倾向于给热门标签对应的热门物品很大的权重,因此会造成推荐热门的物品给用户,从而降低推荐结果的新颖性,借鉴TF-IDF的思想,对这一公式进行改进(TagBasedTFIDF): 

p(u,i)=\sum_{b}\frac{n_{u,b}}{\log{(1+n_{b}^{(u)})}}n_{b,j}
其中 n_{b}^{(u)}表示标签b被多少个不同的用户使用过。还可以对热门物品也进行惩罚,再进行改进(TagbasedTFIDF++):
p(u,i)=\sum_{b}\frac{n_{u,b}}{\log{(1+n_{b}^{(u)})}}\frac{n_{b,j}}{\log{(1+n_{i}^{(u)})}}

2.数据稀疏性

用户兴趣和物品之间联系通过B(u)∩B(i)中包含的标签建立,但是如果是新用户或者新物品B(u)∩B(i)集合中标签数据很少,我们需要对标签集合进行拓展,将相似标签也加入进去,例如推荐系统和协同过滤这两个标签。

标签拓展的本质是对每个标签找到和它相似的标签,也就是计算标签之间的相似度。可以通过余弦相似度计算标签的相似度:

sim(b,b^{'})=\frac{\sum_{i\in N(b)\cap N(b^{'})}n_{b,i}n_{b^{'},i}}{\sqrt{\sum_{i\in N(b)}n_{b,i}^2\sum_{i\in N(b^{'})}n_{b^{'},i}^2}}

其中N(b)为有标签b的物品的集合,n_{b,i}为给物品i打上标签b的用户数。

3. 标签清理

有些标签并不能反映用户的兴趣,例如用户给一个视频打“不好笑”的标签,并不能说用户对“不好笑”感兴趣,但是若用户打过“成龙”标签,则大概率表示用户对“成龙”感兴趣,从而给用户推荐成龙的其他视频,而且还存在同义词的问题,因此需要对标签进行清理,标签清理一般有如下方法:

1.去除词频很高的停止词

2.去除因词根不同造成的同义词,比如:recommender system和recommendation system

3.去除因分隔符造成的同义词,比如:collaborative_filtering和collaborative-filtering

还可以让用户对标签进行评价,标签是否合理

4.2.4 基于图的推荐算法

首先需要建图,一个用户u给物品i打了标签b记为(u,i,b),那么就在图中添加3条边,即在顶点v(u)和v(i)之间,v(u)和v(b),v(i)和v(b)之间分别添加一条边。建图完毕后可以使用personal rank算法进行推荐。

4.3 给用户推荐标签

4.3.1 为什么要给用户推荐标签

1.方便用户输入标签

2.提高标签质量

4.3.2 如何给用户推荐标签

当用户u给物品i打标签时,有许多种方法给用户推荐标签:

1.给用户u推荐整个系统里最热门的标签(PopularTags)

2.给用户u推荐物品i上最热门的标签(ItemPopularTags)

3.给用户u推荐他自己最常用的标签(UserPopularTags)

4.将ItemPopularTags和UserPopularTags结合(HybridPopularTags),通过一个系数将结果线性加权,然后排序进行推荐,注意进行归一化处理

4.3.3 实验设置

将数据集按照9:1分为训练集和测试集,对于测试集中每一个用户物品对(u,i),推荐N个标签供用户u参考。R(u,i)为我们给用户u推荐的应该在物品i上打的标签集合,T(u,i)为用户u实际给物品i打的标签集合。同样使用准确率和召回率评测标签推荐的精度:

Precision=\frac{\sum_{(u,i)\in Test}|R(u,i)\cap T(u,i)|}{\sum_{(u,i)\in Test}|R(u,i)|}

Recall=\frac{\sum_{(u,i)\in Test}|R(u,i)\cap T(u,i)|}{\sum_{(u,i)\in Test}|T(u,i)|}

实验结果显示HybridPopularTags算法具有最好的效果,但是同样存在冷启动问题,新用户和不热门的物品有的标签很少,很难进行推荐,有两个解决办法:

1.直接从物品的内容数据中抽取关键词作为标签

2.针对有标签但不太多的情况,对标签进行扩展,提供相似的标签

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值