FaissPQ索引简介

简介: FaissPQ索引简介

1.png

1.向量检索问题
随着神经网络的发展,embedding的思想被广泛的应用在搜推广、图像、自然语言处理等领域,在实际的工业场景中,我们常常会遇到基于embedding进行文本、图像、视频等物料的相关内容检索问题,这类问题通常要求在几毫秒的时间内完成百万甚至亿级别候选物料上的检索。
在这类问题中,主要需要考虑的三个问题是速度、内存以及准确性,其中速度是必须要解决的问题,同时我们希望能在保证速度的基础上,尽可能的提升准确率,降低内存占用。因此可以想到,我们是不是可以通过一定的方法,利用内存和准确率来换取查询速度的提升。
Faiss是由FacebookAI团队开发的向量检索库,提供了多种向量查询方案,可以实现在亿级别候选物料上的毫秒级查询,是目前最主流的向量检索库。在Faiss中,把具体的查询算法实现称为索引,由于faiss中提供了多种类型的索引,因此了解其中不同索引索引的实现方式对于我们的应用就尤为关键。

2.faiss索引类型

2.png

3.乘积量化

3.1 向量量化
在介绍乘积量化前,首先需要介绍向量量化的基本概念。
向量量化和信号编码的概念基本类似,就是将由连续值构成的向量xxx从欧式空间映射到一个由有限离散值构成的集合C=ci,i∈[1,l]C={c_i, i \in [1,l]}C=ci​,i∈[1,l]中,定义该映射为qqq,则q(x)∈Cq(x) \in Cq(x)∈C,这里CCC也成为codebook。

3.png

3.2 乘积量化

4.png

3.3 空间占用对比

假设向量维度为D,向量量化的codebook大小为kkk,存储codebook需要kDkDkD的空间;乘积量化每个分段只需要k∗k^k∗的codebook大小,存储codebook需要k∗Dk^Dk∗D的空间。可以发现,分段量化后可以在空间占用更小的情况下达到一样大的codebook规模。

3.4 faiss中乘积量化的应用

5.png

在faiss的乘积量化的实现中,还引入了层次化量化的思想,在乘积量化前引入了一层粗糙量化,形成粗糙量化+细粒度量化的两层结构。引入粗糙量化的主要目的在于优化查询速度,由于候选向量的数量级一般较大,如果直接遍历所有候选,效率还是很难达到要求。加入粗糙量化后,通过计算查询向量到粗糙量化类簇中心的聚类就可以选出几个最有可能包含正确结果的类簇,然后再在这些类簇上进行第二级的查询,就可以大大缩减查询时间,同时保证查询效率
索引构建:

  1. 构建第一层的量化器qcq_cqc​,codebook CcC_cCc​,得到每个向量X的向量量化结果xc=qc(x)x_c=q_c(x)xc​=qc​(x)
  2. 计算每个向量粗糙量化后的残差xr=x−xcx_r=x-x_cxr​=x−xc​,对xrx_rxr​进行乘积量化

粗糙量化+细粒度量化的形式可以进一步加快查询速度,但是也会造成一定的召回率损失,实际应用时需要通过调参较低这一影响。
在粗糙聚类后,各个类簇内的向量分布可能差异较大,如果直接用原始向量进行细粒度量化,可能在检索时会放大误差,使用残差进行细粒度量化能缓解这个问题。

向量查询
在两层量化构建索引后,查询可以改写为如下形式
d(x,y)=d(y,xc+xr)=∣∣y−xc∣∣2+∣∣xr∣∣2+2xcxr−2yxrd(x,y) = d(y, x_c+x_r) = ||y-x_c||^2+||x_r||^2+2x_cx_r-2yx_rd(x,y)=d(y,xc​+xr​)=∣∣y−xc​∣∣2+∣∣xr​∣∣2+2xc​xr​−2yxr​
其中,∣∣xr∣∣2+2xcxr||x_r||^2+2x_cx_r∣∣xr​∣∣2+2xc​xr​和y无关,可以预先计算缓存,∣∣y−xc∣∣2||y-x_c||^2∣∣y−xc​∣∣2部分需要计算查询向量yyy到粗糙聚类中心的距离,这部分的计算量取决于训练时设定的粗糙聚类中心个数,2yxr2yx_r2yxr​部分需要计算查询向量和簇内残差向量,这部分计算量和设定的查询类簇数量相关,最坏情况下需要遍历所有类簇。
3.5 超参
构建PQ索引时,超参数的选择会在很大程度上影响线上效果,需要多调参找到召回率和耗时之间的trader-off。
主要影响效果的参数包括粗糙量化类簇个数、分块数量、分块字节等影响索引训练的参数,查询的类簇数量这种影响查询阶段的参数,除此之外PQ索引类型对查询效果也有很大影响,可以尝试PQ,OPQ,PQ with PCA等不同索引。
4.参考资料

Huang J T , Sharma A , Sun S , et al. Embedding-based Retrieval in Facebook Search[C]// 2020.
faiss wiki:github.com/facebookres…
语义向量召回之ANN检索:mp.weixin.qq.com/s/YOnzPcQia…
Faiss基于PQ的倒排索引实现:zhuanlan.zhihu.com/p/34363377

相关文章
|
运维 关系型数据库 OLAP
阿里云百炼 x AnalyticDB向量引擎, 搭积木式轻松开发专属大模型应用
对大模型应用跃跃欲试,但奈何技术栈复杂难以下手?已经进行试水,但缺乏调优手段无法保障召回率和问答准确度?自行搭建大模型、向量检索引擎、服务API等基础组件难以运维?大模型种类繁多,但缺乏行业模型和应用模板?阿里云百炼 x AnalyticDB向量引擎推出一站式企业专属大模型开发和应用平台,像搭积木一样轻松完成企业专属大模型应用的开发,提供应用API,可一键接入企业自己的业务应用对外提供服务。
2940 2
|
4月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
311 100
|
4月前
|
存储 机器学习/深度学习 人工智能
向量数据库
向量数据库是AI时代的“记忆中枢”与“索引引擎”,将图像、文本等非结构化数据转化为高维向量,实现语义级检索。它支撑RAG、多模态搜索、智能推荐等应用,助力大模型获取实时、私有知识,推动AI原生应用落地,正成为连接AI与数据世界的基石。
|
7月前
|
人工智能 自然语言处理 算法
AI时代如何让大模型「读懂」企业数据?——从“单一问数”到“复杂决策”的智能跃迁
从早期的传统BI,到敏捷BI,再到智能BI,BI工具正逐步进化为具备类人推理能力的数字助手。Gartner预测,到2025年,增强型消费者体验将首次推动增强型BI(ABI)能力的采用率超过50%,这将深刻重塑企业的业务流程与决策模式,“人人都是数据消费者”的时代正加速到来。
1032 1
|
存储 数据库 索引
faiss 三种基础索引方式
faiss 三种基础索引方式
1068 1
|
9月前
|
运维 监控 安全
【案例分享】中国通号卡斯柯公司:ZABBIX如何破解轨道交通监控难题
本文根据2023上海峰会上朱林贤的演讲整理,聚焦中国通号卡斯柯公司如何借助Zabbix实现轨道交通信号系统的智能化管理。作为中外合资企业,卡斯柯通过统一平台整合设备监控,大幅降低成本并提升灵活性,成功应用于国内外项目。文章探讨了传统监控系统的痛点、研发维护经验及国产化与开源技术挑战,为行业转型提供了宝贵启示。未来,开放协作将是推动轨道交通智能化发展的关键。
473 8
轻松玩转人物风格迁移!DualStyleGAN让你一键生成各种风格人物图片!【一个有趣的开源项目】
轻松玩转人物风格迁移!DualStyleGAN让你一键生成各种风格人物图片!【一个有趣的开源项目】
|
物联网 Linux 网络安全
dpdk03-概念补充
dpdk03-概念补充
|
机器学习/深度学习 人工智能 自然语言处理
LLM主流开源代表模型(一)
随着ChatGPT迅速火爆,引发了大模型的时代变革,国内外各大公司也快速跟进生成式AI市场,近百款大模型发布及应用。
|
存储 机器学习/深度学习 自然语言处理
大模型Prompt-Tuning技术进阶
近年来,随着Prompt-Tuning技术的崛起,研究者们发现,在拥有超过10亿参数的大规模模型上,采用Prompt-Tuning相较于传统的Fine-tuning方法能带来显著的性能提升。特别是在小样本甚至零样本学习场景下,Prompt-Tuning能够极大地激发模型的潜力。这一成就的取得主要归功于三个关键因素:模型庞大的参数量、训练过程中使用的海量语料,以及精心设计的预训练任务。