推荐结果千人一面:MMR多样性重排的落地效果

举报
yd_275379215 发表于 2026/11/13 10:35:04 2026/11/13
【摘要】 信息流推荐上线精排模型后,CTR确实涨了,但用户调研里"越刷越同质"的抱怨变多:连刷二十条都是同一话题,趣味性塌了。精排模型追求每条分数最大化,天然倾向堆同类高分内容。加了一层MMR重排,记录方案和效果。MMR即最大边际相关,思想是贪心地做平衡:每选一条内容,既要求它和用户兴趣相关,又要求和已选内容不相似。公式上是两项的加权:相关性得分减去与已选集合最大相似度乘系数lambda。lambda...

信息流推荐上线精排模型后,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至少跑两周再下结论。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。