我使用随机超平面阅读了几个关于高维最近邻搜索的解决方案,但我仍然对这些桶如何工作感到困惑。我有100维向量和100万个查询形式的1亿个文档。对于每个查询,我需要根据余弦相似性找到最近的邻居。蛮力方法是查找所有1亿个文档的查询cosine
值,并选择值接近1的那些。我正在努力使用随机超平面的概念,我可以将文档放入桶中,以便对于每个查询,我不必为cosine
值计算1亿次。
答案 0 :(得分:2)
以几何方式思考。想象一下您的数据就像高维空间中的点。
创建随机超平面(只是更高维度的平面),使用你的想象力进行缩小。
这些超平面切割您的数据(点),创建分区,其中一些点与其他点分开(分区中的每个点;将是粗略的近似)。
现在应根据超平面形成的分区填充存储桶。因此,每个桶包含的点数远远少于点集的总大小(因为我之前谈过的每个分区都包含的点数少于点集的总大小)。
因此,当您提出查询时,您检查的点数(在桶的帮助下)要比总大小少得多。这是所有的收获,因为检查更少的点,意味着你比蛮力方法做得更好(更快),蛮力方法检查所有点。