Datawhale推荐系统学习1-推荐系统概述

66 阅读5分钟

1.推荐系统的意义

  • 对平台方来说,推荐系统的出现使得原本的树状结构变成网络拓扑结构,能更高效地使用流量,比如提高用户选择某个商品路径的成交率。主要目的是留存用户,转化用户,提高用户转化率
  • 对信息生产者(物品而言),物品有长尾性和二八原则,绝大多数的用户的需求需要从那80%的长尾物品中去满足,但80%的销售额可能是那些最畅销20%的物品,推荐系统匹配需求和供给的能力决定了其最终的商业价值
  • 对信息消费者(用户)而言,推荐是一个通过惊喜提高平台转化额的方法

推荐和搜索的区别

广告算法是要“估得更准”,推荐算法是要整体上“排的更好”,搜索算法是要“搜的更全”

算法模型设计的区别上
  • 推荐算法的结果往往以列表的形式呈现,因此不用估的那么准,还要考虑多样性
  • 广告算法要预测“精准”的CTR和CVR,用于后续计算精确的出价
  • 强调搜索词的关键性,以及对搜索词的理解,一定程度上要抑制个性化的需求

推荐系统的应用

  • 电商首页推荐
  • 视频推荐
  • 饮食推荐
  • 音乐电台
  • 资讯、阅读

2.推荐系统架构

思考推荐系统架构考虑的第一个问题是确定边界:知道推荐系统要负责哪部分问题

2.1 系统架构

离线层、近线层、在线层

  1. 离线层:不用实时数据,不提供实时响应;

主要实现的功能模块:

  • 1.1 数据处理、数据存储;
  • 2.1 特征工程、离线特征计算;
  • 3.1 离线模型的训练;

特征:数据量级最大,主流做法是HDFS

优势:离线层有如下的优势:

  • 可以处理大量的数据,进行大规模特征工程;
  • 可以进行批量处理和计算;
  • 不用有响应时间要求;

缺点: 只使用用户离线数据,最大的不足就是无法反应用户的实时兴趣变化

  1. 近线层:使用实时数据,不保证实时响应;

特征:可以获得实时数据,然后快速计算提供服务,弥补离线层和在线层的不足,折中的产物 能解决的问题:

  • 特征的事实更新计算
  • 实时训练数据的获取
  • 模型实时训练
  1. 在线层:使用实时数据,保证实时在线服务

特征:直接面对用户,对响应延时有要求

主要的工作:

  1. 模型在线服务;包括了快速召回和排序;
  2. 在线特征快速处理拼接::根据传入的用户ID和场景,快速读取特征和处理;
  3. AB实验或者分流:根据不同用户采用不一样的模型,比如冷启动用户和正常服务模型;
  4. 运筹优化和业务干预:比如要对特殊商家流量扶持、对某些内容限流;

2.2 算法架构

召回、粗排、排序、重排

召回

召回主要考虑的内容有:

  1. 考虑用户层面:用户兴趣的多元化,用户需求与场景的多元化:例如:新闻需求,重大要闻,相关内容沉浸阅读等等
  2. 考虑系统层面:增强系统的鲁棒性;部分召回失效,其余召回队列兜底不会导致整个召回层失效;排序层失效,召回队列兜底不会导致整个推荐系统失效
  3. 系统多样性内容分发:图文、视频、小视频;精准、试探、时效一定比例;召回目标的多元化,例如:相关性,沉浸时长,时效性,特色内容等等
  4. 可解释性推荐一部分召回是有明确推荐理由的:很好的解决产品性数据的引入;

粗排

粗排可以理解为精排前的一轮过滤机制,减轻精排模块的压力,介于召回和精排之间

精排

所熟悉的算法很大一部分都来自精排层

特征: 精排中可以使用比粗排更多的特征,更复杂的模型和更精细的策略

精排和粗排层的基本目标是一致的,都是对商品集合进行排序,但是和粗排不同的是,精排只需要对少量的商品(即粗排输出的商品集合的topN)进行排序即可。

重排

常见的有三种优化目标:Point Wise、Pair Wise 和 List Wise。

重排序阶段对精排生成的Top-N个物品的序列进行重新排序,生成一个Top-K个物品的序列,作为排序系统最后的结果

混排

推荐流中插入广告、视频流中插入图文和banner

推荐系统技术栈

image.png

  • 文本理解
  • 关键词标签
  • 内容理解
  • 知识图谱

召回/粗排

  • 经典模型召回
  • 用户序列拆分
  • 知识图谱
  • 图模型

精排

  • 特征交叉模型
  • 序列模型
  • 多模态信息融合
  • 多任务学习
  • 强化学习
  • 跨域推荐

重排序

经典算法有:MRR、DPP、RNN等

工程

  • 编程语言:Python、Java(scala)、C++、sql、shell;
  • 机器学习:Tensorflow/Pytorch、GraphLab/GraphCHI、LGB/Xgboost、SKLearn;
  • 数据分析:Pandas、Numpy、Seaborn、Spark;
  • 数据存储:mysql、redis、mangodb、hive、kafka、es、hbase;
  • 相似计算:annoy、faiss、kgraph
  • 流计算:Spark Streaming、Flink
  • 分布式:Hadoop、Spark