【发布时间】:2020-05-06 01:42:25
【问题描述】:
- 假设我有 n 个文档表示为单位向量,称之为 X。
- 我有一个文档的向量表示,称之为 Xi。
- 如何在没有暴力搜索(线性时间)的情况下找到 X 中与 Xi 最接近的*向量。
*距离可以是L2;当我们谈论单位向量时,比例等于余弦相似度。
我的近似方法(恒定时间): 1. 对每个向量维度的所有文档进行排序。 2.使用排序索引仅通过数据的子集进行暴力破解:f.e.包括每个向量维度的所有最接近的 1000 个文档,通过那些在所有(或大多数)维度中出现接近的文档(1000 个)计算 L2 距离。 (最多 1000 个)
但是我想知道是否有一个“更干净”的精确解决方案,例如最接近点对问题的分治算法,它在 log(n) 时间内运行。
PS:内存也应该线性扩展。但这应该没问题。
示例:我将 1M 文档的 100 维向量表示存储为 32 位浮点数。
- 矢量表示:1M*100 dims*32bit = 3.2Gbit = 400MB
- 排序索引:1M*100 sorts*32bit = 3.2Gbit = 400MB
【问题讨论】: