1 优化目标&评价指标

UGC 比 PGC 更难,因为用户上传的内容质量良莠不齐,而且量很大,很难用人工去评判,很难让运营人员去调控。

为什么要特殊对待新笔记?因为新笔记刚刚那个发布,缺少与⽤户的交互,导致推荐的难度⼤、效果差。此外,扶持新发布、低曝光的笔记,可以增强作者发布意愿。

优化冷启的目标:

  1. 精准推荐:克服冷启的困难,把新笔记推荐给合适的⽤户,不引起用户反感。
  2. 激励发布:流量向低曝光新笔记倾斜,激励作者发布。
  3. 挖掘高潜:通过初期⼩流量的试探,找到⾼质量的笔记,给予流量倾斜。

冷启动的评价指标主要包含作者侧、用户侧和内容侧:

  1. 作者侧指标:发布渗透率、⼈均发布量。
  2. ⽤户侧指标:
    • 新笔记指标:新笔记的点击率、交互率。
    • ⼤盘指标:消费时长、⽇活、⽉活。
  3. 内容侧指标:⾼热笔记占⽐,可以反应出冷启是否能挖掘出优质笔记

作者侧和用户侧指标是工业界通用的,技术比较好的大厂都会用这两类指标。内容侧指标只有少数几家在用。

冷启动的优化点为优化全链路(包括召回和排序)和流量调控(流量怎么在新物品、老物品中分配)。

1.1 作者侧指标

作者侧指标主要有发布渗透率和人均发布量。

1.1.1 发布渗透率

发布渗透率 = 当日发布人数 / 日活人数

在某一天,用户成为作者的比例就称为发布渗透率。一个用户只要发布⼀篇或以上,就算⼀个发布⼈数。

例如,当⽇发布⼈数 = 100万,⽇活⼈数 = 2000万,则发布渗透率 = 100 / 2000 = 5%。

1.1.2 人均发布量

⼈均发布量 = 当⽇发布笔记数 / ⽇活⼈数

例如,每⽇发布笔记数 = 200万,⽇活⼈数 = 2000万,则⼈均发布量 = 200 / 2000 = 0.1。

有时,一个作者一天可能发布多个笔记,这不影响发布渗透量,但是会影响人均发布量。

发布渗透率、⼈均发布量反映出作者的发布积极性。冷启的重要优化⽬标是提高作者的积极性,促进发布,增⼤内容池。新笔记获得的曝光越多,⾸次曝光和交互出现得越早,作者发布积极性越⾼。所以要把流量向新笔记倾斜,让新笔记获得更多的曝光。同时也要优化新笔记的链路,让新笔记出现交互尽量快。

1.2 用户侧指标

用户侧指标主要有新笔记的消费指标和大盘指标。

1.2.1 新笔记的消费指标

新笔记的的消费指标主要有点击率、交互率。但是由于曝光的基尼系数很⼤,少数头部新笔记占据了⼤部分的曝光。整体的消费指标不能反映出大部分新笔记的情况。

所以最好是把⾼曝光和低曝光新笔记分开,分别考察它们的消费指标:

  • ⾼曝光:⽐如 > 1000 次曝光
  • 低曝光:⽐如 < 1000 次曝光

1.2.2 大盘消费指标

另一类用户侧指标是大盘消费指标,也就是不区分新笔记和老笔记,做新笔记推荐的实验的时候,要考虑⼤盘的消费时长、⽇活、⽉活等指标。

在优化冷启时,不是要提高大盘的消费指标,而是要确保新的策略不会显著伤害大盘的指标。

大力扶持低曝光新笔记会发⽣什么?

  1. 作者侧发布指标变好
  2. ⽤户侧⼤盘消费指标变差

1.3 内容侧指标

还有一类叫做内容侧指标,有的大厂会考察此类指标。内容侧指标主要是高热笔记占比,⾼热笔记可以定义为前 30 天获得 1000+ 次点击。

