基于实时计算(Flink)打造一个简单的实时推荐系统

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 本文为您介绍如何基于阿里云实时计算快速搭建实时推荐系统。

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秒的兴趣标签是汽车,那么直接去内容库里搜索含有汽车标签的内容并推送。

您也可以逐步替换各个组件,升级成一个完备和专业的实时推荐系统。


案例与解决方案汇总页:

阿里云实时计算产品案例&解决方案汇总

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
27天前
|
消息中间件 Java 关系型数据库
实时计算 Flink版操作报错合集之从 PostgreSQL 读取数据并写入 Kafka 时,遇到 "initial slot snapshot too large" 的错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
923 0
|
27天前
|
存储 SQL 关系型数据库
实时计算 Flink版操作报错合集之按时间恢复时,报错:在尝试读取binlog时发现所需的binlog位置不再可用,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
716 0
|
27天前
|
监控 Oracle 关系型数据库
实时计算 Flink版操作报错合集之在配置连接时,添加了scan.startup.mode参数后,出现报错。是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
816 0
|
27天前
|
消息中间件 Oracle 关系型数据库
实时计算 Flink版操作报错合集之连接RabbitMQ时遇到Could not find any factory for identifier 'rabbitmq' that implements 'org.apache.flink.table.factories.DynamicTableFactory'错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
401 0
|
27天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之CDC任务在异常后整个record sent从0初始化开始,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
518 0
|
27天前
|
Java 关系型数据库 流计算
实时计算 Flink版操作报错合集之配置cats进行从MySQL到StarRocks的数据同步任务时遇到报错,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
307 0
|
27天前
|
关系型数据库 数据库 流计算
实时计算 Flink版操作报错合集之在使用Flink CDC TiDB Connector时,无法获取到事件,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
379 0
|
27天前
|
消息中间件 资源调度 Java
实时计算 Flink版操作报错合集之遇到了缺少包的错误,已经添加了相应的 jar 包,仍然出现同样的报错,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
663 2
|
27天前
|
SQL JSON 数据库
实时计算 Flink版操作报错合集之写入Hudi时,遇到从 COW(Copy-On-Write)表类型转换为 MOR(Merge-On-Read)表类型时报字段错误,该怎么办
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
27天前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之遇到依赖问题该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
345 0

相关产品

  • 实时计算 Flink版