真实面经题目 · 原创解析
推荐召回中 Word2Vec 召回具体怎么做,训练样本和近邻检索如何设计?
这道题考察 item2vec 召回的完整链路。好答案要从行为序列构造、样本窗口、负采样、向量训练、ANN 建索引、线上 seed 扩展、过滤去重、融合排序和指标验证讲起,而不是只说用 Word2Vec 算相似 item。
推荐召回里的 Word2Vec 通常是 item2vec:把 item 当词,把用户按时间排序的行为序列或 session 当句子,让共现行为相近的 item embedding 更接近。离线先清洗行为日志,按用户或 session 构造序列,设置窗口、行为权重和时间衰减,用 skip-gram + negative sampling 训练 item embedding,然后用 Faiss/HNSW 等建立 ANN 索引。线上选择用户最近或最重要的 seed item,查询每个 seed 的 TopK 相似 item,按相似度、seed 行为强度和时间衰减打分,过滤不可用、已曝光或不合规 item,去重并做多样性控制,再送入粗排/精排。验证要用时间切分的 Recall@K、MRR、NDCG、ANN recall、覆盖率、多样性和线上 CTR/CVR。
item2vec 把用户行为序列当作句子。按用户长期序列、按 session、按场景序列训练,学到的关系不同。窗口过大容易把无关兴趣拉近,窗口过小又学不到跨行为关联。
点击、收藏、加购、购买、长停留和负反馈的强度不同。强正反馈可提高权重,普通点击可降低权重,负反馈可用于过滤或训练约束。近期行为通常比很久以前的行为更能代表当前兴趣。
训练用 skip-gram + negative sampling 或 CBOW 得到 item embedding。向量可归一化后用内积模拟 cosine,存入 Faiss、HNSW 或 ScaNN 等 ANN 索引,并带类目、城市、库存、可售状态等元数据。
线上从最近点击、加购、购买或高权重行为中选 seed item,对每个 seed 查 TopK 近邻,再按 seed 权重、时间衰减、相似度和业务规则合并得分。最终还要过滤已曝光、不可售、重复、低质或不合规候选。
Word2Vec 召回简单、高效、可解释,适合相似和共现扩展;但对冷启动 item、复杂上下文和多目标偏好表达不足,需要和热门、内容、图召回、双塔深度召回一起组成多路召回。
训练、验证和测试应按时间切分,不能随机切分交互。否则未来行为会进入 embedding 训练,next-item Recall@K 会虚高。还要评估 ANN 近似误差和线上索引新鲜度。
可以用内容 embedding、类目和品牌相似、热门探索、人工运营池或图关系补充初始召回;有少量行为后再通过增量训练或近实时索引更新进入 item2vec 近邻。
语料和窗口会影响关系类型。同一曝光/点击上下文可能学到相似,购买链路或 session 转移可能学到互补。可以按行为类型训练不同 embedding,或在下游排序里用召回原因区分。
近似索引为了速度会牺牲部分精确近邻。如果 ANN 参数过激,离线 embedding 看起来好,但线上召回不到真正 TopK。需要和暴力精确检索对比召回率、延迟和内存。
Word2Vec 主要学 item-item 共现,成本低、解释性好;双塔能融合用户画像、上下文和多目标,泛化更强。工程上常作为独立通道并行召回,再由融合和排序统一选择。