场景:1 亿物品、千万 DAU,召回要在毫秒级返回 500 个候选,你们用双塔(user 塔 + item 塔)做召回。请回答:① 为什么双塔能在这个量级下做到毫秒级,item 侧的计算发生在什么时刻;② user 塔和 item 塔能不能输入“该用户是否点击过这个物品的同类目”这种交叉特征,为什么;③ 训练时 batch=512、每行 1 个正样本,用 in-batch 负采样,这个 batch 里实际有多少个负样本?这种采样方式有什么偏置,怎么缓解。
面试官在考什么
判断候选人是否理解双塔“可预计算”这一根本前提,以及由此带来的交叉特征限制和 in-batch 负采样的采样偏置。
回答框架 · 前两步
- item 塔的输出可以离线(或准实时)对全量 1 亿物品算好,建成 ANN 索引(HNSW/IVF-PQ);线上只跑一次 user 塔前向 + 一次向量检索,所以耗时基本与物品总量无关,这是“毫秒级”的来源。
- 双塔的硬约束是两侧在算内积之前不能交互:交叉特征(用户×物品)必须对每个 (user,item) 对分别计算,一旦引入就无法预计算 item 侧向量,退化成对全量物品暴力打分,失去双塔的意义。
还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。
同一能力域的其他题
- 推荐系统为什么要做多阶段(召回-粗排-精排-重排)而不是一个模型直接排?每一阶段的核心目标有什么不同?
- 双塔召回为什么必须最后才做用户侧和物品侧的交互?如果想加强交互能力,业界有哪些改进方向?
- 多目标排序里,你手上的 CTR、CVR、时长这几个目标怎么融合成一个排序分?各目标样本量差异很大怎么办?
- 某电商推荐场景,item 约 500 万,日活用户 2000 万,用户平均有效行为 40 条。行为分布极度长尾:Top 1% 的 item 吃掉了约 60% 的行为。你用 ItemCF 做召回,上线后发现不同用户的召回结果高度雷同,基本集中在几百个头部爆款上。请给出你会采用的 item 相似度计算公式(写清楚热门惩罚项放在哪一项),并回答两点:(a) 为什么惩罚要作用在相似度层面,而不是在召回打分阶段给热门 item 乘一个降权系数;(b) 一个只有 2 条历史行为、且都是长尾商品的用户,你怎么保证他仍有足够的召回量。
- 某电商推荐系统的 i2i 协同过滤召回已经跑了两年:物品 200 万,日活 500 万,日新增用户-物品行为 2 亿条,离线用余弦相似度按天全量重算共现矩阵。最近两个季度,头部 5% 的商品占据了约 60% 的召回曝光位,长尾和新品几乎拿不到量。你接手后,会怎么定位这到底是「相似度定义」的问题还是「链路结构」的问题,并给出你的改造方案与验证口径?
- 已知用户-物品二值行为矩阵(1 = 有过交互):u1={i1,i2,i3},u2={i2,i3,i4},u3={i3,i4},u4={i1}。请用 UserCF 给 u1 生成推荐:① 基于二值向量的余弦相似度,算出 u1-u2、u1-u3、u1-u4 分别是多少(保留两位小数);② 取 Top-2 邻居、按相似度加权,写出你会推给 u1 的物品和分数;③ 如果某个邻居是一个几乎什么都看过的超级活跃用户,这个打分公式会出什么问题,怎么改。