推荐系统学习笔记
一. 概要
推荐系统基本概念
可以将一个推荐系统简单地理解为给用户推荐实体或非实体物品的系统。其任务是根据用户和物品的特征,使用某种或某些推荐算法预测任意用户对任意物品的兴趣得分,并按照预测的得分顺序,将排在前列的物品展示给用户。
Tip:以小红书为例,物品为小红书笔记,后续统一使用物品进行描述。
转化流程
根据不同公司的不同产品,一般有不同的转化流程。流程中的动作意味着用户对物品感兴趣,这些动作意味着用户和物品产生了交互,可以作为**推荐系统使用的推荐依据。**转化流程一般分为三步,下图以小红书为例:
Tip:抖音没有点击流程。
常见的推荐系统评测指标
消费指标(短期消费指标) | 北极星指标(长期消费指标) |
---|---|
基于点击的指标:点击率 | 基于用户规模:日活用户数、月活用户数 |
基于反馈的指标:点赞率、收藏率、转发率 | 基于消费用户:人均使用推荐时长、人均阅读笔记数量 |
基于特定产品的指标:阅读完成率(文章) | 基于发布用户:发布渗透率、人均发布量 |
消费指标并不是推荐系统追求的根本目标,考察的关键应该放在北极星指标上。只关注追求极致的消费指标提升,最直接的影响就是导致推荐给用户的物品都是相似或相同的,显著减少了推荐的多样性,用户很难接触到感兴趣但新鲜的物品,长久以往用户活性降低,用户不断流失。在实践中,消费指标降低但是北极星指标提升也被认为是一种正向的趋势。
Tip:发布是小红书的核心竞争力。
推荐系统的实验流程
实验流程:离线实验 → 小流量A/B测试 → 全流量上线
离线实验:收集历史数据在其上做模型训练和测试,算法没有部署到产品中,没有跟用户交互。
小流量A/B测试:把算法部署到产品中,设置实验组与对照组使用新旧策略,算法与部分用户做交互。
全流量上线:A/B测试的新策略优于旧策略,就加大交互的用户流量,最后推全。
推荐系统的链路
推荐系统目标:从几亿物品中选取几十个物品推荐给用户。
推荐系统的链路:
召回:用多条召回通道(协同过滤、双塔模型、关注的作者等),先快速取回几千物品。
粗排:用小规 模神经网络,给几千篇物品打分,选出分数Top几百的物品。
精排:用大规模神经网络,给粗排选出的几百篇物品重新打分排序。
重排:多样性抽样从几百篇物品中挑选几十篇,依规则打散,并插入广告和运营物品,根据生态再调整排序。
Tip:召回通道实际上就是实现召回的模型方法,第二章节会详细介绍协同过滤、双塔模型和其他召回通道。
推荐系统的A/B测试
召回团队实现了一种新的召回通道,离线实验结果是正向的,下一步就需要做线上的小流量A/B测试。A/B测试启到如下作用:
- 考察新的召回通道对线上指标的影响;
- 测试选择模型的最优参数。
随机分桶
A/B测试需要设置对照组和实验组,对照组和实验组的实验通过随机分桶来实现。不妨设有全部 位用户,分成 个桶,每个桶有 位用户。随机分桶实现原理如下:
- 首先使用哈希函数将用户ID映射成某个区间内的整数,然后把这些整数均匀随机分成 个桶;
- 可以取其中若干个桶作为多个实验组采用不同的召回通道,再另取一个新桶为对照组使用原策略;
- 计算每个桶的业务指标;
- 如果某个实验组显著优于对照组,则说明对应的策略有效,值得推全。
Tip:从统计学角度出发,如果样本足够大,可以认为各个桶的特征相同。
分层实验
互联网大厂这种信息流公司有很多的团队和部门,需要同时负责推荐系统(召回、粗排、精排、重排)、用户界面、广告等业务的A/B测试。此时会遇到用户流量不够用的情况,分层实验是一项很好的举措:
分层:分成召回、粗排、精排、重排、用户界面、广告等等多个层。
同层互斥:某召回实验占用了召回层的 个桶,其他召回实验只能使用剩余的 个桶。
不同层正交:每一层独立随机对用户做分桶。每一层都可以独立使用全部桶的用户做实验。
基于以上原理,不妨以召回和召回的下一层(粗排层)为例说明。假设该系统有 个用户,召回层将用户分成了 个桶: