假设您有一个嵌入模型。针对某个用户,您如何决定推荐哪些商品?
在服务时,给定一个查询,首先执行以下某项操作:
- 对于矩阵分解模型,查询(或用户)嵌入是静态已知的,系统只需从用户嵌入矩阵中查找即可。
- 对于 DNN 模型,系统会在传送时通过在特征矢量 \(x\)上运行网络来计算查询嵌入 \(\psi(x)\)。
获得查询嵌入 \(q\)后,在嵌入空间中搜索与 \(q\) 相近的商品嵌入\(V_j\) 。这是最近邻问题。例如,您可以根据相似度得分 \(s(q, V_j)\)返回前 k 项。
您可以在推荐相关商品时采用类似的方法。例如,当用户观看 YouTube 视频时,系统可以首先查找该项的嵌入,然后查找嵌入空间中相邻的其他项\(V_j\) 的嵌入。
大规模检索
为了计算嵌入空间中的最近邻,系统可以详尽地对每个潜在候选对象评分。对于非常大的语料库,穷尽评分可能非常耗费资源,但您可以使用以下任一策略来提高效率:
- 如果以静态方式知道查询嵌入,则系统可以离线执行详尽评分、预计算并存储每个查询的热门候选对象列表。这是推荐相关商品的常见做法。
- 使用近似最近邻。 Google 在 GitHub 上提供了一款名为 ScaNN(可伸缩的最近邻)的开源工具。该工具可大规模执行高效的向量相似度搜索。