《Item-to-Item Collaborative Filtering》笔记
因毕设需要元旦翻译了amazon.com那篇著名的协同过滤的文章 《Amazon.com Recommendations: Item-to-Item Collaborative Filtering 》
翻译之余顺便做了笔记,和csdn blog上的另一篇对比了一下:
* 我的差距:不少地方没有读透,只用了原文词语,没能抽象的概括出来,说明领域知识太少,还需要恶补
* 好的地方:我的层次更加鲜明,可能是受思维导图影响吧
下面是我的笔记
亚马逊推荐系统,物品到物品的协同过滤
电子商务推荐算法的使用环境
- 大数据:有海量数据的大型零售商,以千万计顾客、百万计的登记在册的不同商品。
- 实时:许多应用要求结果实时返回,在半秒之内,还要产生高质量的推荐。
- 冷启动:新顾客一般信息有限,以少量购买或产品评级为基础。
- 老数据:较老的顾客信息丰沛,以大量的购买和评级为基础。
- 数据不稳定:每一次交互都可提供有价值的顾客数据,算法必须立即对新的信息做出响应。
解决推荐问题通常有三个途径
- 传统的协同过滤
- 人到人
- 物品到物品
物品到物品推荐的特点
与传统人到人协同过滤不同,物品到物品算法的在线计算规模与顾客数量和产品目录中的商品数量无关
- 实时
- 适应海量
- 高质量
推荐算法
- 找相似顾客:传统协同过滤、聚类
- 找相似物品:搜索、物品到物品协同过滤
传统的协同过滤
- 顾客->商品的N维向量(N是商品数量,M是顾客数量)
- 正负分量作为评级
- 弥补热卖商品的影响->向量分量乘以逆频率(已购买顾客数量的倒数)->使不知名的商品更相关
- 向量非常稀疏
- 余弦相似度
传统算法复杂度
- 最坏O(MN)
- 因为稀疏,复杂度接近O(M + N)
- 扫描每一个顾客大约是O(M),而不是O(MN)
- 少数高级顾客,需要O(N)
传统算法优化
- 减小数据量
- 减小M
- 对顾客随机抽样
- 丢弃购买很少的顾客
- 缺点:用户相似度降低
- 丢弃极热门/极冷门商品
- 缺点:只购买过最热/最冷商品的顾客得不到推荐
- 商品空间区隔
- 通过一个小的常数因子,在产品类别或主题分类的基础上
- 缺点:把推荐限制在特定产品或主题领域之内
- 聚类
- 主分量分析
- 缺点:只购买过最热/最冷商品的顾客得不到推荐
聚类模型
- 对顾客基础进行细分,寻找与当前用户相似的顾客
- 分类:非监督学习算法
- 大数据的理想聚类不切实际,一般:贪心聚类(随机初始集等)
- 相似性计算
- 优点:可扩展性,在线性能好,复杂和昂贵的聚类计算会离线运行
- 缺点:粗粒度相似性差,细粒度计算量大
基于搜索的方法
构造一个搜索查询,以寻找其他热卖的商品,通过同一作者、艺术家或导演,或利用相似的关键词或主题
* 用户数据少的时候->性能和计算量不错
* 用户数据多->只能使用子集->降低推荐质量
* 综合推荐质量较差
物品到物品的协同过滤
- 匹配到相似的商品
For 每件商品 in 产品目录, I1
For 每位顾客 C in 购买过 I1
For 每件商品 I2 由顾客 C 所购买的
记录一个顾客所购买的 I1 和 I2
For 每件商品 I2
在 I1 与 I2 之间计算相似度
- 最坏需要O(N^2*M)
- 实际运行中,接近O(NM)
- 仅仅取决于该用户购买或评级过商品的数量
可扩展性好
- 传统的协同过滤
- 离线计算少
- 线计算量大(取决于顾客和登记在册商品的数量)
- 维度降低、抽样或区隔方法会降低推荐品质。
- 离线运行大量的计算
- 推荐质量相对较差
- 出于改进,可以增加人群细分的数量,但细分人群计算量大
- 离线建立关键词、范畴、作者索引
- 不能提供符合兴趣、定向内容的推荐
- 对于数据多的顾客扩展性不佳
- 耗时巨大的相似商品表格是离线算
- 在线部分:计算量独立于商品目录的规模或顾客的总数
- 推荐质量更好
- 冷启动性能好