1.推荐系统的意义
- 对平台方来说,推荐系统的出现使得原本的树状结构变成网络拓扑结构,能更高效地使用流量,比如提高用户选择某个商品路径的成交率。主要目的是留存用户,转化用户,提高用户转化率
- 对信息生产者(物品而言),物品有长尾性和二八原则,绝大多数的用户的需求需要从那80%的长尾物品中去满足,但80%的销售额可能是那些最畅销20%的物品,推荐系统匹配需求和供给的能力决定了其最终的商业价值
- 对信息消费者(用户)而言,推荐是一个通过惊喜提高平台转化额的方法
推荐和搜索的区别
广告算法是要“估得更准”,推荐算法是要整体上“排的更好”,搜索算法是要“搜的更全”
算法模型设计的区别上
- 推荐算法的结果往往以列表的形式呈现,因此不用估的那么准,还要考虑多样性
- 广告算法要预测“精准”的CTR和CVR,用于后续计算精确的出价
- 强调搜索词的关键性,以及对搜索词的理解,一定程度上要抑制个性化的需求
推荐系统的应用
- 电商首页推荐
- 视频推荐
- 饮食推荐
- 音乐电台
- 资讯、阅读
2.推荐系统架构
思考推荐系统架构考虑的第一个问题是确定边界:知道推荐系统要负责哪部分问题
2.1 系统架构
离线层、近线层、在线层
- 离线层:不用实时数据,不提供实时响应;
主要实现的功能模块:
- 1.1 数据处理、数据存储;
- 2.1 特征工程、离线特征计算;
- 3.1 离线模型的训练;
特征:数据量级最大,主流做法是HDFS
优势:离线层有如下的优势:
- 可以处理大量的数据,进行大规模特征工程;
- 可以进行批量处理和计算;
- 不用有响应时间要求;
缺点: 只使用用户离线数据,最大的不足就是无法反应用户的实时兴趣变化
- 近线层:使用实时数据,不保证实时响应;
特征:可以获得实时数据,然后快速计算提供服务,弥补离线层和在线层的不足,折中的产物 能解决的问题:
- 特征的事实更新计算
- 实时训练数据的获取
- 模型实时训练
- 在线层:使用实时数据,保证实时在线服务
特征:直接面对用户,对响应延时有要求
主要的工作:
- 模型在线服务;包括了快速召回和排序;
- 在线特征快速处理拼接::根据传入的用户ID和场景,快速读取特征和处理;
- AB实验或者分流:根据不同用户采用不一样的模型,比如冷启动用户和正常服务模型;
- 运筹优化和业务干预:比如要对特殊商家流量扶持、对某些内容限流;
2.2 算法架构
召回、粗排、排序、重排
召回
召回主要考虑的内容有:
- 考虑用户层面:用户兴趣的多元化,用户需求与场景的多元化:例如:新闻需求,重大要闻,相关内容沉浸阅读等等
- 考虑系统层面:增强系统的鲁棒性;部分召回失效,其余召回队列兜底不会导致整个召回层失效;排序层失效,召回队列兜底不会导致整个推荐系统失效
- 系统多样性内容分发:图文、视频、小视频;精准、试探、时效一定比例;召回目标的多元化,例如:相关性,沉浸时长,时效性,特色内容等等
- 可解释性推荐一部分召回是有明确推荐理由的:很好的解决产品性数据的引入;
粗排
粗排可以理解为精排前的一轮过滤机制,减轻精排模块的压力,介于召回和精排之间
精排
所熟悉的算法很大一部分都来自精排层
特征: 精排中可以使用比粗排更多的特征,更复杂的模型和更精细的策略
精排和粗排层的基本目标是一致的,都是对商品集合进行排序,但是和粗排不同的是,精排只需要对少量的商品(即粗排输出的商品集合的topN)进行排序即可。
重排
常见的有三种优化目标:Point Wise、Pair Wise 和 List Wise。
重排序阶段对精排生成的Top-N个物品的序列进行重新排序,生成一个Top-K个物品的序列,作为排序系统最后的结果
混排
推荐流中插入广告、视频流中插入图文和banner
推荐系统技术栈
- 文本理解
- 关键词标签
- 内容理解
- 知识图谱
召回/粗排
- 经典模型召回
- 用户序列拆分
- 知识图谱
- 图模型
精排
- 特征交叉模型
- 序列模型
- 多模态信息融合
- 多任务学习
- 强化学习
- 跨域推荐
重排序
经典算法有: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