重排:多样性算法

一、推荐系统中的多样性

如果多样性做得好,可以显著提升推荐系统的核心业务指标。

1.1 物品相似性的度量

  • 基于物品属性标签。
    • 类⽬、品牌、关键词……
  • 基于物品向量表征。
    • ⽤召回的双塔模型学到的物品向量(不好)。
    • 基于内容的向量表征(好)。

基于物品属性标签

  • 物品属性标签:类⽬、品牌、关键词……
  • 根据⼀级类⽬、⼆级类⽬、品牌计算相似度。
    • 物品:美妆、彩妆、⾹奈⼉。
    • 物品:美妆、⾹⽔、⾹奈⼉。
    • 相似度:

双塔模型的物品向量表征

双塔模型的物品向量用在多样性问题上效果一般

  • 因为推荐系统的头部现象很严重,曝光和点击都集中在少数物品
  • 新物品和长尾物品的曝光和点击次数都很少,双塔模型学不好它们的向量表征

基于图文内容的物品表征

用在多样性问题上最好的办法还是基于图文内容的向量表征。

  • CLIP[1]是当前公认最有效的预训练⽅法。
  • 思想:对于图⽚—⽂本⼆元组,预测图⽂是否匹配。
图1
图2
  • ⼀个batch内有对正样本。
  • ⼀张图⽚和条⽂本组成负样本。
  • 这个batch内⼀共有对负样本。

1.2 提升多样性的⽅法

  • 粗排和精排⽤多⽬标模型对物品做pointwise打分。
  • 对于物品,模型输出点击率、交互率的预估,融合成分数
  • 表⽰⽤户对物品的兴趣,即物品本⾝价值。
  • 给定个候选物品,排序模型打分
  • 个候选物品中选出个,既要它们的总分⾼,也需要它们有多样性。

  • 重排决定了个候选物品中有哪个最终获得曝光以及个物品展示给用户的顺序
  • 粗排的后处理往往被大家忽视
  • 粗排之后的多样性算法也能提升业务指标:优化粗排之后的多样性显著提升了用户使用推荐的时长和留存

二、Maximal Marginal Relevance (MMR)

MMR根据精排打分和物品相似度,从 个物品中选出 个价值高、且多样性好的物品。MMR是从搜索排序中来的,所以名字里有relevance这个词(搜索的结果主要就是根据相关性做排序)。

多样性

  • 精排给个候选物品打分,融合之后的分数为
  • 把第个物品的相似度记作
  • 个物品中选出个,既要有⾼精排分数,也要有多样性。

3.1 MMR多样性算法

计算集合中每个物品的Marginal Relevance分数:

  • :物品的精排分数
  • : 物品的多样性分数
  • :0和1之间的参数,平衡物品的价值和多样性,越大则物品价值对排序的影响越大,多样性对物品排序的影响越小
  • MMR:

MR平衡物品的价值和多样性:

  • 既考虑物品本身的质量
  • 也会抑制和已选中物品相似的物品

算法流程:

  1. 已选中的物品初始化为空集,未选中的物品初始化为全集
  2. 选择精排分数 最⾼的物品,从集合移到
  3. 轮循环:
    1. 计算集合中所有物品的分数
    2. 选出分数最⾼的物品,将其从移到

3.2 滑动窗口

MMR:

上述方法缺点:

  • 已选中的物品越多(即集合越⼤),越难找出物品,使得中的物品都不相似。
  • 设sim的取值范围是[0, 1]。当很⼤时,多样性分数总是约等于1,导致MMR 算法失效。
  • 解决⽅案:设置⼀个滑动窗⼝,⽐如最近选中的10个物品,⽤代替MMR 公式中的

