1.背景
对个人来说,推荐系统起着信息过滤的作用;对Web/App来说,推荐系统起着满足用户个性化需求,提升用户满意度的作用。亚马逊推荐产生的成交额占其GMV的30%以上;Netflix推荐系统每年帮其节省了近10亿美金的业务费用。
推荐系统越来越实时化。当一个会员访问Netflix,Netflix希望能够帮助他在几秒钟之内就找到他感兴趣的影片,以免他去寻找别的娱乐方式。
下文为您介绍如何基于阿里云实时计算快速搭建一套实时推荐系统。
2.概述
推荐就是把用户的兴趣与物品做链接。但通常情况下,用户和物品之前不会有直接的关系(比如用户根本没看过这个物品,自然也不会有浏览、点击、收藏、喜欢等联系),需要一些中间元素来做桥接。
根据中间元素的不同,推荐的思路大概分下面三类:
- 物品:推荐和用户过去喜欢的物品相识的物品;
- 用户:推荐和当前用户兴趣相近的用户喜欢过的物品;
- 特征:推荐符合用户过去喜欢的物品特征的物品。
本文重点介绍基于特征的推荐:基于标签的实时推荐。
标签是特征的一种表现形式,标签再弱化一些,就是类别。
说明:
- 基于标签的推荐其实应用很普遍,比如豆瓣,比如淘宝,都用到了大量的标签,这样的推荐系统有很多优点,比如实现简单、可解释性好等等。
- 以上部分描述重点参考了:《推荐系统实践》,作者:项亮。
一个简单的基于标签的实时推荐系统大概分三部分:
- 标签系统
- 数据流处理系统
- 根据用户标签筛选出要推荐的内容
作为示例,假设业务需求描述为: 用户最近点击了什么样的内容,把类似的内容推荐给他。
说明:
上图绿色实线部分是在线的实时流,蓝色虚线部分是离线计算的非实时部分。
3.标签系统
标签系统就是俗称的用户画像。 从属性变化性质来分,标签系统可分为静态标签和动态标签:
- 静态标签: 短时间内变化不大的标签,比如性别、地域、职业、生活习惯等;
- 动态标签: 不断变化的行为标签,比如关注的产品类别、产品偏好、内容偏好等 从更新时间的频率上来说,又可以分为短期兴趣标签和长期用户标签。
说明:
- 短期标签的更新频率是分钟级或秒级。
- 短期标签的更新频率是分钟级或秒级。
在这个简化的推荐系统里,我们只考虑实时部分(绿色实线部分)是可以满足需求的。 所以只考虑短期兴趣标签的计算,还是出于简化问题的考虑,我们假设现在只有四个标签,描述用户对内容类别的感兴趣程度:美妆、汽车、衣服、电子产品。 对一个用户来说,可以用0-1的浮点值来描述其感兴趣程度(也可以更简化,大于某个阈值为1,小于某个阈值为0)。
4.数据流处理系统(实时)
主要是绿色实线部分,针对系统推荐的内容。
用户有两种行为,点击或不点击,这个事件推送到实时计算(其实是两个流,一个是点击流,一个是曝光流,这两个流根据用户ID、内容ID做J)。
实时计算实时计算过去N秒(N可以根据业务需求取值,比如60,这就是一个事件窗口)内每个用户针对四种内容类别的点击率,然后把这个点击率作为用户的短期兴趣标签。
比如用户a:
{
美妆:0.2,
汽车:0.1,
衣服:0.02,
电子产品:0.5
}
5.内容筛选系统
内容筛选系统就是根据用户的短期兴趣标签去筛选内容。 假设所有的内容都存储到某个数据库里,并打好了内容标签。 比如文档1:
{
美妆:0.3,
汽车:0.5,
衣服:0.8,
电子产品:0.1
}
文档2:
{
美妆:0.4,
汽车:0.2,
衣服:0.1,
电子产品:0.7
}
推荐流程是:用户发起访问⇒找到用户短期兴趣标签⇒计算文档与用户标签的相似度⇒相似度排序⇒展示内容。
6.总结
上文描述了一个简单的基于实时计算的实时推荐系统。
还可以进一步简化:把所有的0-1区间内的值替换成0或1。这样,每个用户的兴趣标签只有是否,文章的标签也是确定的。直接用搜索的方式就能完成内容筛选部分。比如当前用户最近60秒的兴趣标签是汽车,那么直接去内容库里搜索含有汽车标签的内容并推送。
您也可以逐步替换各个组件,升级成一个完备和专业的实时推荐系统。
案例与解决方案汇总页: