Rocchio算法在推荐系统中的应用

目录

一、Rocchio 算法简介
二、用户画像
三、Rocchio算法进行二次推荐
四、结束语

一、Rocchio 算法简介
       该算法(Rocchio,1971)是20 世纪70 年代左右在Salton 的SMART 系统中引入并广泛流传的一种相关反馈算法。
(1)Rocchio算法应用于文本分类
       Rocchio算法应该算是人们思考文本分类问题时最先能想到,也最符合直觉的解决方法。基本的思路是把一个类别里的样本文档各项取个平均值(例如把所有 “体育”类文档中词汇“篮球”出现的次数取个平均值,再把“裁判”取个平均值,依次做下去),可以得到一个新的向量,形象的称之为“质心”,质心就成了这 个类别最具代表性的向量表示。再有新文档需要判断的时候,比较新文档和质心有多么相像(八股点说,判断他们之间的距离)就可以确定新文档属不属于这个类。 稍微改进一点的Rocchio算法不仅考虑属于这个类别的文档(称为正样本),也考虑不属于这个类别的文档数据(称为负样本),计算出来的质心尽量靠近正样本同时尽量远离负样本。

Rocchio算法做了两个很致命的假设:
    一:它认为一个类别的文档仅仅聚集在一个质心的周围,实际情况往往不是如此(这样的数据称为线性不可分的);
    二:它假设训练数据是绝对正确的,因为它没有任何定量衡量样本是否含有噪声的机制,因而也就对错误数据毫无抵抗力。
  不过Rocchio产生的分类器很直观,很容易被人类理解,算法也简单,还是有一定的利用价值的,常常被用来做科研中比较不同算法优劣的基线系统(Base Line)。
 
(2)Rocchio算法应用于查询扩展
       Rocchio算法是IR中通过查询的初始匹配文档对原始查询进行修改以优化查询的方法。Rocchio 算法是相关反馈实现中的一个经典算法,它提供了一种将相关反馈信息融到向量空间模型的方法。基本理论:假定我们要找一个最优查询向量q ,它与相关文档之间的相似度最大且同时又和不相关文档之间的相似度最小。若Cr表示相关文档集,Cnr表示不相关文档集,那么我们希望找到的最优的q 是:


       sim 函数用于计算相似度。采用余弦相似度计算时,能够将相关文档与不相关文档区分开的最优查询向量为:


       这就是说,最优的查询向量等于相关文档的质心向量和不相关文档的质心向量的差。然而,这个发现并没有什么意义,因为检索本来的目的就是要找相关文档,而所有的相关文档集事先却是未知的。


       Rocchio 算法。该算法(Rocchio,1971)是20 世纪70 年代左右在Salton 的SMART 系统中引入并广泛流传的一种相关反馈算法。在一个真实的信息检索场景中,假定我们有一个用户查询,并知道部分相关文档和不相关文档的信息,则可以通过如下公式得到修改后的查询向量q:


       其中, q 是原始的查询向量,Dr 和Dnr 是已知的相关和不相关文档集合。α、β 及γ 是上述三者的权重。这些权重能够控制判定结果和原始查询向量之间的平衡:如果存在大量已判断的文档,那么会给β 及γ 赋予较高的权重。修改后的新查询从q0 开始,向着相关文档的质心向量靠近了一段距离,而同时又与不相关文档的质心向量远离了一段距离。新查询可以采用常规的向量空间模型进行检索。通过减去不相关文档的向量,我们很容易保留向量空间的正值分量。在Rocchio 算法中,文档向量中的权重分量如果为负值,那么该分量将会被忽略,也就是说,此时会将该分量权重设为0。下图给出了应用相关反馈技术的效果示意图。


       相关反馈可以同时提高召回率和正确率。然而,实际表明该技术在一些重召回率的场景下对于提高召回率非常有用。这其中的部分原因在于它对查询进行了扩展,另一个原因是应用的场景所带来的结果:在期望高召回率的情况下,可以预计用户可能会花更多时间来浏览结果并进行反复搜索。正反馈往往比负反馈更有价值,因此在很多IR系统中,会将参数设置成γ < β。一个合理的取值是α = 1、β = 0.75 及γ = 0.15。实际上,很多系统,都只允许进行正反馈,即相当于设置γ = 0。还有一种做法是,只取检索系统返回结果中排名最高的标记为不相关的文档进行负反馈,此时,公式中的|Dnr| = 1。尽管上述相关反馈方法存在各种变形,并且很多比较实验也没有取得一致性的结论,但是一些研究却认为一种称为Ide dec-hi 的公式最有效或至少在性能上表现最稳定。Ide dec-hi 的公式如下:


二、用户画像
1)用户喜好标签:可根据标签进行直接推荐
2)建模抽取用户喜好
用户标签数据(非喜好类)(结构化数据)、用户评论数据(非结构化数据)可分别建模也可融合建模,非结构化数据需进行特征筛选。建模的目的是为了抽取用户喜好属性,如何抽取?可分为两种情况:
     a)有直接喜好标签(有监督的分类问题)
既然有直接的喜好标签为什么不是1)中根据标签进行直接推荐?答当然可以,但如果只是部分用户有直接喜好标签我们需要预测没有直接喜好标签的用户的直接喜好属性那就需要运用分类算法,先训练后预测,最终得到全量用户的喜好属性。
既然是分类问题当然可以用 Rocchio算法,但这里并不推荐用此分类方法,应为此方法上述中的一些特点,所以在分类界 常常被用来做科研中比较不同算法优劣的基线系统(Base Line),这里可用其他分类算法(不做介绍),那么Rocchio算法到底如何使用呢,当然要根据Rocchio算法的主要特性将其用在刀刃上。
      b )没有直接喜好标签(无监督的聚类问题)
根据相关聚类算法给用户打上喜好标签(聚类算法不做介绍)

在通过分类或聚类算法得到用户直接喜好标签之后我们就可以进行初步推荐了,如何推荐这里不是本文介绍的重点,最简单的策略就是根据用户的喜好标签,再根据物品属性标签去计算与用户喜好最相似的topN个物品进行推荐。在形成初步推荐结果之后,如何根据用户的行为进行相关反馈的二次推荐才是本文介绍的重点。

三、Rocchio算法进行二次推荐
所谓二次推荐其实是根据初步推荐后用户对推荐结果的行为反馈对推荐结果的修正,二次推荐的应用可分为: 加法和减法
      a)加法
根据一中得到的用户喜好只能够代表用户在一段时间段内相对稳定的喜好,而无法得知此时此刻用户的目的或者喜好,因此根据想定稳定的喜好推荐的结果也许并不是用户现在想要的 ,所以根据用户对推荐结果的反馈,及时修改用户的喜好向量,进行快速的二次计算,重新形成推荐结果在用户点击更多或其他标签或者刷新页面时修正推荐结果。那么这里有个问题,即使是简单的相似度计算在面对全量用户(如移动用户8亿)也无法满足在用户在可忍受的时间范围内进行快速的响应,我能够想到的方法是用于初步推荐的候选集应尽可能在保障相关性的同时扩大其覆盖度(如何保持这之间的平衡可根据实验得知),那么我们在二次推荐的时候计算范围就缩减至这些初步候选集的范围,这样应该可以满足实时响应的要求。所以,这里所说的“加法”指 根据用户对初步推荐结果的反馈, 及时增加用户的喜好元素,扩展喜好向量。
      b)减法
加法是基于用户点击反馈,减法主要用于用户对当前页面展示的推荐结果没有任何操作行为,可对原始喜好向量进行筛检,重新形成推荐结果,原理类似加法,这里不重复说明,注意一点,就是原始喜好向量中元素的个数问题,不能无限制做减法,否则喜好向量为空,则无法进行推荐。

四、结束语
个人认为成功的推荐系统需具备以下三点:
       1)能够进行个性化的精准推荐
       2)在合适的时间合适的地点进行推荐
       3)根据用户当前行为反馈进行实时推荐
互联网时代还是内容为王,其他方面再漂亮,没有高质量的内容一切都是扯淡,高质量的内容在推荐领域主要包括1中的个性化的精准推荐和2中的根据用户行为反馈进行内容的变化推荐。互联网时代归根到底讲究的是用户体验,不管是1、2还是3都是注重用户体验的体现, 而Rocchio算法进行二次推荐正式正是1和3的体现,至于2在合适的时间合适的地点进行推荐则对推荐系统提出了更高的智能要求。总的来说,智能推荐系统还有很长的路要走,距离用户的预期还很远,正因为如此,智能推荐正吸引着一大批企业、研究单位投身于此。。。。。。

参考文献
[1] http://blog.csdn.net/sulliy/article/details/6670980
[2].  Joachims T. A Probabilistic Analysis of the Rocchio Algorithm with TFIDF for Text Categorization[D]. Springer US, 1997.

你可能感兴趣的:(大数据)