⽤滑动窗⼝的MMR:

  • 只考虑未选中物品与滑动窗口中物品的相似性
  • 工业界实际的重排都会使用滑动窗口滑动窗口
  • 有个很直观的解释,给用户曝光的物品应当具有多样性,也就是说物品两两之间不相似,但没有必要让第三十个物品跟第一个物品不相似,用户看到第三十个物品的时候大概率已经忘记了第一个物品是什么,两个离得远的物品可以相似,相似也不会影响用户体验

三、业务规则

推荐系统有很多业务规则,比如不能连续出多篇某种类型的物品、某两种类型的物品文章间隔多少。这些业务规则应用在重排阶段,可以与 MMR、DPP 等多样性算法相结合。

规则:最多连续出现𝑘 篇某种文章

  • 一般推荐系统的物品分为图⽂和视频。
  • 假设最多连续出现篇图⽂,最多连续出现篇视频。
  • 如果排的全都是图⽂,那么排在的必须是视频。

规则:每篇文章最多出现1篇某种文章

  • 运营推广文章的精排分会乘以⼤于1的系数(boost),帮助文章获得更多曝光。
  • 为了防⽌boost 影响体验,限制每篇文章最多出现1篇运营推广文章。
  • 如果排第位的是运营推广文章,那么排的不能是运营推广文章。

规则:前篇文章最多出现篇某种文章

  • 排名前篇文章最容易被看到,对⽤户体验最重要。(一般top 4为⾸屏)
  • 推荐系统有带电商卡⽚的文章,过多可能会影响体验。
  • 篇文章最多出现篇带电商卡⽚的文章。
  • 篇文章最多出现篇带电商卡⽚的文章。

MMR + 重排规则

  • 重排结合MMR 与规则,在满⾜规则的前提下最⼤化MR。
  • 每⼀轮先⽤规则排除掉 中的部分物品,得到⼦集
  • MMR 公式中的替换成⼦集,选中的物品符合规则。

引入规则,保护用户体验规则的优先级高于多样性算法。

四、determinantal point process (DPP)[2]

行列式点过程 (determinantal point process, DPP) 是一种经典的机器学习方法,在 1970's 年代提出,在 2000 年之后有快速的发展。DPP 是目前推荐系统重排多样性公认的最好方法。

4.1 数学基础

4.1.1 超平行体

  • 2维空间的超平⾏体为平⾏四边形。
  • 平⾏四边形中的点可以表⽰为:

  • 系数取值范围是
图1
图2
  • 3维空间的超平⾏体为平⾏六⾯体。
  • 平⾏六⾯体中的点可以表⽰为:

  • 系数取值范围是

更高纬度:

  • ⼀组向量可以确定⼀个维超平⾏体:

  • 要求 ,比如维空间中有维平⾏四边形。
  • 如果线性相关,则体积。(例:有个向量,落在⼀个平⾯上,则平⾏六⾯体的体积为0。)

4.1.2 平行四边形的面积

  • 为底,计算⾼,两个向量必须正交。

为底,如何计算

  • 计算上的投影:

  • 计算Proj_{v_1}(v_2)$
  • 性质:底与高正交。

为底,如何计算

  • 计算上的投影:

  • 计算
  • 性质:底与高正交。

4.1.3 平行六面体的体积

  • 平⾏四边形是平⾏六⾯体的底。
  • 垂直于底.

体积何时最⼤化、最⼩化?

  • 都是单位向量。
  • 当三个向量正交时,平⾏六⾯体为正⽅体,体积最⼤化,
  • 当三个向量线性相关时,体积最⼩化,

衡量物品多样性

  • 给定个物品,把它们表征为单位向量。()
  • ⽤超平⾏体的体积衡量物品的多样性,体积介于0和1之间。
  • 如果两两正交(多样性好),则体积最⼤化,
  • 如果线性相关(多样性差),则体积最⼩化,

  • 给定个物品,把它们表征为单位向量。()
  • 把它们作为矩阵 的列。
  • ,⾏列式与体积满⾜:

  • 因此,可以⽤⾏列式衡量向量的多样性。