⾼热笔记占⽐越⾼,说明冷启阶段挖掘优质笔记的能力越强。


2 简单的召回通道

新笔记⾃带图⽚、⽂字、地点以及算法或⼈⼯标注的标签。但是新笔记没有⽤户点击、点赞等信息,同时也没有笔记 ID embedding,缺少这个特征会对召回带来很大的困难。

冷启召回的困难:

  1. 缺少⽤户交互,还没学好笔记 ID embedding,导致双塔模型效果不好。
  2. 缺少⽤户交互,导致 ItemCF 不适⽤。

ItemCF 不适⽤于物品冷启动

ItemCF 做召回的原理是判断两篇笔记的相似度有多高,要根据与笔记交互过的用户来判定两篇笔记的相似度。下图中红色框内的用户与两篇笔记都有交互,是重合的。两个笔记的用户重合度越高,说明两篇笔记的相似度越高。

但是新笔记还没有和任何用户进行交互,所以不能计算和其他笔记的相似度,所以 ItemCF 不适用于冷启动。

召回通道:

  1. ItemCF召回(不适⽤)
  2. 双塔模型(改造后适⽤)
  3. 类⽬、关键词召回(适⽤):在笔记刚发布时最有用
  4. 聚类召回(适⽤)
  5. Look-Alike召回(适⽤)

2.1 双塔模型

由于新笔记的 ID Embedding 需要从用户和笔记的交互中学习,但是新笔记还没有和用户交互过,所以这个嵌入还没有学好,直接用双塔模型做新笔记的召回效果不是很好。

2.1.1 ID Embedding

改进方案 1:新笔记使⽤ default embedding。

物品塔做 ID embedding 时,让所有新笔记共享⼀个 ID,⽽不是⽤⾃⼰真正的 ID。

Default embedding:共享的 ID 对应的 embedding向量。这个默认嵌入是学出来的,而不是全零初始化或默认初始化。新笔记发布之后逐渐会有点击和交互,到下次模型训练的时候,新笔记才有⾃⼰的 ID embedding 向量。

改进案 2:利⽤相似笔记 embedding 向量。

查找 top k 内容最相似的⾼曝笔记。把 $k$ 个⾼曝笔记的 embedding 向量取平均,作为新笔记的 embedding。之所以用高曝光笔记,是因为它们的 ID embedding 学的比较好。

2.1.2 多个向量召回池

多个召回池,让新笔记有更多曝光机会。

  • 1 小时新笔记
  • 6 小时新笔记
  • 24 小时新笔记
  • 30 天笔记

上面这些召回池都共享同⼀个双塔模型,那么多个召回池不增加训练的代价。

2.2 类目召回

凡是做信息流社交电商的互联网公司,都是维护每一个用户的画像,画像中记录了用户的兴趣点,比如感兴趣的类目和关键词。这些类目和关键词可以用于召回。

系统维护类⽬索引:类目 → 笔记列表(按时间倒排),要用这个索引召回新笔记。之后在做召回时,取出用户感兴趣的类目。然后用类目索引做召回:用户画像 → 类目 → 笔记列表,取回笔记列表上前 k 篇笔记(即最新的 k 篇)。

2.3 关键词召回

关键词召回和类目召回类似,唯一的区别是用关键词代替类目。系统维护关键词索引:关键词 → 笔记列表(按时间倒排),然后根据⽤户画像上的关键词做召回。

类目召回和关键词召回的缺点:

  1. 只对刚刚发布的新笔记有效:取回某类目/关键词下最新的 $k$ 篇笔记,发布几小时之后,就再没有机会被召回
  2. 弱个性化,不够精准:按照用户感兴趣的类目或关键词是很宽泛的

3 聚类召回

聚类召回在物品冷启动的时候特别有用。

3.1 基本思想

如果⽤户喜欢⼀篇笔记,那么他会喜欢内容相似的笔记。可以事先训练⼀个神经⽹络,基于笔记的类⽬和图⽂内容,把笔记映射到向量。

