【八斗学院】10.2基于内容的推荐算法(CB)是如何实现的?_cb法
【八斗学院】10.2基于内容的推荐算法(CB)是如何实现的?由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“cb法”。
基于内容的推荐算法(CB)是如何实现的?
来源:八斗学院
基于内容的推荐(Content Based)应该算最早被使用的推荐方法,它根据用户过去喜欢的产品(本文统称为 item),为用户推荐和他过去喜欢的产品相似的产品。例如,一个推荐饭店的系统可以依据某个用户之前喜欢很多的烤肉店而为他推荐烤肉店。CB最早主要是应用在信息检索系统当中,所以很多信息检索及信息过滤里的方法都能用于CB中。
CB的过程一般包括以下三步:
1)Item Representation:为每个item抽取出一些特征(也就是item的content了)来表示此item;
2)Profile Learning:利用一个用户过去喜欢(及不喜欢)的item的特征数据,来学习出此用户的喜好特征(profile);
3)Recommendation Generation:通过比较上一步得到的用户profile与候选item的特征,为此用户推荐一组相关性最大的item。
举个例子说明前面的三个步骤。对于个性化阅读来说,一个item就是一篇文章。根据上面的第一步,我们首先要从文章内容中抽取出代表它们的属性。常用的方法就是利用出现在一篇文章中词来代表这篇文章,而每个词对应的权重往往使用信息检索中的tf-idf来计算。比如对于本文来说,词“CB”、“推荐”和“喜好”的权重会比较大,而“烤肉”这个词的权重会比较低。利用这种方法,一篇抽象的文章就可以使用具体的一个向量来表示了。第学Hadoop大数据,就到八斗学院
www.daodoc.com
二步就是根据用户过去喜欢什么文章来产生刻画此用户喜好的 profile了,最简单的方法可以把用户所有喜欢的文章对应的向量的平均值作为此用户的profile。比如某个用户经常关注与推荐系统有关的文章,那么他的profile中“CB”、“CF”和“推荐”对应的权重值就会较高。在获得了一个用户的profile后,CB就可以利用所有item与此用户profile的相关度对他进行推荐文章了。一个常用的相关度计算方法是cosine。最终把候选item里与此用户最相关(cosine值最大)的N个item作为推荐返回给此用户。
接下来我们详细介绍下上面的三个步骤。1)Item Representation:
真实应用中的item往往都会有一些可以描述它的属性。这些属性通常可以分为两种:结构化的(structured)属性与非结构化的(unstructured)属性。所谓结构化的属性就是这个属性的意义比较明确,其取值限定在某个范围;而非结构化的属性往往其意义不太明确,取值也没什么限制,不好直接使用。比如在交友网站上,item就是人,一个item会有结构化属性如身高、学历、籍贯等,也会有非结构化属性(如item自己写的交友宣言,博客内容等等)。对于结构化数据,我们自然可以拿来就用;但对于非结构化数据(如文章),我们往往要先把它转化为结构化数据后才能在模型里加以使用。真实场景中碰到最多的非结构化数据可能就是文章了(如个性化阅读中)。下面我们就详细介绍下如何把非结构化的一篇文章结构化。
如何代表一篇文章在信息检索中已经被研究了很多年了,下面介绍的表示技术其来源也是信息检索,其名称为向量空间模型(Vector Space Model,简称VSM)。记我们要表示的所有文章集合为,而所有文章中出现的词(对
。于中文文章,首先得对所有文章进行分词)的集合(也称为词典)为也就是说,我们有N篇要处理的文章,而这些文章里包含了n个不同的词。我们最终要使用一个向量来表示一篇文章,比如第j篇文章被表示为表示第1个词在文章j中的权重,值越大表示越重要;,其中
中其他向量的解释类似。所以,为了表示第j篇文章,现在关键的就是如何计算
各分量的值了。例如,我们可以
学Hadoop大数据,就到八斗学院
www.daodoc.com
选取为1,如果词出现在第 j 篇文章中;选取为0,如果未出现在第j篇文章中。我们也可以选取为词出现在第 j 篇文章中的次数(frequency)。但是用的最多的计算方法还是信息检索中常用的词频-逆文档频率(term frequency–inverse document frequency,简称tf-idf)。第j篇文章中与词典里第k个词对应的tf-idf为:
其中章数量。
最终第k个词在文章j中的权重由下面的公式获得: 是第k个词在文章j中出现的次数,而
是所有文章中包括第k个词的文
做归一化的好处是不同文章之间的表示向量被归一到一个量级上,便于下面步骤的操作。
2)Profile Learning 假设用户u已经对一些item给出了他的喜好判断,喜欢其中的一部分item,不喜欢其中的另一部分。那么,这一步要做的就是通过用户u过去的这些喜好判断,为他产生一个模型。有了这个模型,我们就可以根据此模型来判断用户u是否会喜欢一个新的item。所以,我们要解决的是一个典型的有监督分类问题,理论上机器学习里的分类算法都可以照搬进这里。
下面我们简单介绍下CB里常用的学习算法——KNN:
对于一个新的item,最近邻方法首先找用户u已经评判过并与此新item最相似的k个item,然后依据用户u对这k个item的喜好程度来判断其对此新item的喜好程度。这种做法和CF中的item-based kNN很相似,差别在于这里的item相似度是根据item的属性向量计算得到,而CF中是根据所有用户对item的评分计算得到。
对于这个方法,比较关键的可能就是如何通过item的属性向量计算item之间的两两相似度。[2]中建议对于结构化数据,相似度计算使用欧几里得距离;而如果使用向量空间模型(VSM)来表示item的话,则相似度计算可以使用cosine。
学Hadoop大数据,就到八斗学院
www.daodoc.com
3)Recommendation Generation 通过上一步的学习,会得到一个推荐列表,我们直接把这个列表中与用户属性最相关的n个item作为推荐返回给用户即可。
学Hadoop大数据,就到八斗学院
www.daodoc.com