推荐结果千人一面:MMR多样性重排的落地效果
信息流推荐上线精排模型后,CTR确实涨了,但用户调研里"越刷越同质"的抱怨变多:连刷二十条都是同一话题,趣味性塌了。精排模型追求每条分数最大化,天然倾向堆同类高分内容。加了一层MMR重排,记录方案和效果。
MMR即最大边际相关,思想是贪心地做平衡:每选一条内容,既要求它和用户兴趣相关,又要求和已选内容不相似。公式上是两项的加权:相关性得分减去与已选集合最大相似度乘系数lambda。lambda等于1退化为纯相关排序,等于0变成纯多样性。
相似度怎么来是个关键决策。用item的类目和标签做Jaccard太粗,同类的不同事件会被误伤;用内容embedding的余弦相似度最合理,我们用了双塔召回侧现成的item向量,零额外成本。
def mmr(cands, rel_scores, lam=0.7, k=10):
selected, rest = [], list(cands)
while len(selected) < k:
best, best_score = None, -1e9
for c in rest:
sim_max = max((cos(c.emb, s.emb)
for s in selected), default=0.0)
score = lam * c.rel - (1 - lam) * sim_max
if score > best_score:
best, best_score = c, score
selected.append(best)
rest.remove(best)
return selected
lambda的调优靠在线实验:0.5、0.7、0.85三档灰度。0.5的多样性用户无感,CTR跌0.4%;0.85多样性过强,CTR跌1.1%且用户觉得推荐变随机;0.7是甜点,CTR只跌0.2%,但人均session时长涨3.8%,类目覆盖数从平均4.2升到6.5。
实现层面的一个优化:MMR是平方复杂度的贪心,候选500条时Python循环约80毫秒,向量化后压到9毫秒;再大就先按精排分截断到200条再MMR,排序质量几乎无损。
经验总结:多样性和相关性不是对立,是投资组合,精排选股,MMR做组合均衡。上线后内容消费广度上去了,创作者生态的中长尾流量也活了,这是意外之喜。
多样性策略的后续扩展补充。MMR之外又加了一层业务规则多样性:同创作者、同类目的连续曝光硬约束,最多连出两条,规则的不可解释投诉归零,用户不在乎算法指标,在乎"别给我连着推同一个号"。评估多样性的指标也从类目覆盖扩到了embedding空间分散度,后者对语义级的同质化更敏感,两类指标配合着看,运营周报里就叫"信息食谱健康度",名字土但管用。最后分享一个反直觉的数据:多样性优化对次日留存的影响大于对当日CTR的影响,用户用脚投票的周期比我们想的长,评估窗口太短会低估这类策略,做长期体验类的优化,A/B至少跑两周再下结论。
- 点赞
- 收藏
- 关注作者
评论(0)