Content-based Recommendations(CB)和CF一样广泛应用于研究界和工业界,算是最早使用的推荐算法,根据用户过去喜欢的产品(item),为用户推荐和他过去喜欢产品相似的产品。
CB的过程:
- Item Representation:为每个item抽取出一些特征(content)来表示item
- Profile Learning:利用一个用户过去喜欢(不喜欢)的item的特征数据,来学习出此用户恶喜好特征(profile)
- Recommendation Generation:通过比较上一步得到的用户profile与候选item的特征,为此用户推荐一组相关性最大的item
![a27f374bf262c5b795187072c5451163.png](https://i-blog.csdnimg.cn/blog_migrate/8581c194b0c5e6a606de3b85506b9732.jpeg)
Item Representation
item往往有两种类型的属性:结构化(structured)的属性和非结构化(unstructured)的属性。结构化属性即意义较明确,取值在一定范围内,例如身高,学历等,非结构化属性即意义往往不太明确,比如自己写的座右铭,内容文章啥的。结构化数据可以拿来直接用,但是非结构化数据要先把它转化为结构化数据才能在模型中使用。这里以一篇文章举例,如何将非结构化数据结构化:
记要表示的文章集合为
其中
Profile Learning
接下来根据用户u的喜好产生一个模型,基于这个模型来判断此用户u是否会喜欢一个新的item,这就是一个有监督的分类问题
1 最近邻方法(k-Nearest Neighbor,简称KNN)
一个新的item,最近邻方法首先找用户u已经评判过的和此新的item最相似的k个(基于属性向量计算得到),然后依据这k个item喜好程度来判断对此新item的喜好程度。这和item-based KNN相似,只不过后者是基于用户对item的评分计算得到。一般相似性通过欧氏距离或者余弦相似度来判断。
2 Rocchio算法
用户u的profile
其中
3 决策树算法(DT)
当item属性较少而且是非结构化属性时(结构化数据属性多),决策树比较适合,这种情况下,产生简单直观,便于理解的结果,可以将DT的决策树过程展现给用户,为什么这些item会被推荐。如果属性较多且都来源于非结构化数据,决策树效果不好。
4 线性发类算法(LC)
线性分类器尝试在高维空间找一个平面,使得这个平面分开两类点,一类点尽可能在平面的某一边,另一类尽可能在平面另一边。LC尝试在
t表示第t次迭代,
5 朴素贝叶斯算法(Naive Bayes,NB)
NB经常用来做文本分类,假设给定一篇文章的类别,其中各个词出现概率相互独立,强行考虑独立性有违常理,但是结果却很好,现在的profile learning问题中包含两个类别:用户u喜欢的item以及不喜欢的item;给定一个item类别后,各个属性的取值概率相互独立,可以利用用户u的历史喜好数据训练NB,再用训练好的NB对给定的item分类。
Recommendation Generation
上一步Profile Learning中使用的是分类模型,那么只要把模型预测地用户最可能感兴趣的n个item作为推荐返回给用户即可。而如果Profile Learning中使用的直接学习用户属性的方法(Rocchio算法),我们只需要把与用户属性最相关的n个item作为推荐返回给用户即可。其中用户属性和item属性相关性可以使用cosine等相似度量获得。
兴趣迁移——衰减机制
衰减机制即让用户的关键词表中的每个关键词喜好程度都按照一定周期保持衰减,考虑到不同的词的TF-IDF值可能差异已经在不同数量级,考虑用指数衰减的形式来相对进行公平的衰减。即引入一个系数,,我们每隔一段时间,对所有用户的所有关键词喜好程度进行*的衰减,那么就完成了模拟用户兴趣迁移的过程。
CB的优缺点
CB的优点:
1. 用户之间的独立性(User Independence):既然每个用户的profile都是依据他本身对item的喜好获得的,自然就与他人的行为无关。而CF刚好相反,CF需要利用很多其他人的数据。CB的这种用户独立性带来的一个显著好处是别人不管对item如何作弊(比如利用多个账号把某个产品的排名刷上去)都不会影响到自己。
2. 好的可解释性(Transparency):如果需要向用户解释为什么推荐了这些产品给他,你只要告诉他这些产品有某某属性,这些属性跟你的品味很匹配等等。
3. 新的item可以立刻得到推荐(New Item Problem):只要一个新item加进item库,它就马上可以被推荐,被推荐的机会和老的item是一致的。而CF对于新item就很无奈,只有当此新item被某些用户喜欢过(或打过分),它才可能被推荐给其他用户。所以,如果一个纯CF的推荐系统,新加进来的item就永远不会被推荐:( 。
CB的缺点:
1. item的特征抽取一般很难(Limited Content Analysis):如果系统中的item是文档(如个性化阅读中),那么我们现在可以比较容易地使用信息检索里的方法来“比较精确地”抽取出item的特征。但很多情况下我们很难从item中抽取出准确刻画item的特征,比如电影推荐中item是电影,社会化网络推荐中item是人,这些item属性都不好抽。其实,几乎在所有实际情况中我们抽取的item特征都仅能代表item的一些方面,不可能代表item的所有方面。这样带来的一个问题就是可能从两个item抽取出来的特征完全相同,这种情况下CB就完全无法区分这两个item了。比如如果只能从电影里抽取出演员、导演,那么两部有相同演员和导演的电影对于CB来说就完全不可区分了。
2. 无法挖掘出用户的潜在兴趣(Over-specialization):既然CB的推荐只依赖于用户过去对某些item的喜好,它产生的推荐也都会和用户过去喜欢的item相似。如果一个人以前只看与推荐有关的文章,那CB只会给他推荐更多与推荐相关的文章,它不会知道用户可能还喜欢数码。
3. 无法为新用户产生推荐(New User Problem):新用户没有喜好历史,自然无法获得他的profile,所以也就无法为他产生推荐了。当然,这个问题CF也有。
转载博客:
https://blog.csdn.net/nicajonh/article/details/79657317blog.csdn.net