分享协同过滤思想简介 什么是协同过滤?( 八 )


另外, 对于新入库的标的物, 由于只有很少的用户操作行为, 这时相当于用户行为矩阵中该标的物对应的列基本都是零, 这时无法计算出该标的物的相似标的物, 同时, 该标的物也不会出现在其他标的物的相似列表中, 因此无法将该标的物推荐出去 。 这时, 可以采用人工的策略将该标的物在一定的位置曝光, 或者强行以一定的比例或者概率加入推荐列表中, 通过收集该标的物的行为解决该标的物无法被推荐出去的问题 。
在第七节我们会更加详细介绍协同过滤的冷启动解决方案 。
(2) 稀疏性问题对于现代的互联网产品, 用户基数大, 标的物数量多(特别是新闻、UGC短视频类产品), 一般用户只对很少量的标的物产生操作行为, 这是用户操作行为矩阵是非常稀疏的, 太稀疏的行为矩阵计算出的标的物相似度往往不够精准, 最终影响推荐结果的精准度 。
七、协同过滤算法落地到业务场景需要关注的问题协同过滤算法虽然简单, 但是在实际业务中, 为了让它有较好的效果, 最终对业务产生较大的价值, 我们在使用该算法时需要注意如下问题 。
1.是采用基于用户的协同过滤还是采用基于标的物的协同过滤
在互联网产品中一般会采用基于标的物的协同过滤, 因为对于互联网产品来说, 用户相对于标的物变化更大, 用户是增长较快的, 标的物增长相对较慢(这也不是绝对的, 像新闻、短视频类应用标的物也是增速巨大的), 利用基于标的物的协同过滤算法效果更稳定 。
2.对时间加权
一般来说, 用户的兴趣是随着时间变化的, 越是久远的行为对用户当前的兴趣贡献越小, 基于该思考, 我们可以对用户的行为矩阵做时间加权处理 。 将用户评分加上一个时间惩罚因子, 对久远的行为进行一定的惩罚, 可行的惩罚方案可以采用指数衰减的方式 。 例如, 我们可以采用如下的公式来对时间做衰减, 我们可以选择一个时间作为基准值, 比如当前时间, 下式中的n是标的物操作时间与基准时间相差的天数(n=0时, w(0)=1) 。

分享协同过滤思想简介 什么是协同过滤?

文章插图
3.关于用户对标的物的评分
在真实业务场景中, 用户不一定对标的物评分, 可能只有操作行为 。 这时可以采用隐式反馈的方式来做协同过滤, 虽然隐式反馈的效果可能会差一些 。
但同时, 我们是可以通过一些方法和技巧来间接获得隐式反馈的评分的, 主要有如下两类方法, 通过这两类方法获得评分, 是非常直观的, 效果肯定比隐式反馈直接用0或者1好 。
虽然很多时候用户的反馈是隐式的, 但用户的操作行为是多样化的, 有浏览、点击、点赞、购买、收藏、分享、评论等等, 我们可以基于用户这些隐式行为的投入度(投入的时间成本、资金成本、社交压力等, 投入成本越大给定越高的分数)对这些行为人为打分, 比如浏览给1分, 点赞给2分, 转发给4分等等 。 这样我们就可以针对用户不同的行为生成差异化的评分 。
对于像音乐、视频、文章等, 我们可以记录用户在消费这些标的物上所花的时间来计算评分 。 拿视频来说, 如果一个电影总时长是100分钟, 如果用户看了60分钟就退出了, 那么我们就可以给用户打6分(10分制, 因为用户看了60%, 所以打6分) 。
4.相似度计算
我们在前面讲解协同过滤算法时需要计算两个向量的相似度, 本文前面采用的是cosine余弦相似度 。 其实, 计算两个向量相似度的方式非常多, cosine余弦是被证明在很多场景效果都不错的一个算法, 但并不是所有场景cosine余弦都是最好的, 需要针对不同场景做尝试和对比 。 在这里, 我们简单罗列一些常用的相似度计算的方法, 供大家参考 。
(1) cosine余弦相似度前面已经花了很大篇幅讲解了cosine的计算公式, 这里不赘述 。 需要提一点的是, 针对隐式反馈(用户只有点击等行为, 没有评分), 向量的元素要么为1要么为0, 直接用cosine余弦公式效果不是很好, 参考文献5针对隐式反馈给出了一个更好的计算公式(见下面图14), 其中

分享协同过滤思想简介 什么是协同过滤?

文章插图
是用户u对标的物p的评分(对于隐式反馈, 评分是0或者1, 但是参考文献5针对用户不同的隐式反馈给出了不同的评分, 而不是一律用1, 比如浏览给1分, 收藏给3分, 分享给5分等,

分享协同过滤思想简介 什么是协同过滤?

推荐阅读