4.2 DPP

4.2.1 多样性问题

  • 精排给个候选物品打分,融合之后的分数为
  • 个物品的向量表征:
  • 个物品中选出个物品,组成集合
    • 价值⼤:分数之和越⼤越好。
    • 多样性好:个向量组成的超平形体的体积越大越好。

  • 集合中的个物品的向量作为列,组成矩阵
  • 以这个物品的向量作为边,组成超平形体
  • 体积可以衡量中物品的多样性
  • ,⾏列式与体积满⾜:

4.2.2 DPP

DPP是目前推荐系统领域公认最好的多样性算法,工业界的推荐系统大多使用类似的方法。DPP多样性算法:最大化超平行体体积(最理想情况:t物品向量两两正交,则两两之间的相似度最小)。

  • DPP是⼀种传统的统计机器学习⽅法:

  • Hulu的论⽂[3]将DPP应⽤在推荐系统:

DPP应⽤在推荐系统

  • 的矩阵,它的元素为
  • 给定向量,需要时间计算
  • 的一个的子矩阵。如果,则的一个元素

  • DPP是个组合优化问题,从集合中选出⼀个⼤⼩为的子集
  • 表⽰已选中的物品,⽤表⽰未选中的物品,贪⼼算法求解:

用DPP每次选出未选中物品中分数最大的

4.3 求解DPP

4.3.1 暴力算法

  • 贪⼼算法求解:

  • 对于单个,计算的⾏列式需要时间
  • 对于所有的,计算⾏列式需要时间
  • 需要求解上式次才能选出个物品。如果暴⼒计算⾏列式,那么总时间复杂度为

  • 暴⼒算法的总时间复杂度为

:计算矩阵的时间
:计算行列式的时间的量级是几百,的量级都是几十这个时间复杂度看起来OK,但其实不可行,因为系统留给多样性算法的时间也就是10毫秒左右,这个算法太慢了

4.3.2 Hulu的快速算法

Hulu的论⽂设计了⼀种数值算法,仅需的时间从个物品中选出个物品。

  • 给定向量,需要时间计算
  • 时间计算所有的⾏列式(利⽤Cholesky 分解)。

Cholesky 分解

  • Cholesky 分解,其中是下三⾓矩阵(对⾓线以上的元素全零)。
  • Cholesky 分解可供计算的⾏列式。
    • 下三⾓矩阵的⾏列式等于对⾓线元素乘积。
    • 的⾏列式
  • 已知,则可以快速求出所有的Cholesky分解,因此可以快速算出所有的⾏列式。

贪⼼算法求解:

  • 初始时中只有⼀个物品,的矩阵

  • 每⼀轮循环,基于上⼀轮算出的,快速求出的Cholesky 分解(),从⽽求出

  • 已知矩阵的Cholesky分解,那么给添加一行和一列不需要重新算一遍Cholesky分解,否则代价很大。

  • 添加一行和一列,Cholesky分解的变化非常小,有办法快速算出变化的地方,这样就不用完整算-遍Cholesky分解

4.4 DPP的扩展

4.4.1 滑动窗口

  • 表⽰已选中的物品,⽤表⽰未选中的物品,DPP的贪⼼算法求解:

  • 随着集合增⼤,其中相似物品越来越多,物品向量会趋近线性相关。
  • ⾏列式 会坍缩到零,对数趋于负无穷。

⽤滑动窗⼝的:

4.4.2 规则约束

  • 贪⼼算法每轮从中选出⼀个物品:

  • 有很多规则约束,例如最多连续出5篇视频(如果已经连续出了5篇视频,下⼀篇必须是图⽂)。

  • ⽤规则排除掉中中的部分物品,得到⼦集,然后求解:



重排:多样性算法
https://mztchaoqun.com.cn/posts/D74_ReRank/
作者
mztchaoqun
发布于
2025年6月10日
许可协议