跳到正文

推荐结果多样性怎么控制?

生成式推荐系统中避免重复与单调的 3 种技术方案

原题:在生成式推荐系统中,如何控制输出结果的多样性以避免重复和单调?请提供具体的技术方案

重排与优化 · 美团真题

30 秒回答

  1. 温度采样与Top-p/Top-k采样的参数调优
  2. 重复惩罚机制(Repetition Penalty)的实现
  3. 多样性重排序(MMR、DPP等)的应用
  4. 多目标优化在训练阶段的引入

回答与解析

答案要点

  • 温度采样与Top-p/Top-k采样的参数调优
  • 重复惩罚机制(Repetition Penalty)的实现
  • 多样性重排序(MMR、DPP等)的应用
  • 多目标优化在训练阶段的引入
  • 后处理过滤与去重策略

生成式推荐控制多样性的核心思路是**"解码干预 + 后处理重排 + 训练优化"三层架构**:

一、解码阶段:采样策略调参

  • 温度采样(Temperature):T>1增加随机性,T<1更确定;推荐场景通常T=0.7~1.2试探
  • Top-p(Nucleus)+ Top-k:限制候选token范围,避免低概率尾部采样带来的噪声
  • 重复惩罚(Repetition Penalty):对已生成token的logits除以惩罚系数γ(通常1.0~1.2),直接抑制重复

二、生成后:多样性重排序

生成N个候选后,用**MMR(Maximal Marginal Relevance)DPP(Determinantal Point Process)**重排:

MMR = λ·相关性 - (1-λ)·最大相似度

通过λ控制相关性与多样性的trade-off。

三、训练阶段:多目标优化

  • 多样性正则项:在loss中加入生成结果间的互信息惩罚
  • 对比学习:拉近正样本、推远负样本,扩大embedding空间分布

四、业务层:类目/场景打散

美团外卖场景的典型做法——强制品类覆盖:确保推荐列表中主食、饮品、小吃等类目占比,避免同一商家/品类扎堆。

口语版讲法(约4分钟)

  • 一句话定位:生成式推荐多样性是解码干预+后处理重排+训练优化的三层架构
  • 解码阶段:温度、Top-p/Top-k、重复惩罚的参数调优和场景选择
  • 后处理重排:MMR和DPP的适用边界与落地经验
  • 训练阶段:多目标优化,对比学习扩分布
  • 业务层:品类打散与风险:前提是数据干净,否则惩罚反而伤害体验

这道题问的是生成式推荐里怎么避免输出单调,其实本质是 在相关性和多样性之间做权衡,不是单纯加随机性。我会从三个层面来控:解码阶段干预、生成后重排、训练阶段优化。先讲解码阶段,这是最直接的一层。温度采样、Top-p、Top-k这些参数调优,说白了就是控制模型输出时选词的随机程度。温度T大于1会增加随机性,小于1更保守,推荐场景我一般从0.7到1.2之间试探,比如短视频推荐T会偏高一点,因为用户喜欢新鲜感;电商搜索就偏低,用户更关注精准匹配。Top-p和Top-k一起用,限制候选token范围,避免低概率的噪声词汇被选到。这里有个坑:温度调太高会生成不相关的内容,调太低又容易重复,所以上线前我会先用一批离线数据跑召回率,确保多样性提升的同时不牺牲相关性。再一个就是重复惩罚,对已经生成的token的logits除以一个惩罚系数,通常1.0到1.2,抑制模型重复输出同一段话。但惩罚太强会导致输出断断续续,像卡住了一样,所以这个系数要跟温度配合着调。然后是生成后的步骤。我通常会先生成N个候选序列,然后用MMR或DPP做重排。MMR是最大化边际相关,公式是λ乘以相关性减去1减λ乘以最大相似度,通过λ这个参数控制多样性和相关性的比重。比如在新闻推荐里,λ设到0.5左右,保证标题不重复;但如果是商品推荐,用户可能就想看同品类的东西,λ就要调高。DPP更数学化,通过行列式点过程直接挑选一个子集,让整体多样性最优。不过DPP计算量比较大,如果候选集超过一百个,我倾向先用MMR粗排再用DPP精排,或者用近似算法。这里有个前提:重排依赖好的相似度度量,如果embedding质量不行,相似度算不准,重排反而会打乱排序。所以我会先确保embedding模型在业务数据上微调过。训练阶段我也会做多目标优化。在loss里加一个多样性正则项,惩罚生成结果之间的互信息,让模型学会输出差异化的内容。另外对比学习也很有用,拉近正样本对、推远负样本对,这样embedding空间分布更广,自然能生成更多样化的结果。但训练优化周期长,适合新模型从零训的场景;如果是上线后快速迭代,还是解码阶段和后处理更立竿见影。最后是业务层的兜底。比如美团外卖的场景,我会加一个强制品类覆盖,保证推荐列表里主食、饮品、小吃都有,避免同一商家或品类扎堆。这个看似简单,但落地时有个常见失败场景:如果品类标签不准确,强制覆盖反而会推不相关的东西,伤害体验。所以前提是品类数据要干净,而且要动态调整比例,比如午餐时段主食权重高,下午茶饮品权重高。其实还有一个方向值得深入:当多样性要求特别高时,比如做个性化歌单推荐,我会用 强化学习 把多样性作为奖励信号的一部分,让模型在训练时就学会探索。这个跟多目标优化的思路不太一样,但它能更直接地跟用户长期满意度挂钩。所以整体上,我更倾向于把解码和后处理作为日常手段,训练优化作为长期投资,业务规则做兜底。这样既灵活又可控。

关键一句:当多样性要求特别高时,可以用强化学习把多样性作为奖励信号的一部分,让模型在训练时就学会探索。

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做电商推荐,用户问‘推荐几款手机’,模型一口气回了三个iPhone 15,用户肯定觉得傻。你碰到过这种重复问题吗?怎么在生成结果里控制多样性,别让推荐列表看着都像复制粘贴的?

  2. 问法 2 · 层层追问

    生成式推荐你怎么保证结果不单调?……比如同一个品类反复出现,你有哪些解码手段?……那生成完以后还能再做点什么?……训练阶段有没有办法提前考虑多样性?

  3. 问法 3 · 直球架构

    设计一个生成式推荐系统,要求输出结果多样性高、避免重复。请从解码策略、后处理重排和训练优化三个层面,给出具体的技术方案和实现思路。

同模块相关题目