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