B站推荐算法一面面经:生成式召回13问详解
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 构建 SID 编码体系时,引入曝光容量约束的具体实现方式是什么?
- 增加曝光约束后会增大量化误差,如何平衡业务约束与量化精度的 Trade-off?
- 是否统计过 SID 编码的碰撞率?工程中如何缓解和解决编码碰撞问题?
- 模型 SFT 微调采用何种训练方案?LoRA 微调的核心优势是什么?
- 生成式召回任务中,SFT 训练数据集的构造逻辑与筛选标准是什么?
- 用户行为序列长度差异悬殊如何处理?针对无历史行为的冷启动新用户,有哪些解决思路?
- 生成式召回天然存在推理延迟高的问题,项目中从哪些维度做了降延迟优化?
- 简述主流的经典召回模型架构及适用场景。
- 双塔向量召回模型存在哪些固有缺陷?重点分析长尾物品表征学习不足的问题。
- 不依赖生成式方案,仅从双塔模型结构本身优化,如何提升长尾 Item 的表征质量?
- 简述双塔模型 Pointwise、Pairwise、Listwise 三种训练范式的区别,以及对应的损失函数。
- InfoNCE 损失中温度系数的核心作用与设计意义是什么?
- 结合 B站推荐体验,分析其推荐系统现存问题;从召回、精排、重排全链路说明优化多样性的具体方案。
《参考解析》
SID 编码体系为什么要加曝光容量约束:语义 ID 通常由 RQ-VAE 或分层聚类对 item 的语义向量逐级量化得到,每级一个码字,串起来就是 item 的「词」。如果只按语义聚类,热门 item 会大量落进同一批码字,导致码本分布极度倾斜:生成式模型只要反复生成那几个高频码就能刷高指标,尾部码字几乎学不到。曝光容量约束就是给每个码字设一个「可承载曝光量/占比」的上限,量化时加入容量惩罚或按曝光分桶做配额,让码字在曝光维度上更均衡。实现上常见「软惩罚 + 分层处理」:前 1~2 级保语义可分,末级再施加容量约束控制尾部。
量化误差与业务约束怎么权衡:约束越硬,簇的几何形状越偏离语义最优划分,重构误差上升、码本利用率下降、碰撞率变高。可操作的权衡是:把容量约束写成带权软惩罚,用线上 A/B 的召回率与多样性指标反调权重;用残差量化把误差摊到后续层;对头部 item 单独放码,让精度损失集中在本来就不需要细分的尾部。回答时最好给出「约束强度 → 离线重构损失/碰撞率 → 线上指标」的验证闭环,而不是只说「找平衡点」。
碰撞率的统计与治理:离线统计整体碰撞率(1 − 唯一 SID 数 / item 总数)和曝光加权碰撞率(更贴近线上影响)。治理手段包括扩大码本、增加量化层级、末级用更大码本、对高频 item 分配独占码、碰撞组内用 item id 后缀区分(召回退化为组内再排)。最后要接受一点:碰撞无法完全消除,能做的是让撞在一起的 item 语义相近,把错误控制在可接受范围。
SFT 与 LoRA:生成式召回里的 SFT 目标是让模型学会「给定用户历史/偏好前缀,生成该用户可能感兴趣的 item 的 SID 序列」。数据构造通常是「用户行为序列 → 目标 item 的 SID」,正样本来自真实曝光点击(尤其强正反馈如完播、点赞、收藏),负样本和困难负样本按曝光未点击、随机采样、流行度校正等方式混合;筛选标准包括去噪(误点、爬虫、异常频次)、去偏(热门降权)、保证长尾覆盖、以及序列长度与时间切分(避免用未来信息泄漏)。LoRA 的核心优势是在冻结原权重的前提下旁路低秩矩阵 ΔW = BA,可训练参数量降到千分之一量级,显存占用与训练成本大幅下降,且能多套 LoRA 并存、推理时可 merge 回主权重做到零额外延迟,适合按业务快速迭代。
序列长度悬殊与冷启动:训练侧用截断 + padding + mask,并按长度分桶采样避免长序列主导;建模侧用多尺度(短期最近 N 个行为 + 长期兴趣分桶聚合)加 attention 池化,让短序列也能学到有效表征。冷启动用户:热门/地域/时段/设备先验兜底,内容属性(类目、标题文本、封面多模态)做召回,探索流量(ε-greedy、Thompson sampling)快速积累反馈,同时用「相似用户」的群体偏好做迁移。
生成式召回降延迟:解码侧用更小的 beam、前缀树约束合法 SID、限制生成长度、投机解码;模型侧量化、KV cache 复用、批处理、蒸馏小模型;系统侧两段式(粗生成 + 向量检索补足)、生成与检索并行、热点缓存;工程上必须给生成设超时并准备回退到双塔召回,才能守住 P99。
双塔的固有缺陷:user 塔与 item 塔只在最后做内积,无法建模细粒度交叉特征,表达上限低于交叉塔;训练时热门 item 被高频采样,长尾 embedding 更新少、梯度弱,且内积空间中长尾向量容易聚集在原点附近,导致长尾几乎召不回。仅从结构侧优化可考虑:负采样上做流行度校正与困难负样本挖掘;损失上做逆倾向加权等去偏;加辅助任务(内容重建、类目预测)给长尾补梯度;用 cosine + margin 的角度间隔约束避免向量塌缩;用多向量/多兴趣表示给长尾更多落点。
三种训练范式与损失:Pointwise 把每个 (user, item) 当独立样本,BCE/MSE;Pairwise 用 (正, 负) 对,hinge 或 BPR 的 −log σ(s+ − s−);Listwise 对整条候选列表做 softmax 交叉熵(ListNet)或 LambdaRank 的 λ 梯度。工业召回主力是 Pairwise 与 sampled softmax(listwise 的高效近似)。
InfoNCE 的温度系数:−log( exp(s+/τ) / Σ exp(si/τ) )。τ 小 → 分布尖锐,梯度集中在最难负样本,表征更均匀、区分度更高,但对噪声标签敏感、训练不稳;τ 大 → 分布平滑,学习信号被摊薄、表征趋同。它控制负样本惩罚强度,常作为可学习参数(logit scale),实践取值 0.05~0.2。
B站推荐的多样性问题与全链路方案:现象是同质化(连刷同类视频)、信息茧房、新分区与新 UP 主拿不到曝光。归因在目标(点击/时长天然偏好头部与强兴趣)、召回源单一、精排分数集中、重排缺少打散。方案按链路:召回扩源(内容召回、跨域召回、长尾专项通道);精排做多目标融合与分数校准(互动、负反馈单独建模);重排加多样性约束(DPP、MMR、类目与 UP 主打散、滑窗去重)。评测上除 CTR/时长外必须单看类目熵、覆盖率、长尾曝光占比与负反馈率,否则多样性会被单一目标优化掉。