[论文阅读&翻译]Item-to-Item Collaborative Filtering

Amazon.com Recommendations Item-to-Item Collaborative Filtering

个人感受:

这篇论文首先介绍了历史上的三种算法:传统协同过滤、聚类、基于搜索的算法。第一种方法在计算效率、少量数据上表现欠佳;第二种方法准确率欠佳;第三种方法比较“简单”,因此提出了大量计算在线下的物品-物品的相似记录进行推荐。

揣测一下作者的思路,计算量大是因为数据量大,但是其中有价值的就是其中购买的物品,而且对于购买的物品来说,我们推荐的也是根据购买的物品来推荐的,用户仅仅是提供了物品之间的关系,也就是说物品-用户记录-物品这样的逻辑联系起来的,用户提供了物品的关联信息,最终的目标还是推荐物品,因此作者从计算量的角度来说把大量计算放在线下,而且根据我的关注点——商品来提出了这种算法。

除此之外,大量的测试数据也是作者的宝贵财富,因为实验室可能根本就没有这样大量的真实数据进行测试。

推荐系统使用用户的购买信息来为用户推荐可能感兴趣的信息,当然,除了已有的信息之外,还可以使用用户的感兴趣或者地理或者其他特征信息,这些都是我们可以利用的信息。

在亚马逊上,我们的算法给每个用户制订了一个个性商店,里面根据历史记录来进行未来感兴趣信息的预测,统计结果显示,推荐系统的关键指标——点击率和转化率,这两个数据都要比横幅广告或者热销产品列表这样的推荐方式高。

因此,我们的推荐系统是很有必要的,当然需要满足这么几个条件:

要能处理大量数据;要能在半秒内产生高质量的结果;针对新的用户,没有太多的历史记录,也能产生有效信息;对于老用户,会有大量信息,也是要有效;用户数据的变化应该能及时的反应在推荐系统上。

常用的推荐方式有:传统的协同过滤、聚类模型和基于搜索的方法。

我们的算法:item-to-item协同过滤算法很厉害,几个条件都能达到。

推荐算法:

推荐算法往往是找一个用户群能够使得这个用户群购买的东西包含预测用户购买的东西,然后推荐这个集合中用户没有购买的东西。而我们的算法和基于搜索的算法都是从相似物品的角度出发,推荐最为相似的物品的。

传统协同过滤:

每个用户用一个向量来表示,这个向量很是稀疏,而且为了使得一些非畅销产品可能有更好的结果,向量中的每一项会乘上购买人数的倒数(这似乎确实是一个行之有效的方法,因为这样确实能够显著的降低热销商品的评价,能够从一定程度上来推广非热销商品,假设一个热销商品和一个非热销商品平均打分相同,可能性价比比较类似,但是由于我的算法对于热销商品有抑制,因此在乘上一个倒数之后,非热销商品就更可能被推荐;当然,热销商品可能是因为热销才会购买,因此在相似性上并没有什么效果,就像是中国的大学生都要看数学分析或者高等数学,这个差异性不大,但是如果两个人都读过《平凡的世界》,那么可能相似性会高一些)。

对于两个用户相似性的计算也是使用余弦相似性。

当然,这种协同过滤系统在计算上市很昂贵的,时间复杂度是0(MN),其中M是用户的个数,N是商品的个数。因为要计算个用户,以及每个用户的N个商品。但是因为这个矩阵很稀疏,因此复杂度大约是O(M+N)。检索每个用户大约是O(M),因为大多是空项,但是其中确实有N个元素,因此是O(N)。因此最终是O(M+N)。对于大尺度的数据,这个算法啊有些吃不消。

不过可能的改进方法是减少数据规模,比如说去掉一些数据太少的用户,或者去掉大热或者不热的物品或者进行分类处理。聚类或者主成分析都是可以采用的显著降维的方法。

但是呢,这些方法都会降低推荐的质量,因为少数的用户可能不是最相似的用户,而且,商品的减少使得我的推荐限定在某些商品中,再有就是如果商品忽略流行或者不流行的商品,那么这些产品永远不会被推荐,那么只买这些商品的用户就买不到。因此降低N的算法会减少商品,降低M的算法会降低相似程度,都会降低推荐质量。

聚类模型

聚类模型的思想是把用户进行聚类然后将推荐问题归为一个分类问题。

非监督算法进行大规模数据的聚类是个困难的问题,所以现在大多是采用贪心算法进行大规模数据的聚类。

进行聚类之后就判断用户属于哪一个类别或者计算用户和多个类别之间的强度。

