推荐系统三十六式
刑无刀
“贝壳找房”资深算法专家,8 年推荐系统工程师
43607 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
开篇词 (1讲)
原理篇 · 深度学习 (2讲)
原理篇 · 其他应用算法 (3讲)
推荐系统三十六式
15
15
1.0x
00:00/00:00
登录|注册

18 | 如何将Bandit算法与协同过滤结合使用

更新user和item的聚类
COFIBA算法要点摘要
用户的决策是动态进行的
相似的用户对同一个物品的反馈可能是一样的
COFIOBA算法将协同过滤思想引入到Bandit算法中
Bandit算法与其他算法结合使用
探索和利用的矛盾
Bandit算法解决推荐系统中的冷启动和EE问题
细节
思想
Bandit算法是权衡探索和利用的好方法
担心进入信息茧房,无法看到新的东西
物以类聚,人以群分
背后的思想简单深刻
推荐系统发展史上浓墨重彩的一笔
协同过滤
总结
再谈EE问题
COFIBA算法
信息茧房
协同过滤
推荐系统中最经典的算法是什么?
如何将Bandit算法与协同过滤结合使用

该思维导图由 AI 生成,仅供参考

推荐系统中最经典的算法是什么?对,是协同过滤,你已经学会抢答了。
是的,协同过滤是推荐系统发展史上浓墨重彩的一笔,其背后的思想简单深刻,在万物互联的今天,协同过滤的威力更加强大。与其说协同过滤是一门技术,不如说是一种方法论,不是机器在为你推荐,而是“集体智慧”在为你推荐。
协同过滤生动地诠释了什么是“物以类聚,人以群分”,你的圈子决定了你能见到的物品,这一点在前面的专栏中已经详细讲过了。但是这背后隐藏了一个重要的问题:是不是会存在信息茧房的问题?

信息茧房

其实作为一名对推荐系统略懂一二的普通海淀群众,我个人就会时常担心,是不是还能看到新的东西,是不是有惊喜。时不时乱点一通,是不是叉掉所有的推荐,让物品的推荐系统崩溃一下,这一切就是为了避免进入信息茧房,在眼前的圈子里苟且。
那么作为推荐系统的开发者,是不是应该做点什么呢?是的,在技术上,Bandit 算法就是一个权衡探索和利用的好方法。如果把它结合传统的协同过滤来做推荐,那么在一定程度上就可以延缓信息茧房的到来,偶遇诗和远方。
我已经和你聊了两篇关于 Bandit 算法的内容,我介绍过普通的 Bandit 算法,也介绍过加入特征信息的 LinUCB 算法,今天,我要介绍的是一个新方法,如何结合协同过滤的群体智慧,与 Bandit 的走一步看一步一起,让两种思想碰撞,也许可以让你的推荐系统与众不同。
这就是 2016 年有人提出的 COFIBA 算法,下面我就开始与你聊聊这种算法。

COFIBA 算法

1 思想

很多的推荐场景中都有两个规律。
相似的用户对同一个物品的反馈可能是一样的。也就是对一个聚类用户群体推荐同一个 item,他们可能都会喜欢,也可能都不喜欢,同样的,同一个用户会对相似的物品反馈也会相同。这实际上就是基于用户的协同过滤基本思想。
在使用推荐系统过程中,用户的决策是动态进行的,尤其是新用户。这就导致无法提前为用户准备好推荐候选,只能“走一步看一步”,是一个动态的推荐过程。这是 Bandit 的算法基本思想。
每一个推荐候选物品,都可以根据用户对其偏好的不同,将用户分成不同的群体。
然后下一次,由用户所在的群体集体帮他预估可能的收益及置信区间,这个集体就有了协同的效果,然后再实时观察真实反馈,回来更新用户的个人参数用于下次调整收益和置信区间,这就有了 Bandit 的思想在里面。
举个例子,如果你的父母给你安排了很多相亲对象,要不要见面去相一下?那需要提前看看每一个相亲对象的资料,每次大家都分成好几派,有说好的,有说再看看的,也有说不行的。
你自己也会是其中一派的一员,每次都是你所属的那一派给你集体打分,因为他们是和你“三观一致的人”“诚不欺我”;这样从一堆资料中挑出分数最高的那个人,你出去见 TA,回来后把实际感觉说给大家听,同时自己心里的标准也有些调整,重新再给剩下的其它对象打分,打完分再去见,
如果要推荐的候选物品较多,需要对物品聚类,就不用按照每一个物品对用户聚类,而是按照每一个物品所属的类簇对用户聚类,如此一来,物品的类簇数目相对于物品数就要大大减少。

2. 细节

