入门推荐系统!

推荐系统本质上就是一个信息过滤系统,分为:召回、排序、重排序这3个环节。

每个环节逐层过滤,最终从海量的物料库中筛选出几十个用户可能感兴趣的物品推荐给用户。

img

应用场景

基于用户维度的推荐:

  • 根据用户的历史行为和兴趣进行推荐,比如淘宝首页的猜你喜欢、抖音的首页推荐等。

基于物品维度的推荐:

  • 根据用户当前浏览的标的物进行推荐,比如打开京东APP的商品详情页,会推荐和主商品相关的商品给你。

系统架构

img

数据源

  • 推荐算法所依赖的各种数据源,包括物品数据、用户数据、行为日志、其他可利用的业务数据、甚至公司外部的数据。

计算平台

  • 负责对底层的各种异构数据进行清洗、加工,离线计算和实时计算。

数据存储层

  • 存储计算平台处理后的数据,根据需要可落地到不同的存储系统中。

召回层

  • 包括各种推荐策略或者算法,比如经典的协同过滤,基于内容的召回,基于向量的召回,用于托底的热门推荐等。
  • 为了应对线上高并发的流量,召回结果通常会预计算好,建立好倒排索引后存入缓存中。

融合过滤层

  • 触发多路召回,由于召回层的每个召回源都会返回一个候选集,因此这一层需要进行融合和过滤。

排序层

  • 利用机器学习或者深度学习模型,以及更丰富的特征进行重排序,筛选出更小、更精准的推荐集合返回给上层业务。

从数据存储层到召回层、再到融合过滤层和排序层,候选集逐层减少,但是精准性要求越来越高。

因此也带来了计算复杂度的逐层增加,这个便是推荐系统的最大挑战。

详细流程

img

img

1、在终端进行埋点收集用户行为日志,存储到大数据平台。

2、集合业务数据,收集用户偏好行为数据,如:收藏、点赞、评论等,存储到大数据平台。

3、基于大数据平台的数据,通过一些算法对数据进行分析,得到一个训练模型

4、通过训练出来的模型,就可以获得相关的推荐数据。

5、把获得的推荐数据保存到MySQL/Redis等持久化工具中。

推荐引擎之特征和算法

对于推荐引擎来说,最核心的部分主要是:特征和算法。

特征计算由于数据量大,通常采用大数据的离线和实时处理技术,像Spark、Flink等。

然后将计算结果保存在Redis或者其他存储系统中(比如HBase、MongoDB或者ES),供召回和排序模块使用。

召回算法作用:

  • 从海量数据中快速获取一批候选数据,要求是快和尽可能的准。
  • 这一层通常有丰富的策略和算法,用来确保多样性,为了更好的推荐效果,某些算法也会做成近实时的。

排序算法作用:

  • 对多路召回的候选集进行精细化排序。
  • 它会利用物品、用户以及它们之间的交叉特征,然后通过复杂的机器学习或者深度学习模型进行打分排序。

协同过滤算法

协同过滤算法的核心就是找相似

它基于用户的历史行为(浏览、收藏、评论等),去发现用户对物品的喜好,并对喜好进行度量和打分,最终筛选出推荐集合。

基于用户的协同过滤

User-CF,核心是找相似的人。

用户 A 和用户 C 都购买过物品 A 和物品 B,那么可以认为 A 和 C 是相似的,因为他们共同喜欢的物品多。

这样,就可以将用户 A 购买过的物品 D 推荐给用户 C 。

基于物品的协同过滤

Item-CF,核心是找相似的物品。

物品 A 和物品 B 同时被用户 A,B,C 购买了,那么物品 A 和 物品 B 被认为是相似的,因为它们的共现次数很高。

这样,如果用户 D 购买了物品 A,则可以将和物品 A 最相似的物品 B 推荐给用户 D。

UserCF适用场景

在新闻网站中,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。

ItemCF适用场景

在图书、电子商务和电影网站,比如亚马逊、豆瓣、Netflix。