向量化召回
Table of Contents
学习向量化召回的一些笔记.
向量化召回 #
向量化召回:
- 训练时使用双塔模型预测点积, 将 user 和 item 的 embedding 映射到同一个空间中;
- 线上 serving 时构建用户 embedding 后使用近似最近邻 (Approximate Nearest Neighbor, ANN) 算法召回最接近的 item.
模型 #
user-item 特征交叉在精排模型中非常常见, 并且效果通常很好. 但是召回模型必须解耦, 仅在最后一层对 embedding 做点积以预测. 这是因为召回模型上线后需要离线构建 item 索引.
样本 #
通常取点击样本为整体样本集. 以 batch 进行训练, 正样本是用户点击, 负样本是 batch 内其它用户的真实点击.
为什么这么做, 而不是取曝光未点击作为负样本?
- 精排与召回输入数据分布不一致. 召回的目的是选出用户可能感兴趣的 item,曝光未点击的已经在链路末端, 用户不点击也不一定是不感兴趣.
- 取 batch 内其它用户的点击作为负样本, 热门物品更容易被采样到, 起到打压热门物品的作用.
索引 #
一个常用的 ANN 算法是 HNSW. HNSW (Hierarchical Navigable Small World) 算法是一种基于图的近似最近邻搜索算法, 通过构建多层索引, 在保证搜索效率的同时, 保持搜索结果的准确性.
NSW #
不断添加点, 每个点连接最近的若干个点, 构成索引. 这种构建方式的优点:
- 联通.
- 存在长边, 可以快速接近目标点.
- 距离相近的点之间有边连接.
搜索时, 随机选一个点, 不断从它的邻居中找到离目标点最近的点, 直到无法优化为止.
HNSW #
HNSW 基于 NSW 的思想, 额外增加了层级的概念. 最底层有全部的点, 随着层数增加点数不断减少.
构建 HNSW 索引添加点时, 会随机计算其所处的最高层级. 接下来, 自顶层向最高层级搜索, 不断找到最近的点; 到达最高层级后, 每层寻找最近邻的若干个点存储并连接.
搜索类似, 从高层向低层搜索.