如何计算查询向量和压缩样本向量的距离(相似性)?

简介: 通过分段聚类与查表法,将高维向量压缩为32比特,计算查询向量与样本向量距离时,先分4段并查预建的距离表,以O(1)时间获取每段与聚类中心距离,最后合并得总距离,大幅提升相似性计算效率。

这样,我们就得到了一个压缩后的样本向量,它是一个 32 个比特位的向量。这个时候,如果要我们查询一个新向量和样本向量之间的距离,也就是它们之间的相似性,我们该怎么做呢?这里我要强调一下,一般来说,要查询的新向量都是一个未被压缩过的向量。也就是说在我们的例子中,它是一个 1024 维的浮点向量。

好了,明确了这一点之后,我们接着来说一下计算过程。这整个计算过程会涉及 3 个主要向量,分别是 样本向量、查询向量 以及 聚类中心向量。你在理解这个过程的时候,要注意分清楚它们。

那接下来,我们一起来看一下具体的计算过程。

首先,我们在对所有样本点生成聚类时,需要记录下 聚类中心向量 的向量值,作为后面计算距离的依据。由于 1024 维向量会分成 4 段,每段有 256 个聚类。因此,我们共需要存储 1024 个聚类中所有中心向量的数据。

然后,对于 查询向量,我们也将它分为 4 段,每段也是一个 256 维的向量。对于查询向量的每一段子向量,我们要分别计算它和之前存储的对应的 256 个聚类中心向量的距离,并用一张距离表存下来。由于有 4 段,因此一共有 4 个距离表。

当计算查询向量和样本向量的距离时,我们将查询向量和样本向量都分为 4 段子空间。然后分别计算出每段子空间中,查询子向量和样本子向量的距离。这时,我们可以用聚类中心向量代替样本子向量。这样,求查询子向量和样本子向量的距离,就转换为求查询子向量和对应的聚类中心向量的距离。那我们只需要将样本子向量的聚类 ID 作为 key 去查距离表,就能在 O(1) 的时间代价内知道这个距离了。

最后,我们将得到的四段距离按欧氏距离的方式计算,合并起来,即可得到查询向量和样本向量的距离,距离计算公式:

以上,就是计算查询向量和样本向量之间距离的过程了。你会看到,原本两个高维向量的复杂的距离计算,被 4 次 O(1) 时间代价的查表操作代替之后,就变成了常数级的时间代价。因此,在对压缩后的样本向量进行相似查找的时候,我们即便是使用遍历的方式进行计算,时间代价也会减少许多。

而计算查询向量到每个聚类中心的距离,我们也只需要在查询开始的时候计算一次,就可以生成 1024 个距离表,在后面对比每个样本向量时,这个对比表就可以反复使用了。

相关文章
|
2月前
|
编解码 算法 前端开发
java后端开发学习路线+避坑指南
java后端开发学习路线+避坑指南
|
2月前
|
存储
链表在检索和动态调整上的优缺点
链表因无法随机访问,检索效率低,尤其在无序或有序情况下均难以实现快速查找。但其优势在于动态调整:插入和删除节点仅需O(1)时间,远优于数组的O(n)移动开销,适合频繁修改的场景。
|
2月前
|
数据采集 存储 机器学习/深度学习
搜索引擎的整体架构和工作过程
搜索引擎由爬虫、索引和检索三大系统构成:爬虫负责抓取网页并存储;索引系统对网页去重、分析并构建倒排索引;检索系统通过查询分析、相关性排序等技术,返回精准结果。全过程融合文本分析、机器学习与大规模计算,确保高效准确搜索。
|
2月前
|
存储 算法 数据挖掘
如何使用乘积量化压缩向量?
乘积量化通过将高维向量划分为多个低维子空间,对每个子空间聚类并用聚类ID表示子向量,大幅压缩存储空间。例如,1024维向量可分段聚类,用32比特替代原始4KB空间,压缩率达1/1024,显著提升内存加载与检索效率。
|
2月前
|
算法
如何查找对应的 SSTable 文件
通过分层架构管理SSTable,Level 0逐个查找,Level 1起每层范围不重叠,可二分定位目标文件。查询逐层下沉,直至找到元素或结束,显著提升检索效率。
|
2月前
|
算法 数据挖掘 索引
如何使用聚类算法进行相似检索?
利用聚类算法构建倒排索引,可高效实现相似检索。先将数据划分为若干聚类(如1024个),以聚类ID为Key建立索引。查询时,定位最近聚类,通过索引获取候选集并计算距离,返回Top K结果。针对候选过多或过少,可采用层次聚类细化划分,或扩展至次近聚类补充检索,提升效率与准确性。
|
2月前
|
存储 人工智能 算法
如何对乘积量化进行倒排索引?
结合聚类、乘积量化与倒排索引,可高效实现近似最近邻检索。先用K-Means将样本分为1024类,以类中心为基准计算残差向量,并用乘积量化压缩存储。查询时,先定位最近聚类,查倒排表获取候选向量,再通过量化距离计算快速返回Top-K结果。该方法大幅减少搜索空间,在保证精度的同时提升速度,广泛应用于图像检索、推荐系统等领域,适用于各类高维向量的快速匹配。
|
2月前
|
算法 搜索推荐 索引
签检索:合理使用标签过滤和划分索引空间
广告引擎通过标签优化索引设计:高区分度标签用于倒排索引,低区分度的加入过滤列表,高覆盖维度则用于索引分片。结合树形结构分流、倒排检索与结果过滤,有效缩小检索空间,提升匹配效率。(239字)
|
2月前
|
NoSQL 索引
SSTable 的分层管理设计
SSTable分层管理通过将文件按层组织,控制每层容量并逐层归并,避免大规模合并带来的高IO开销。Level 0层来自Immutable MemTable,最多4个文件;后续各层容量逐层翻倍,并限制跨层合并的文件数不超过10个,确保查询与Compaction效率。
|
2月前
|
存储 搜索推荐 索引
如何用前缀树优化 GeoHash 编码的索引?
利用前缀树(Trie)可高效索引GeoHash编码,通过字符逐层匹配实现快速区域检索。前缀树结构与四叉树类似,适用于字符串前缀匹配,广泛用于字典查找和多维空间索引。