哔哩哔哩 大模型算法 一面
1. 自我介绍
2. 为什么推荐系统里要做多目标优化,而不是只优化点击率
只优化点击率会把系统推向强刺激、短反馈的内容,短期看 CTR 好看,长期可能损伤时长、留存、消费深度和用户满意度。推荐系统真正面对的是一个多目标约束问题,点击、时长、转化、留存、内容生态健康、创作者收益往往都重要,而且这些目标之间存在天然冲突。
多目标优化的核心不是把几个 loss 简单加权,而是处理目标尺度不一致、梯度冲突和业务优先级变化。很多系统前期用静态加权,后期会演进到门控式任务塔、动态权重、MMoE、PLE,甚至通过因果或强化学习方式做长期目标建模。优化的是用户长期价值,而不是某一个表层指标。
3. 当业务里同时有视频观看时长和短时负反馈,你会怎么设计目标
观看时长不是越长越好,因为它可能包含被动停留、背景播放甚至误点;短时负反馈也不能粗暴当成强负样本,因为用户有时只是当前场景不想看,不代表对内容完全没兴趣。比较合理的做法是把目标拆成多个层次:即时点击、有效播放、深度消费、负反馈、会话后留存,再通过多任务建模让模型学不同维度的信号。
如果要做得更细,会对时长做去偏和分桶,比如区分短停留、有效播放、超长停留,对负反馈也区分弱负样本和强负样本。这样模型不会把“没看完”统一学成负例,也不会把所有长时长都视为高质量正反馈。
4. 现在只有用户观看视频和停留时长数据,怎么做推荐
如果信号很少,核心在于把有限行为尽量拆出更多可学习结构。首先可以从行为本身构造不同粒度标签,比如曝光后是否点击、点击后是否有效观看、观看时长分桶、连续观看深度、会话级退出位置。其次要加强物料侧建模,用标题、标签、作者、主题、发布时间等内容特征弥补监督不足。再往上,可以做序列建模,把用户短期兴趣迁移学出来。
这类场景很容易陷入“只有点击和时长,就只能做简单排序”的误区。实际上,即使显式反馈少,只要把行为拆得足够细,再结合时序、上下文和内容信息,依然能做出不错的表达学习和重排。
5. 相似用户怎么衡量,为什么简单余弦相似度在工业里经常不够
简单余弦相似度只是在某个向量空间里比较角度接近程度,但工业里的“相似用户”不只是兴趣相似,还可能是消费阶段相似、活跃度相似、生命周期相似、价格敏感度相似、场景偏好相似。一个用户今天在找技术内容,另一个用户过去一个月长期看技术内容,这两人的向量可能接近,但在推荐策略上未必应被同等对待。
所以工业里常常不会直接拿单一 embedding 相似度做最终相似用户定义,而是用多塔表示、分场景表示、时间衰减表示,甚至引入局部邻域约束和协同过滤信号。相似用户的定义本身就是任务相关的,不是一个静态距离函数能完全概括的。
6. 为什么序列推荐里要区分短期兴趣和长期兴趣
长期兴趣描述的是用户稳定偏好,比如偏好的主题、品类、语言风格、消费层级;短期兴趣则更像当前会话里的即时意图,比如最近突然开始看某个比赛、某个剧集、某类教程。只建模长期兴趣会让系统太稳,跟不上兴趣突变;只建模短期兴趣则容易抖动,丢失用户长期轮廓。
真正有效的系统通常会把二者融合,但不是简单拼接。很多模型会让短期兴趣主导当前排序,长期兴趣做先验约束,或者对不同场景动态调整两者权重。比如首页推荐和订阅页、冷启动和高活用户,最优融合方式都不一样。
7. Transformer 用在推荐里,和用在 NLP 里最大的不同是什么
NLP 里 token 大多是自然语言单位,顺序和上下文具有连续语义;推荐里序列元素通常是 item、行为、场景和时间间隔,它们的语义离散且噪声更大。推荐序列常常更短、更稀疏、分布漂移更快,而且 item 会不断新增、下线、替换,因此直接照搬 NLP 里的 Transformer 往往并不理想。
推荐场景里更重要的是行为类型嵌入、时间间隔编码、位置偏置、负反馈建模和序列截断策略。很多时候模型复杂度并不是瓶颈,关键是你怎么把“看过、点过、跳过、停留多久、发生在什么场景”这些异构信号对齐到统一序列建模框架里。
8. LoRA 在推荐大模型或生成式推荐里通常加在哪,为什么有效
LoRA 的核心是冻结底座参数,只训练低秩增量矩阵。在生成式推荐或推荐大模型里,LoRA 常加在 attention 的投影层和部分 MLP 投影层,特别是 query、value 对行为偏好迁移比较敏感的位置。它有效的原因在于,推荐任务很多时候不需要完全重写底座知识,而是需要在用户行为分布和业务目标上做方向性修正。
相比全参数微调,LoRA 更省显存、更容易多任务切换,也更适合快速做 A/B 试验。对于场景切换频繁、目标经常调整的推荐业务,这种低成本适配方式非常实用。
import torch
import torch.nn as nn
class LoRALinear(nn.Module):
def __init__(self, in_features, out_features, r=4, alpha=8):
super().__init__()
self.weight = nn.Parameter(torch.randn(out_features, in_features), requires_grad=False)
self.A = nn.Parameter(torch.randn(r, in_features) * 0.01)
self.B = nn.Parameter(torch.randn(out_features, r) * 0.01)
self.scale = alpha / r
def forward(self, x):
return x @ self.weight.t() + ((x @ self.A.t()) @ self.B.t()) * self.scale
9. SFT 在推荐大模型场景里一般怎么做
推荐里的 SFT 和通用对话场景不完全一样,它不只是教模型“怎么回答”,还要教模型“如何根据用户状态和候选集合做有约束的生成或排序”。数据构造通常会把用户行为序列、上下文信息、候选物料摘要和期望输出组织成指令形式,让模型学习解释、重排、选择或生成推荐理由。
难点在于监督信号设计。如果直接拿线上点击结果做指令监督,噪声会很大;如果只靠人工构造,又很难覆盖真实分布。所以比较稳的做法是把高质量规则样本、历史优质决策样本和线上行为样本混合起来,并控制模板风格,避免模型学到一堆格式噪声。
10. 了解 RL 吗,推荐系统里为什么会考虑强化学习
推荐系统天然是一个顺序决策问题,当前曝光会影响用户后续状态和长期价值,因此只做一步监督学习很难真正优化长期收益。强化学习吸引人的地方就在于,它可以把即时反馈和长期反馈统一到累计回报里,让系统考虑“今天推什么,会不会影响用户明天还来”。
但推荐里直接上强化学习难度很高。环境部分可观测、反馈延迟长、反事实难评估、线上探索成本大,所以很多落地方案不会一上来就做端到端 RL,而是先做 bandit、价值建模、长期目标蒸馏、离线策略评估,再逐步引入策略学习。
11. 训练一个 AI 俄罗丝方块,三种数据来源:从头自博弈、自己收集数据集、专家规则训练,优缺点分别是什么
从头自博弈的优点是理论上上限高,能自己发现强策略,不受人工偏见约束;缺点是训练成本大,探索效率低,而且环境奖励设计不好会学歪。自己收集数据集更接近 imitation learning,启动快、训练稳,但数据
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.
字节跳动公司福利 1471人发布