基于上述的思想,COFIBA 算法要点摘要如下。
在时刻 t,有一个用户来访问推荐系统,推荐系统需要从已有的候选池子中挑一个最佳的物品推荐给他,然后观察他的反馈,用观察到的反馈来更新挑选策略。
这里的每个物品都有一个特征向量,所以这里的 Bandit 算法是 context 相关的,只不过这里虽然是给每个用户维护一套参数,但实际上是由用户所在的聚类类簇一起决定结果的。
这里依然是用岭回归去拟合用户的权重向量,用于预测用户对每个物品的可能反馈(payoff),这一点和我们上一次介绍的 LinUCB 算法是一样的。
对比上一次介绍的 LinUCB 算法,COFIBA 的不同有两个:
基于用户聚类挑选最佳的物品,即相似用户集体动态决策;
基于用户的反馈情况调整用户和物品的聚类结果。
整体算法过程如下。
在针对某个用户 i,在每一次推荐时做以下事情。
首先计算用户 i 的 Bandit 参数 W,做法和 LinUCB 算法相同,但是这个参数并不直接参与到选择决策中,注意这和 LinUCB 不同,只是用来更新用户聚类。
遍历候选物品,每一个物品已经表示成一个向量 x 了。
每一个物品都对应一个物品聚类类簇,每一个物品类簇对应一个全量用户聚类结果,所以遍历到每一个物品时,就可以判断出当前用户在当前物品面前,自己属于哪个用户聚类类簇,然后把对应类簇中每个用户的 M 矩阵 (对应 LinUCB 里面的 A 矩阵),b 向量(表示收益向量,对应 LinUCB 里面的 b 向量)加起来,从而针对这个类簇求解一个岭回归参数(类似 LinUCB 里面单独针对每个用户所做),同时计算其收益预测值和置信区间上边界。
每个待推荐的物品都得到一个预测值及置信区间上界,挑出那个上边界最大的物品作为推荐结果。
观察用户的真实反馈,然后更新用户自己的 M 矩阵和 b 向量,只更新每个用户,对应类簇里其他的不更新。
以上是 COFIBA 算法的一次决策过程。在收到用户真实反馈之后,还有两个计算过程:
更新 user 聚类;
更新 item 聚类。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

COFIBA算法:协同过滤与Bandit算法的完美结合 推荐系统中的热门话题是如何结合Bandit算法与协同过滤,以解决信息茧房问题。COFIBA算法是一种创新思想,将协同过滤与Bandit算法相结合,实现了对用户偏好的动态预估和个性化推荐。该算法通过将用户分成不同的群体,利用协同过滤的思想,同时采用Bandit算法的动态推荐过程,实现了对推荐候选物品的动态预估和实时观察。类似于相亲过程中,由相亲对象所属的派别集体打分,然后根据实际感受和个人标准的调整进行下一轮打分,最终选择最合适的对象。 COFIBA算法的关键点包括:在时刻t,从候选池中挑选最佳物品推荐给用户,观察用户反馈并更新挑选策略;每个物品都有一个特征向量,Bandit算法是context相关的,由用户所在的聚类类簇一起决定结果;使用岭回归拟合用户的权重向量,预测用户对每个物品的可能反馈;基于用户聚类挑选最佳物品,即相似用户集体动态决策;基于用户的反馈情况调整用户和物品的聚类结果。 整体算法过程包括计算用户的Bandit参数W,遍历候选物品,针对每个物品计算预测值及置信区间上界,观察用户真实反馈并更新用户的M矩阵和b向量。此外,还有更新user和item的聚类过程,通过调整基于用户和基于物品的聚类结果,实现用户和物品的群体代表换届选举,不断根据用户实时动态的反馈来调整用户决策参数,重新划分聚类结果矩阵。 COFIBA算法的思想创新,能够在推荐系统中实现对用户偏好的动态预估和个性化推荐,为推荐系统的发展带来新的思路和方法。此外,文章还探讨了Bandit算法在解决推荐系统中的冷启动和EE问题的应用,以及在引入探索机制时需要注意的几点。总体而言,COFIBA算法是一种简单而有效的算法,通过GitHub上的实现和原始论文的理论和实验验证,证明了其在推荐系统中的有效性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《推荐系统三十六式》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • zgl
    请问下,除了推荐算法介绍,有没有实际推荐架构的讲解和分析?

    作者回复: 过几天就有了。

    2018-04-13
    4
  • 林彦
    1. 看了下周三的LinUCB文章。这么理解的,COFIBA算法中的M矩阵相当于LinUCB算法中的D矩阵,2个维度都等于内容空间的特征维度数(之前文章中的选择次数m被特征维度数d说取代)。COFIBA算法中的W矩阵相当于LinUCB算法中的西塔θ^。COFIBA算法中的b向量相当于LinUCB算法中的C向量。 2. 通过一类物品的预测来提高探索的效率和稳定度(尤其是数据量大又缺失反馈时)应该是一个实际应用中常见的解决方式。COFIOBA 算法结合了2个比较不错的算法,有更好的理论基础和准确度。
    2018-04-13
    3
  • 虎虎
    有个地方没搞懂,推荐的时候做物品遍历,那么物品聚类的作用是什么呢?
    2018-07-01
    2
    2
  • 【【推荐系统】笔记 — Bandit 算法】https://mbd.baidu.com/ma/s/WVXrCQvl 和这个很像
    2021-03-27
    1
  • zhuangzhou
    本节cofiba步骤处讲的是:维护的是用户聚类参数,上节linUCB维护的是每个物品的参数,这么理解对吗老师?
    2019-08-19
  • shangqiu86
    感觉confiba算法实质上就是把linUCB算法中的当个用户,单个物品全部变成了用户簇,物品簇;信息茧房的问题,感觉真的是理论派的论文中比较多的提到,实际中好像并没有过多的去关注这个问题。不过我觉得要想不断的发展壮大,是需要对EE问题认真对待的。
    2019-05-05
    1
收起评论
大纲
固定大纲
信息茧房
COFIBA 算法
2. 细节
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部