搜索和推荐,都是为了解决信息过载的问题
搜索依赖query,但是推荐依赖用户的行为数据
推荐系统评价指标包括很多,可以通过离线计算,在线计算,用户问卷获取。
利用用户行为数据;主要是显性反馈行为(如打分,明确)和隐性反馈行为(不明确,数据量大)
实验评估指标:召回率,准确率,覆盖率
基于邻域的算法:
usercf,用户a 相似的top N 个用户喜欢的物品,推荐给 a
度量用户之间的相似性;优化方案,优化相似性度量,惩罚热门物品
适合于用户固定且不是很多的场景(因为要计算用户相似度矩阵),难以解释
itemcf,不适合物品更新很快的场景。
度量物品之间的相似性;优化方案,优化相似性度量,惩罚热门用户(或者直接忽略)
归一化相似度,提高覆盖率。可解释性好。适合物品相对固定,用户量很大的场景。
UserCF 更加社会化,ItemCF 更加个性化
隐语义模型 LFM:通过隐含特征联系用户和物品
对于某个用户,找到他的兴趣分类,然后从分类中找到他喜欢的物品。隐语义模型采取基于用户行为统计的自动聚类。
ps:隐性反馈数据集上,如何生成负样本:1,保证正负样本的均衡,2,对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品
计算方法:
难以实时推荐,经典LFM 模型每次训练都需要扫描所有的用户行为记录,才能计算用户隐类向量和物品隐类向量。而且需要在用户行为记录上反复迭代才能获得较好的性能。训练比较耗时,一般一天训练一次,并且计算出所有用户的推荐结果。从而不能因为用户行为的变化,实时调整推荐结果来满足用户最近的行为。
新闻推荐中,冷启动问题明显,大量的新闻生命周期很短,因此需要改进。
和 基于邻域的方法比较:
理论基础:LFM 拥有比较好的理论基础,是一种机器学习方法,通过优化一个设定的指标来计算模型参数。基于邻域的方法,更多的是基于统计。
离线计算的空间复杂度:基于邻的方法,需要维护一张离线的相关表,占据很大内存(O(N * N ) 或者 O(M * M)),但是 LFM, 如果是 F 个隐类,那么需要的存储空间是 O(F * (M + N)), 可以很大的节省内存。
离线计算的时间复杂度:没有质的差别
在线实时推荐:LFM在给用户生成推荐列表时,需要计算用户对所有物品的兴趣权重,然后排序,返回权重最大的n 个物品。在物品数较多时,时间复杂度非常高,可达 O (M * N * F) 。因此,LFM 不适合物品数特别大的系统,可以先给用户计算一个比较小的候选列表,然后使用 LFM rerank。而且,lfm 生成用户推荐列表太慢,不能在线实时计算,需要离线计算用户的推荐结果。无法实时。需要修改。
推荐解释:LFM 不具有好的解释性。
基于图的模型:
推荐系统冷启动问题:
利用用户标签数据
用户给物品打标签,这个标签一方面描述了用户的兴趣,另一方面表示的物品的语义。从而将物品和用户联系起来。