推荐系统:近似最近邻搜索算法(ANN)【Approximate Nearest Neighbors】【开源算法:Faiss、Annoy、ScaNN、Hnswlib】

在搜索的业务场景下,基于一个现有的数据候选集(dataset),需要对新来的一个或者多个数据进行查询(query),返回在数据候选集中与该查询最相似的 Top-K 数据。

当我们通过计算获得了每个物品的Embedding表示之后,最常遇到的一个问题就是在给定某个目标物品时,如何找出何其最类似的n个物品?

这一类问题被称为最近邻搜索问题,经过多年的发展,这个问题在业界也有诸多的解决方案。

目前最常用在推荐系统中的是近似最近邻检索算法(ANN)。

由于我们并不需要精确的知道某个物品的n个最相近的物品是什么,只要大致结果正确就行,因此可以采用许多办法来加速计算、减少时间和 空间复杂度。在这方面Facebook团队开源了FAISS,提供了诸多开箱即用的模型。

Google:the two-tower neural network model:

推荐系统:近似最近邻搜索算法(ANN)【Approximate Nearest Neighbors】【开源算法:Faiss、Annoy、ScaNN、Hnswlib】_第1张图片
最朴素的想法就是,每次来了一个新的查询数据(query),都遍历一遍数据候选集(dataset)里面的所有数据,计算出 query 与 dataset 中所有元素的相似度或者距离,然后精准地返回 Top K 相似的数据即可。

但是当数据候选集特别大的时候,遍历一遍数据候选集里面的所有元素就会耗费过多的时间,其时间复杂度是 O ( n ) O(n) O(n) 因此,计算机科学家们开发了各种各样的近似最近邻搜索方法(Approximate Nearest Neighbors)来加快其搜索速度,在精确率和召回率上面就会做出一定的牺牲,但是其搜索速度相对暴力搜索有很大地提高。

在这个场景下,通常都是欧式空间里面的数据,形如 在这里插入图片描述
其中 n n n 是欧氏空间的维度。常用的距离公式包括:

推荐系统:近似最近邻搜索算法(ANN)【Approximate Nearest Neighbors】【开源算法:Faiss、Annoy、ScaNN、Hnswlib】_第2张图片

欧氏空间的数据点聚类:

推荐系统:近似最近邻搜索算法(ANN)【Approximate Nearest Neighbors】【开源算法:Faiss、Annoy、ScaNN、Hnswlib】_第3张图片
在近似最近邻搜索(ANN)领域,有很多开源的算法可以使用,包括但不限于:

  • Annoy(Approximate Nearest Neighbors Oh Yeah);
  • ScaNN(Scalable Nearest Neighbors);
  • Faiss(Billion-scale similarity search with GPUs);
  • Hnswlib(fast approximate nearest neighbor search);

ANN 的 benchmark:
推荐系统:近似最近邻搜索算法(ANN)【Approximate Nearest Neighbors】【开源算法:Faiss、Annoy、ScaNN、Hnswlib】_第4张图片




参考资料:
近似最近邻搜索算法 ANNOY(APPROXIMATE NEAREST NEIGHBORS OH YEAH)

你可能感兴趣的:(#,RS/召回层,算法,人工智能,ANN,近似最近邻搜索算法)