从性能上来说,聚类的方法确实好一些,但是从准确率上来说就低一些,因为聚类算法是把很多用户看作一个部分,而把一个用户分配到一个部分中,也许最相似的用户在其他部分中,而这个部分仅仅是比较相似的。解决方法是继续细分,但是这样就和传统的协同过滤效果要差不多了。

基于搜索的算法

基于搜索的算法把推荐问题看作是搜索相关物品的问题,给定用户的购买和打分,算法去寻找其他流行的相同作者或者有关系的商品。但是问题就是这钟(很单纯)的推荐方法对于购买比较少的用户推荐比较好,因为推荐的都是相关的,看了碟中谍1就推荐碟中谍2345,但是对于用户购买很多东西,这个算法就使用数据的子集,降低了质量,要么推荐非常细致,要么就是非常宽泛。

而关键是要寻找新的,用户可能感兴趣的物品。

Item-to-Item Collaborative Filtering

亚马逊给在首页上有给用户推荐商品,还有就是购买了这个商品的人还购买了什么,这样来推荐商品。亚马逊用了这些算法,但是在亚马逊的大数据集上基本上效果不大,因此自己推出了Item-to-Item Collaborative Filtering,不论是从数据尺度上海市质量或者是实时效果上都非常牛逼。(这就是坐着想表达的意思)

如何工作

不是通过计算用户相似度,Item-to-Item Collaborative Filtering会通过用户的购买和评价来计算物品和物品的相似度,这时候再根据物品的相似度来产生一个推荐列表。

为了决定对于特定物品的最相似的物品,这个算法建立了一个相似的物品的列表。我们只需要根据任意两个商品对进行计算就可以求出结果。当然,有些产品没有共同的用户,那么这时候这些情况下这个算法就是无效的。

接下来的算法给出了计算相似性的一个算法:对于任意一个物品,检索购买这个物品的用户购买其他商品的个数并且进行累加。我们可以通过很多方法计算两个物品的相似度,但是一个通常的方法就是使用余弦相似性。

这些计算都是线下的,理论上最坏时间复杂度为O(N^2M),实际上的时间复杂度约为O(MN),因为大多数用户的记录都是非常少的。

给一个物品相似度矩阵,算法找到相似的物品和打分是很容易的,这时候再找依据的就仅仅是购买的商品了。

算法的对比:

亚马逊有很多很多很多数据,这既是挑战,也是机遇。很多算法都是基于小数据,但是对于非常大的数据,大量的计算需要线下完成,作为一个比较,我们看一下:

传统的协同过滤算法几乎没有线下工作,线上计算的数据尺度也是有限的,除非能够降维,但是又会降低准确性。

聚类模型算法在线下做了很多工作,但是效果实在是太差,而如果提升效果,那么线上的计算量又上去了。

基于搜索的算法很粗放。

Item-to-Item Collaborative Filtering的关键就是大量计算先下完成。算法的在线就是查找相似的物品,计算就是根据用户的购买总数来决定的。因此算法对于大数据集非常快。因为算法能够推荐非常相关的物品,因此推荐质量也是杠杠的。不像传统的协同过滤,这个算法对于那些只有很少的购买历史的记录也是能够准确推荐的。

总结:

推荐算法根据用户的购买力是提供了一个有效的目标市场,一个好的推荐算法能够在大尺度上表现的非常好,需要的仅仅是很少的时间来计算推荐的结果,而且应该能够很好的对于用户的数据修改进行互动。不像其他的算法Item-to-Item Collaborative Filtering成功解决了重大技术难题。

未来,我们希望零售业能够更广泛的应用推荐系统开拓市场,线上和线下。当电子商务有了个性化的推荐的时候,还是希望线上线下共同发展。

时间: 2024-10-08 00:30:30

[论文阅读&翻译]Item-to-Item Collaborative Filtering的相关文章

论文笔记-Item2Vec- Neural Item Embedding for Collaborative Filtering

将word2vec思想拓展到序列item的2vec方法并运用到推荐系统中,实质上可以认为是一种cf 在word2vec中,doc中的word是具有序列关系的,优化目标类似在max对数似然函数 应用在item2vec上,可以有两种看待方式: (1)如果item是强时序关系的,那么对某一次序列中的item,可以看成doc中的word,对其进行word2vec (2)如果item是set-based,不用考虑时序,那么可能需要对word2vec进行变形 论文中对第二种情况进行了描述,有两种变形方式 (

DNN论文分享 - Item2vec: Neural Item Embedding for Collaborative Filtering

前置点评: 这篇文章比较朴素,创新性不高,基本是参照了google的word2vec方法,应用到推荐场景的i2i相似度计算中,但实际效果看还有有提升的.主要做法是把item视为word,用户的行为序列视为一个集合,item间的共现为正样本,并按照item的频率分布进行负样本采样,缺点是相似度的计算还只是利用到了item共现信息,1).忽略了user行为序列信息; 2).没有建模用户对不同item的喜欢程度高低. ------------------------------------------

