以小红书为例

1、推荐系统的基本概念

1.1 用户行为

点击(、有效点击)、阅读(、滑动到底)、点赞、收藏、转发、评论等

小红书推荐系统的转化流程
image.png

1.2 短期消费指标

短期消费指标可以反映用户对推荐是否满意

常见的短期消费指标

  • 点击率 = 点击次数 / 曝光次数
    • 点击率越高说明推荐越精准,给用户推荐了感兴趣的内容
    • 但也不能将点击率作为唯一的优化目标,否则骗点击的标题就会泛滥
  • 点赞率 = 点赞次数 / 点击次数
  • 收藏率 = 收藏次数 / 点击次数
  • 转发率 =转发次数 / 点击次数
  • 阅读完成率 = 滑动到底次数 / 点击次数 × f(笔记长度)
    • 归一化函数 f(·) 和笔记长度有关。因为笔记越长,完成阅读的比例就越低。如果没有归一化函数,对长笔记不公平

这些短期消费指标都是有意义的,但短期消费指标不是衡量推荐系统好坏的根本指标,一味追求这些短期消费指标是不对的

  • eg. 如果推荐算法只看用户短期兴趣,推很多用户最近感兴趣的内容,会让这些消费指标上涨,但这样的坏处是会竭泽而渔,用户很快失去兴趣,不再活跃。反过来,如果把多样性做好,尝试一些用户没看过的话题,那么点击率不会上涨,但是会有利于提高用户粘性,留住用户,让用户更活跃

1.3 北极星指标

北极星指标,即最关键的指标,是衡量推荐系统好坏的根本标准

  • 北极星指标都是线上指标,只能通过线上实验(小流量 AB 测试)获得,离线实验无法获得这些指标

小红书考察的北极星指标包括三类:

  1. 用户规模
    1. 日活用户数 DAU:同一个用户一天使用 1 次 or 多次小红书都只贡献 1 个 DAU
    2. 月活用户数 MAU:同一个用户一个月使用 1 次 or 多次小红书都只贡献 1 个 MAU
  2. 消费
    1. 人均使用推荐的时长
    2. 人均阅读笔记的数量
  3. 发布
    1. 发布渗透率
    2. 人均发布量:希望推荐系统能激励作者发布,让内容池变大,优质内容池是小红书的核心竞争力。
      1. 激励发布通常是由冷启动来负责

如果短期指标和北极星指标有冲突,应以北极星指标为准

  • eg. 把推荐系统的多样性做好,探索用户的兴趣,使得用户使用的时长增长,但是点击率下跌了,这完全 ok,这样的策略应该上线

1.4 实验流程

  1. 离线实验:用收集的历史数据做训练和测试
    1. 优点:做离线实验不需要将算法部署到产品中,没有跟用户实际交互,因此离线实验很容易做,不需要占用系统流量,也不会对系统和用户产生负面影响
    2. 缺点:离线实验没有线上实验靠谱,像最终判断算法的好坏,还是需要做线上实验
    3. 离线实验指标:见后续课程
  2. 小流量上线 AB 测试:将用户随机分为实验组和对照组,实验组用新策略,对照组用旧策略,对比两者的业务指标,判断新策略是否显著优于旧策略
    1. 上面提到的北极星指标都是线上指标,只能通过线上实验(小流量 AB 测试)获得,离线实验无法获得这些指标
    2. 其它指标离线若实验能获得,且离线实验指标提升,则需要开 AB 实验进一步验证是否有效
  3. 全流量上线:如果 AB 测试新策略显著优于旧策略,则加大流量,推全

2、推荐系统的链路

image.png

  1. 召回:(几亿物品 → 几千物品)从物品的数据库中快速取回一些物品
  • 用户刷新小红书时,系统会同时调用几十条召回通道,每条召回通道取回几十到几百篇笔记,一共取回几千篇笔记
  1. 粗排:(几千物品 → 几百物品)用规模比较小的机器学习模型给几千篇笔记逐一打分,按照分数做排序和截断,保留分数最高的几百篇笔记
  • 粗排后也会有一些规则来保证进入精排的笔记具有多样性
  1. 精排:(几百物品 → 几百物品(不做截断))用大规模的深度神经网络给几百篇笔记逐一打分,精排的分数反映出用户对笔记的兴趣,精排之后可以做截断,也可以不做截断,小红书的精排截断不做阶段,所有的几百篇笔记都带着精排分数进入重排
  2. 重排:(几百物品 → 几十物品)根据精排分数和多样性分数做随机抽样,得到几十篇笔记;然后将相似内容打散;并插入广告和运营内容

image.png

2.1 召回

推荐系统一般包含多条召回通道,常见的包括:

  • 协同过滤
  • 双塔模型
  • 关注的作者
  • … …

小红书的推荐系统包含几十条召回通道,每条召回通道取回几十到几百篇笔记,一共取回几千篇笔记。推荐系统会融合这些笔记,并做去重和过滤

  1. 融合
  2. 去重
  3. 过滤:排除掉用户不喜欢的作者、不喜欢的笔记、不喜欢的话题等

2.2 排序:粗排→精排→重排

排序流程:

  1. 粗排:用比较简单的模型快速给几千篇笔记打分,保留分数最高的几百篇笔记
  • 为什么需要粗排
    • 排序要用机器学习模型预估用户对笔记的兴趣,保留分数最高的笔记,如果直接用一个大规模的神经网络逐一对几千篇笔记打分,花费的代价会很大。为了解决计算量的问题,通常将排序分为粗排和精排两部分,以较好地平衡计算量和准确性
    • 当候选物品只有几百个时,才能用大规模神经网络做精排,才能用 DPP 这样的方法做多样性抽样(重排)
  1. 精排:用一个较大的神经网络给几百篇笔记打分,在小红书这里不用做截断,因此保留全部的几百篇笔记,每篇笔记带有一个精排分数,代表户对笔记的感兴趣程度
    1. 优点:精排模型比粗排模型大很多,用的特征也更多,因此精排模型的打分更可靠
    2. 缺点:竞拍模型的计算量很大,因此需要用粗排先做筛选,筛选出较小的候选集交给精排模型
  2. 重排:重排的结果就是最终展示给用户的物品,比如呈现的是 top 80 的物品,其中包含了笔记和广告。重排的三个目的和流程:
    1. 先根据多样性做随机抽样,从几百篇笔记中选出几十篇
    • 重排主要是考虑多样性
    • 多样性抽样的常见方法:MMR、DPP
    • 抽样的两个依据:
      • 精排分数的大小
      • 多样性
    1. 然后用规则将内容相似的笔记打散,不能将内容过于相似的笔记排在相邻的位置上
    • eg. 根据精排分数排在前 5 的笔记都是关于 NBA 的,这样就不太合适,即使用户是个篮球迷,也未必希望看到同质化的内容。如果排第一的是 NBA 的笔记,那么接下来几个位置就不能放 NBA 的内容,相似的笔记会往后挪重排的
    1. 插入广告、运营推广内容,并根据生态要求调整排序
    • eg. 不能连着推很多美女图片

粗排和精排

  • 区别:精排模型更大,用的特征更多
  • 模型的输入:
    • 用户特征
    • 候选物品特征
    • 统计特征
  • 模型的输出:对一篇笔记的打分。包括点击率、点赞率、收藏率、转发率等,都是神经网络对用户行为的预估,判断用户对某篇笔记是否感兴趣。将点击率、点赞率、收藏率、转发率等多个预估值融合(eg. 加权和)得到最终的分数
    • 模型打分决定了笔记会不会展现给用户,以及笔记展示的位置靠前还是靠后

image.png