先这样答
双塔召回把用户和物品分别编码成向量,再在线计算相似度。用户塔输入用户侧信息,物品塔输入物品侧信息。两侧输出向量后,可以用内积或余弦计算匹配程度。
物品向量可以离线预计算并建立 ANN 索引。线上请求到来时,只计算用户塔,得到当前用户向量,再到索引中检索相似物品。这样能减少线上计算,满足召回阶段的延迟要求。
ANN 索引可以选 HNSW 或 IVF。HNSW 是图索引,查询快,但占用内存大。IVF 是倒排聚类索引,更省内存,但需要先训练聚类。训练双塔时,可以使用 in-batch 负采,也可以加入难例挖掘。正负样本比例要按具体场景调整。
面试官会怎么追问
-
「为什么物品塔可以放到离线,线上只计算用户塔?」
物品向量可以提前计算并放入 ANN 索引。线上只生成用户向量,再做相似度检索,可以减少在线计算,满足延迟要求。 -
「HNSW 和 IVF 怎么选?」
HNSW 属于图索引,查询快,但内存开销大。IVF 属于倒排聚类索引,更省内存,但使用前需要训练。 -
「双塔训练时,负样本怎么构造?」
可以使用 in-batch 负采,把同一批次中的其他样本作为负样本。也可以做难例挖掘,再结合场景调整正负样本比例。
回答的坑
-
不要只说双塔分别编码向量,还要说明物品向量离线计算、线上只计算用户塔。
-
不要把 HNSW 和 IVF 混成同一种索引,要说清查询速度、内存开销和是否需要训练的差异。
同系列的题
这家公司的面经实录
—— 本题完 ——