对笔记向量做聚类,划分为 1000 cluster,记录每个 cluster 的中⼼⽅向(k-means 聚类,⽤余弦相似度)。

3.1.1 聚类索引

当⼀篇新笔记发布之后,⽤神经⽹络把它映射到⼀个特征向量。然后把这个向量从 1000 个向量(对应 1000 个 cluster)中找到最相似的向量,作为新笔记的 cluster。

把新笔记的 ID 添加到索引上,索引是从 cluster 到笔记 ID 列表(按时间倒排)。

3.1.2 线上召回

当用户在刷小红书发起推荐请求,此时系统根据⽤户ID,找到他的 last-n 交互的笔记列表,把这些笔记作为种子笔记,去召回相似的笔记。

用神经网络把每篇种⼦笔记映射到向量,寻找最相似的cluster(这样知道了⽤户对哪些 cluster 感兴趣)。之后从每个 cluster 的笔记列表中,取回最新发布的 $m$ 篇笔记,最多取回 $mn$ 篇笔记。

3.2 内容相似度模型

3.2.1 提取图文特征

用 CNN 提取图片的特征输出一个向量,用 BERT 提取文字的特征输出一个向量,把这两个向量做拼接,然后输入全连接层,最后得到笔记的特征向量。这个向量是对笔记图文特征的表征。

3.2.2 两篇笔记内容相似度

把左边的笔记送入刚才的神经网络,得到这个笔记的特征向量 $a$,同样的操作,把右边的笔记也送入神经网络,得到特征向量 $b$,这两个神经网络是相同的。

最后计算向量 $a$ 和 $b$ 的余弦相似度 $\cos (a, b)$。

3.2.3 训练内容相似度模型

每个训练样本都是一个三元组:< 正样本,种子样本,负样样本 >。把这三个样本送入神经网络,神经网络的参数都是相同的,然后得到向量 $b^+$、$a$ 和 $b^-$,分别计算 $\cos \left(\mathrm{a}, \mathrm{b}^{+}\right)$ 和 $\cos \left(\mathrm{a}, \mathrm{b}^{-}\right)$。

做训练的目标:鼓励 $\cos \left(a, b^{+}\right)$ 大于 $\cos \left(a, b^{-}\right)$

Triplet hinge loss:

$$
L\left(\mathbf{a}, \mathbf{b}^{+}, \mathbf{b}^{-}\right)=\max \left{0, \cos \left(\mathbf{a}, \mathbf{b}^{-}\right)+m-\cos \left(\mathbf{a}, \mathbf{b}^{+}\right)\right}
$$

Triplet logistic loss:

$$
L\left(\mathbf{a}, \mathbf{b}^{+}, \mathbf{b}^{-}\right)=\log \left(1+\exp \left(\cos \left(\mathbf{a}, \mathbf{b}^{-}\right)-\cos \left(\mathbf{a}, \mathbf{b}^{+}\right)\right)\right)
$$

3.2.4 正负样本的选取

< 种子笔记,正样本 >

方法一:人工标注⼆元组的相似度,但是人工标注的代价太大

方法二:算法⾃动选正样本,可以设置如下的筛选条件

  1. 只⽤⾼曝光笔记作为⼆元组(因为有充⾜的⽤户交互信息)
  2. 两篇笔记有相同的⼆级类⽬,⽐如都是“菜谱教程”

最后用⽤ ItemCF 的物品相似度选正样本。

< 种子笔记,负样本 >

负样本的选择很容易,直接从全体笔记中随机选出下列满足条件的即可:

  1. 字数较多(神经网络提出的文本信息有效)
  2. 笔记质量高,避免图文无关

3.3 总结

基本思想:根据⽤户的点赞、收藏、转发记录,推荐内容相似的笔记。

  • 线下训练:多模态神经⽹络把图⽂内容映射到向量
  • 线上服务:用户喜欢的笔记 → 特征向量 → 最近的 Cluster → 新笔记