前言
推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介。这些媒介在前面的博文中也提到过,一种是利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品;另一种是利用和用户兴趣相似的其他用户,给用户推荐那些和他们兴趣 爱好相似的其他用户喜欢的物品;还有一种就是通过一些特征(比方说电影的导演、演员、评分、类型等关键词)联系用户和物品,给用户推荐那些具有用户喜欢的特征的物品。下面就以特征中大家最为熟悉的一种——标签,作为分析,这些特征是怎么样去联系用户的兴趣和物品的。
本图根据《推荐系统实战》一文中的介绍所绘制,本图的著作权归原著作权人所有。
我们先来看看维基百科的定义,标签是一种无层次化结构、用来描述信息的关键词,它可以用来描述物品的语义。根据给物品打标签的人的不同,标签应用一般分为两种:一种是让作者或者专家给物品打标签;另一种是让普通用户给物品打标签,也就是UGC(User Generated Content,用户生成的内容)的标签应用。UGC的标签系统是一种表示用户兴趣和物品语义的重要方式。当一个用户对一个物品打上一个标签,这个标签一方面描述了用户的兴趣,另一方面则表示了物品的语义,从而将用户和物品联系了起来。
参考材料:维基百科对标签的定义
生成这样的推荐系统主要解决两个问题
- 如何利用用户打标签的行为为其推荐物品 ?
- 如何在用户给物品打标签时为其推荐适合该物品的标签 ?
在解决这两个问题之前首先弄明白以下三个问题
- 用户为什么要打标签 ?
- 便于上传者组织自己的信息;
- 便于帮助其他用户找到信息;
- 用于更好地组织内容,方便用户将来的查找;
- 用于传达某种信息(比如照片的拍摄时间和地点)。
- 用户怎么打标签 ?
- 参考前面博文https://blog.csdn.net/qq_38931949/article/details/84573095用户活跃度和物品流行度的长尾分布(趋于正比:一个标签被一个用户使用在一个物品上,它的流行度就加一)。
- 用户打什么样的标签(最常用) ?
- 表明物品是什么,比如CSDN博客的‘CSDN’;
- 表明物品的种类,比如CSDN博客的‘博客’;
- 表明谁拥有物品,比如CSDN博客的博主等信息;
- 类型,比如CSDN博客属于IT行业类型;
- 人物,比如CSDN博客不同的博主,大牛,菜鸟类似的。
第一个问题的解决——基于标签推荐
实验设置
举个例子:从CSDN博客中获取所有文章的文章ID、用户ID、时间、标签等作为庞大的数据集(以user、article为主键)进行实验分析测试。
本图根据《推荐系统实战》一文中的介绍所绘制,本图的著作权归原著作权人所有。
将上面的实验进行10次,每次选择不同的测试集,然后将每次实验的准确率和召回率的平均值作为最终的评测结果。
简单算法解决获得的用户标签行为数据
- 统计每个用户最常用的标签。
- 对于每个标签,统计被打过这个标签次数最多的物品。
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户。
算法改进
在算法设计时我们要注意,并不是所有标签都能反应用户的兴趣。所以我们要对标签进行清理,清理那些包含没有意义的停止词或者表示情绪的词,其次这些推荐解释里不能包含很多意义相同的词语。
官方的标签清理方法有如下三种:
- 去除词频很高的停止词;
- 去除因词根不同造成的同义词;
- 去除因分隔符造成的同义词。
第二个问题的解决——给用户推荐标签
和前面的实验一样,我们用同样的方法将数据集按照9∶1分成训练集和测试集,循环10次然后通过训练集学习用户标注的模型。需要注意的是,这里的数据集不再是以user、article为主键,而是以user、article、tag(标签)为主键。