Algorithm 用O(log(n))实现最近向量搜索算法 假设有n个文档表示为单位向量,称之为X 我有一个文档的向量表示,称之为席。 Li >如何找到X席到XI的最接近的*向量(无线性搜索)?< /LI>
*距离可以是L2;当我们谈论单位向量时,比例等于余弦相似性 我的近似方法(恒定时间): 1.对每个向量维度的所有文档进行排序。 2.使用排序索引仅对数据子集进行暴力:f.e.包括每个向量维度的所有最近的1000个文档,暴力通过所有(或大多数)维度中显示接近的文档(1000)计算L2距离。(最多1000) 然而,我想知道是否有一个“更干净”的精确解,比如最近点对问题的分治算法,它在对数(n)时间内运行 PS:内存也应该线性扩展。但这应该没问题 示例:我将1M文档的100维向量表示存储为32位浮点Algorithm 用O(log(n))实现最近向量搜索算法 假设有n个文档表示为单位向量,称之为X 我有一个文档的向量表示,称之为席。 Li >如何找到X席到XI的最接近的*向量(无线性搜索)?< /LI>,algorithm,math,search,nlp,Algorithm,Math,Search,Nlp,*距离可以是L2;当我们谈论单位向量时,比例等于余弦相似性 我的近似方法(恒定时间): 1.对每个向量维度的所有文档进行排序。 2.使用排序索引仅对数据子集进行暴力:f.e.包括每个向量维度的所有最近的1000个文档,暴力通过所有(或大多数)维度中显示接近的文档(1000)计算L2距离。(最多1000) 然而,我想知道是否有一个“更干净”的精确解,比如最近点对问题的分治算法,它在对数(n)时间内运行 PS:内存也应该线性扩展。但这应该没问题 示例:我将1M文档的100维向量表示存储为32位浮点
- 矢量表示:1M*100 dims*32bit=3.2Gbit=400MB
- 排序索引:1M*100排序*32bit=3.2Gbit=400MB
除此之外,sklearn还提供了一些快速近似近邻搜索功能 这回答了你的问题吗?