向量数据库中的PQ(Procduct Quantization)

news2025/1/4 17:16:46

为了加快向量之间距离计算和比较速度,有人发明的Product Quantization方法,这个方法并不是一种索引,所以它并不能减少目标向量(要查找的向量),与数据库中向量的比较次数,但是它可以加快与每个数据库中向量比较时的计算量。

这个方法分为两部分,

第一部分是量化,其思想如下:

a)把一个维度很高的向量切分成好几个段,例如,128维度,切分成4段每段32维度的小向量,怎么切分呢?其实没啥高深复杂的,就是简单的从左到右直接切分(至于网上论文中所说的什么笛卡尔积、向量乘法之类唬人的名词,根本就不是这么回事,当然也不排除可能有更合适的切分方法)

b) 向量数据库中的所有向量,切分后的第一个段(32维度的向量),都取出来,做kmeans,计算它们的中心点,至于这些向量要分成几个区域,就由量化设计者决定了,例如,我决定分为256个区域,那么向量数据库中所有向量都拿出第一个段(32维度的向量),做kmeans,计算出256个中心点后,然后再把所有向量的第一段,分配给这256个区域,怎么分呢?分配到与它距离最近的个中心点,并且,我们给每个中心点一个编号(ID),每个库向量的第一个段,分配到某个中心点后,就用这个中心点的ID表示这个段的32维度的向量,这里的分配并不是归类存储,而是计算每个库向量的第一个段,应由哪个中心点的ID代表。这个信息要记下来。

然后所有库向量取出第二个段,也是用kmeans算法得到256个中心点,并编号,然后每个库向量的第二个段,用与它最近的中心点的ID代替。

然后所有库向量取出第三个段,用kmeans算法得到256个中心点,编号,然后每个库向量的第三个段,用与它最近的中心点的ID代替。

然后所有向量库取出第四个段,用kmeans算法得到256个中心点,编号,然后每个库向量的第四个段,用与它最近的中心点的ID代替。

这样对于向量数据库中的每个128维向量,都可以用4个ID组成的数组代替了,由于这些ID的编号是0-255,因此每个ID只用一个byte就可以表示,可以把这4个ID组成的数组,也看成是一个向量,只有4维并且每个维度8bit,当然这个4维的向量需要一个参照,就是每个段的256个中心点。

有了每个段的256个中心点这个参照,就可以可以把数据库中的每个128维向量,按照上面的方法,转化成4个ID组成的数组,这4个ID组成的数组就可以近似的代替这个128维的向量,这个4维数组,就是128维向量“量化”后的结果。

这4段每段256个中心点就是一个“码表”(这个定义尚未统一,有人觉得码表也包括所有量化后的向量)

总之,经过上面的“量化”,得到了每段的中心点和所有原始向量量化后的向量,它们共同组成的信息库,后面就可以用来快速比较了。

第二部分是比较

有了前面的量化后的数据:每段的中心点和(数据库中)每个向量的量化表示。当有目标向量到来,想要和库中的所有向量比较,找到最近的前K个时,这个比较方法是怎样的呢?

a)首先目标向量也要分段,按照其它向量的方式分,例如,128维的目标向量分为4段,每段是一个32维的向量。

b)数据库中存储着每个段的256个中心点,目标向量的每个段,要计算这个32维向量与每个中心点的距离,即每个段会得到256个距离,这些距离要保存下来。对于本例,一共需要计算4x256个距离。

c)前一步其实完成了目标向量的量化和码表计算,它的码表就是这4x256个距离,这些距离可以放到二维数组里,对于每个段,每个距离都有一个编号,这个编号和其对应中心点的编号相同,如下图:

d)然后就要比较了,比较时,对于一个量化后的库向量,它由4个ID组成,对于目标向量,之前已经计算好每个段的32维向量与各自段中256个中心点的距离,并且距离的编号与数据库码表中心点的编号一一对应,因此,假设取出一个库向量的第一个ID,在目标向量的距离码表的第一段中查出一个距离d1,这就是目标向量与库向量的距离在第一段中的距离(这只是两个向量总的距离指标的一个分量),然后取库向量的第二个ID,在目标向量的距离码表的第二段中查出一个距离d2,这是第二段的距离,然后再查出第三段距离d3、第四段的距离d4,最后,把d1+d2+d3+d4的和作为整个目标向量与这个库向量的距离指标。计算一个目标向量与一个库向量距离的过程,只要4次查表和3次加法,要比如实的计算两个128维向量的距离要快的多。

当然对于每个目标向量,都要有个建立距离表的过程,但是这只需要建立一次,就可以用于多次与库向量的距离计算。

参考

【Faiss】PQ和IVF介绍_ivf算法-CSDN博客

理解 product quantization 算法

https://zhuanlan.zhihu.com/p/560981386

图像检索:再叙ANN Search

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2063911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑神话孙悟空:自媒体小白的流量密码!

当下,黑神话孙悟空的热度如熊熊烈火,席卷了整个游戏世界。 只要与这个话题沾边,似乎就能轻松吸引大量关注。 那么,对于不怎么懂自媒体运营的小伙伴来说,该如何抓住这个机遇呢? 别担心,我们用以…

IO进程线程8月22日

1&#xff0c;思维导图 2&#xff0c;使用read和write实现文件拷贝 #include<myhead.h> int main(int argc, const char *argv[]) {int fp1,fp2;char a[1];fp1open("./1.txt",O_RDONLY);fp2open("./2.txt",O_CREAT|O_TRUNC|O_WRONLY,0664);if(fp1-…

简过网:博士考公务员有什么优势?还需要笔试吗?

博士生考公务员需要面试吗&#xff1f;这要看具体情况&#xff0c;一般来讲&#xff0c;公务员考试分为国考、省考和单招&#xff01; 很多公务员单招的一般可以免笔试&#xff0c;但是需要面试&#xff0c;但是对于国考和省考和统考来讲&#xff0c;博士是不能免笔试的&#…

hive4.0.0部署以及与MySQL8.4连接

在开始之前&#xff0c;需要在主机上准备好MySQL数据库&#xff0c;并且已经完成了hdfs和yarn的部署 步骤1&#xff1a;MySQL的配置 以root用户登录mysql后执行以下命令&#xff1a; grant all privileges on *.* to root% with grant option; flush privileges; 这样我们就…

解码极氪汽车的短期成效与长期定力

近日&#xff0c;极氪汽车&#xff08;NYSE&#xff1a;ZK&#xff0c;下同“极氪”&#xff09;公布了截止2024年第二季度的业绩公告。 不难发现&#xff0c;极氪汽车实现了交付数量与经营业绩的双螺旋增长&#xff0c;稳居新能源自主品牌第一梯队。不仅如此&#xff0c;极氪…

JavaEE从入门到起飞(九) ~Activiti 工作流

工作流 当一道流程逻辑需要用到多个表单的提交和多个角色的审核共同完成的时候&#xff0c;就可以使用工作流。 工作流一般使用的是第三方技术&#xff0c;也就是说别人帮你创建数据库表和service层、mapper层&#xff0c;你只需要注入工具接口即可使用。 原理&#xff1a;一…

深度优先搜索-放苹果

放苹果 http://noi.openjudge.cn/ch0205/666/ #include<bits/stdc.h> using namespace std;int dfs(int,int); //第一个赋值为1 其余为0 int a[11]{1},ans,n,m;int main(){ int k; cin>>k; for(int i1;i<k;i){ ans0; cin>>m>>n; dfs(m,1);//m个…

滴答拍摄影项目

TOC springboot0796滴答拍摄影项目 第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对拍摄影方面的要求也在不断提高&#xff0c;旅游的人数更是不断增加&#xff0c;使得拍摄影项…

FPGA开发——IIC协议介绍

简介 其实关于IIC通信协议的相关原理的相关理论我在最开始的文章当中进行过讲解&#xff0c;但是没有详细的去进行过说明&#xff0c;在今天的这篇文章中我们就来详细说明一下IIC协议的相关理论。 一、IIC 总线组成 1、定义介绍 采用串行总线可以简化系统硬件结构、减小系统…

科技在环境保护中的作用

面对日益严峻的环境问题&#xff0c;‌科技在环境保护中发挥着越来越重要的作用。‌从清洁能源的开发和应用&#xff0c;‌到环保技术的不断进步&#xff0c;‌再到智能环保监测系统的建立&#xff0c;‌科技正以前所未有的力量推动着环境保护事业的发展。‌ 清洁能源技术的开…

揭秘!移动安全管理系统是什么?有什么功能?(从小白到精通一文揭晓!)

在2024年&#xff0c;移动终端管控软件在企业和组织中的应用日益广泛。 移动安全管理系统不仅提高了管理效率&#xff0c;还增强了数据安全性和移动办公的便捷性。 以下是六款值得推荐的移动终端管控软件&#xff1a; 1. 安企神 特点&#xff1a;作为行业领头羊&#xff0c;…

【PHP入门教程】PHPStudy环境搭建+HelloWorld运行

文章目录 PHP 的历史PHP 的用途PHP 的特点和优势PHP 环境搭建环境准备安装window 安装CentOS / Ubuntu / Debian 安装 第一个Hello World使用Apache服务运行命令行运行代码 PHP 的历史 PHP&#xff08;Hypertext Preprocessor&#xff09;超文本预处理器是一种开源的通用脚本语…

m3u8转mp4,3款软件让你快速转换!

在这个数字化时代&#xff0c;视频已成为我们生活中不可或缺的一部分。无论是学习资料、娱乐影片还是工作演示&#xff0c;视频文件总是以不同的格式存在。其中&#xff0c;M3U8和MP4作为两种常见的视频格式&#xff0c;各有其应用场景。然而&#xff0c;有时我们需要将M3U8格式…

如何在算家云搭建模型Linly-Talker(数字人文本配音)

一、模型介绍 Linly-Talker 是一款集成了多种人工智能技术的数字人对话系统&#xff0c;集成了各种技术,例如 Whisper、Linly、微软语音服务和 SadTalker 会说话的生成系统。该系统部署在 Gradio 上&#xff0c;用户可通过上传图像与 AI 助手进行互动&#xff0c;可以根据自己…

UDP+TCP

一、UDP协议 1.recvfrom:recvform(int sockfd,void *buf,size_t len,int flags,struct sockaddr *src_addr,socklen_t *addrlen); 参数&#xff1a;socket的fd; 保存数据的空间地址 &#xff1b; 空间大小&#xff1b; 默认接收方式&#xff08;默认阻塞&#xf…

【蓝桥杯集训100题】scratch游泳时长 蓝桥杯scratch比赛专项预测编程题 集训模拟练习题第27题

目录 scratch游泳时长 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 scratc…

5 分钟 Stable Diffusion 本地安装指南

一、Stable Diffusion 简介 Stable Diffusion 是一款非常强大的基于深度学习的 AI 图像生成技术。它由众多研究团队和开发者共同努力而成&#xff0c;其中包括德国慕尼黑大学和总部位于纽约的 RunwayML 公司的国际研究团队。 Stable Diffusion 的工作原理基于扩散模型。简单来…

TCP和UDP编程的学习

UDP编程特点&#xff1a;c/s模型 不可靠 &#xff1b; 无链接 &#xff1b;数据报形式&#xff08;效率高&#xff09;&#xff1b; TCP编程特点&#xff1a; 面向链接&#xff1b; 可靠传输&#xff1b;&#xff08;保证数据准确可靠&#xff09;&#xff1b; 面向字节流&a…

ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南

目录 全面掌握&#xff1a;JavaScript解构赋值的终极指南 一、数组解构赋值 1、基本用法 2、跳过元素 3、剩余元素 4、默认值 二、对象解构赋值 1、基本用法 2、变量重命名 3、默认值 4、嵌套解构 三、复杂的嵌套结构解构 四、函数参数解构赋值 1、对象解构作为函…

wordrpess心得

基本心得 多语言切换方式&#xff1a; 使用en.xxxx和jp.xxx多域名实现&#xff0c;配合宝塔面板管理 举例&#xff1a;切换按钮 <div class"language-switcher"><a class"language-button" href"https://xxx">JA</a> <a c…