Tachyon在Spark中的作用(Tachyon: Reliable, Memory Speed Storage for Cluster Computing Frameworks 论文阅读翻译)

摘要: Tachyon是一种分布式文件系统,能够借助集群计算框架使得数据以内存的速度进行共享.当今的缓存技术优化了read过程,可是,write过程由于须要容错机制,就须要通过网络或者是磁盘进行复制操作.Tachyon通过将"血统"技术引入到存储层进而消除了这个瓶颈.创建一个长期的以"血统机制"为基础的存储系统的关键挑战是失败情况发生的时候及时地进行数据恢复.Tachyon通过引入一种检查点的算法来解决问题,这样的方法保证了恢复过程的有限开销以及通过资源调度器下进行

【转载】协同过滤(Collaborative Filtering)

Collaborative Filtering 协同过滤的主要目标:由于网络信息量的增多,用户往往被淹没在信息的海洋里,很难很轻易的找到自己感兴趣的topic.协同过滤就是为了把用户最可能感兴趣的信息推送给用户(Recommer system). 协同过滤的方法: model-base,user-base,item-base,content-base. user-based:搜集用户profile.对于一个active user,找到跟其比较接近(或者相似)的几个neighbour.使用这些ne

Item-to-Item Collaborative Filtering

Amazon.com Recommendations Item-to-Item Collaborative Filtering 个人感受: 这篇论文首先介绍了历史上的三种算法:传统协同过滤.聚类.基于搜索的算法.第一种方法在计算效率.少量数据上表现欠佳:第二种方法准确率欠佳:第三种方法比较"简单",因此提出了大量计算在线下的物品-物品的相似记录进行推荐. 揣测一下作者的思路,计算量大是因为数据量大,但是其中有价值的就是其中购买的物品,而且对于购买的物品来说,我们推荐的也是根据购买的物品

【RS】Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model - 当因式分解遇上邻域:多层面协同过滤模型

[论文标题]Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model   (35th-ICML,PMLR) [论文作者]Yehuda Koren [论文链接]Paper (9-pages // Double column) [摘要] 推荐系统为用户提供个性化的产品或服务建议.这些系统通常依赖于协同过滤(CF),通过分析过去的事务来建立用户和产品之间的关联.比较成功的CF方法有两种,一种是直

推荐系统(recommender systems):预测电影评分--构造推荐系统的一种方法:协同过滤(collaborative filtering )

协同过滤(collaborative filtering )能自行学习所要使用的特征 如我们有某一个数据集,我们并不知道特征的值是多少,我们有一些用户对电影的评分,但是我们并不知道每部电影的特征(即每部电影到底有多少浪漫成份,有多少动作成份) 假设我们通过采访用户得到每个用户的喜好,如上图中的Alice喜欢爱情电影,不喜欢动作电影,则我们将θ(1)设为[0,5,0],如此设置θ(2),θ(3),θ(4)的值,这样我们有了每个用户的θ的值以及他们对电影的打分,就可以推断出每部电影的x(特征)的值.

collaborative filtering协同过滤

每次我想看电影的时候,都会去问我的朋友,小健.一般他推荐的电影,我都比较喜欢.显然不是所有人都有小健这样的能力.因为我碰巧和小健有类似的品味. 这个生活中的经验,实际上有着广泛的用途. 当系统需要为某个人做出推荐时,一种机器学习的算法是这样工作的:就是在一大群人中找出一部分与他品味类似的人,把这些人的喜欢的东西排序,然后推荐给他. 自然引出两个问题: 谁是与他相近品味的人: 怎么对这些人喜欢的东西排序: 对于上述两个问题有多种不同的答案,不同的答案意味着不同的算法. --- 问题1的答案有两种:

论文阅读方法

论文阅读方法 别先读摘要,从导言部分入手 找出大问题 这个领域正在设法解决什么问题? 以不超过5句话的篇幅总结背景 为解决这一"大问题",这一领域做过什么努力?之前的工作有什么局限?在作者看来,下一步需要做什么?简洁地解释为什么要进行这项研究. 找出具体问题 作者在他们的研究中究竟想回答什么问题?把这些问题(不一定是一个)写下来.如果是那种研究一个或者多个零假设的研究,把零假设辨别出来. 弄清解决手段 为了回答这些具体的问题,作者要怎么做? 阅读方法部分 为每一个实验画出一个图表,画出