Skip to main content
  1. Posts/

向量化召回

·1 min·
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 索引添加点时, 会随机计算其所处的最高层级. 接下来, 自顶层向最高层级搜索, 不断找到最近的点; 到达最高层级后, 每层寻找最近邻的若干个点存储并连接.

搜索类似, 从高层向低层搜索.