向量库(Vector Database)

向量库
1. 向量库发展史
- 早期阶段(2000s)
- 基于关系型数据库的扩展(如 PostgreSQL 的向量插件)。
- 简单相似度计算(如欧氏距离、余弦相似度)。
- 专用向量库的兴起(2010s)
- FAISS(Facebook AI Research,2017):首个高效向量检索库。
- Annoy(Spotify,2013):基于树的近似最近邻搜索。
- Milvus(2019):首个开源分布式向量数据库。
- 现代阶段(2020s)
- 云原生向量库(如 Pinecone、Weaviate)。
- 多模态支持(文本、图像、视频向量统一管理)。
- 与 AI 生态深度集成(如结合大语言模型)。
2. 向量库核心技术点
-
核心组件
- 索引结构:支持高效查询的数据结构(哈希、树、图、量化等)。
- 相似度算法:余弦相似度、欧氏距离、内积等。
- 分布式架构:水平扩展、负载均衡、容灾恢复。
- 存储优化:压缩技术(如 PQ 乘积量化)、内存管理。
-
核心功能
- 向量插入、删除、更新。
- 近似最近邻搜索(ANN)。
- 混合查询(向量 + 结构化数据过滤)。
3. 相似度搜索算法分类
-
基于哈希(Hash-based)
- 局部敏感哈希(LSH)
- 原理:通过哈希函数将相似向量映射到相同桶。
- 适用场景:高维数据快速检索。
- 支持的库:FAISS(LSH 索引)、Vald。
- 多探针 LSH
- 改进:允许跨桶搜索,提高召回率。
- 局部敏感哈希(LSH)
-
基于树(Tree-based)
- KD-Tree
- 原理:递归划分高维空间。
- 缺点:高维数据效率低。
- Ball Tree
- 改进:以超球体划分空间,适合高维数据。
- Annoy(Approximate Nearest Neighbors Oh Yeah)
- 原理:构建多棵二叉树,通过投票机制合并结果。
- 支持的库:Annoy、Elasticsearch(部分支持)。
- KD-Tree
-
基于图(Graph-based)
- HNSW(Hierarchical Navigable Small World)
- 原理:构建分层图结构,快速导航到近邻。
- 优势:高召回率、低延迟。
- 支持的库:FAISS、Milvus、Weaviate。
- NSG(Navigating Spreading-out Graph)
- 改进:优化图结构,减少内存占用。
- HNSW(Hierarchical Navigable Small World)
-
基于量化(Quantization-based)
- IVF(Inverted File Index)
- 原理:聚类向量,建立倒排索引。
- 支持的库:FAISS、Milvus。
- PQ(Product Quantization)
- 原理:将高维向量分解为子空间并量化。
- 优势:大幅减少内存占用。
- 支持的库:FAISS、Milvus。
- IVF(Inverted File Index)
-
混合方法
- IVF-PQ:结合倒排索引和乘积量化。
- HNSW + IVF:分层图与聚类结合。
4. 主流向量库推荐
-
开源向量库
- FAISS
- 特点:高性能、支持多种索引(IVF、HNSW、PQ)。
- 适用场景:单机小规模数据。
- Milvus
- 特点:分布式、支持混合查询、云原生。
- 适用场景:大规模生产环境。
- Weaviate
- 特点:内置多模态模型、GraphQL 接口。
- Annoy
- 特点:轻量级、基于树的索引。
- FAISS
-
商业/云服务
- Pinecone
- 特点:全托管、自动索引优化、低延迟。
- Zilliz Cloud
- 特点:基于 Milvus 的云服务,企业级功能。
- Pinecone
5. 学习方法与资源
-
学习路径
- 基础理论:线性代数(向量空间、距离度量)、数据结构(树、图)。
- 工具实践:FAISS/Milvus 官方文档、示例代码。
- 算法深入:阅读论文(如 HNSW、PQ 的原始论文)。
-
推荐资源
- 书籍:
- 《Nearest Neighbor Search: A Database Perspective》
- 《Similarity Search and Applications》
- 论文:
- HNSW(arXiv:1603.09320)
- PQ(arXiv:1009.4579)
- 在线课程:
- Coursera《Approximate Nearest Neighbor Search for Machine Learning》
- 社区:
- GitHub(FAISS、Milvus 仓库)。
- 知乎、Stack Overflow 技术讨论。
- 书籍:
-
动手实践
- 使用 FAISS 实现 IVF-PQ 索引。
- 在 Milvus 中部署分布式向量检索服务。
- 对比 HNSW 与 IVF 的召回率与性能。
6. 使用向量库的典型流程
-
数据准备
- 生成向量(使用预训练模型如 BERT、ResNet)。
- 数据清洗与归一化。
-
索引构建
- 选择算法(HNSW、IVF-PQ 等)。
- 配置参数(如聚类数、量化维度)。
-
查询优化
- 调整搜索参数(
nprobe、efSearch)。 - 混合过滤(结合结构化条件)。
- 调整搜索参数(
-
性能监控
- 召回率(Recall)与延迟(Latency)权衡。
- 资源占用(内存、CPU/GPU 利用率)。
7. 重要补充技术
-
量化技术(Quantization)
- 标量量化(SQ):降低向量精度(如 float32 → int8)。
- 残差量化(RQ):多阶段量化提升精度。
-
近邻图算法变种
- NGT(Neighborhood Graph and Tree):结合图与树结构。
- SPTAG(微软):基于图的分布式索引。
-
GPU 加速
- RAPIDS RAFT:基于 CUDA 的加速库。
- Milvus GPU 版:支持 GPU 索引构建与查询。
8. 应用场景
- 推荐系统:用户/商品向量匹配。
- 图像检索:以图搜图、版权检测。
- 自然语言处理:语义搜索、问答系统。
- 生物信息学:基因序列比对。
9. 未来趋势
- 自动化索引调优:基于机器学习的参数优化。
- 多模态统一检索:文本、图像、视频跨模态搜索。
- 边缘计算:轻量级向量库在端侧设备的应用。
通过此大纲,您可以从理论到实践全面掌握向量库的核心知识,并选择合适的工具与算法解决实际问题。
相关文章:
向量库(Vector Database)
向量库 1. 向量库发展史 早期阶段(2000s) 基于关系型数据库的扩展(如 PostgreSQL 的向量插件)。简单相似度计算(如欧氏距离、余弦相似度)。 专用向量库的兴起(2010s) FAISS…...
torchsparse安装过程的问题
1、项目要求torchsparse githttps://github.com/mit-han-lab/torchsparse.gitv1.4.0 2、torch1.8.1cu111 nvcc--version:11.1 这个版本的cuda匹配的gcc、g经常是7.5。设置为7.5. (这个gcc、g版本修改不一定,可以先进行后面的,…...
【核心算法篇七】《DeepSeek异常检测:孤立森林与AutoEncoder对比》
大家好,今天我们来深入探讨一下《DeepSeek异常检测:孤立森林与AutoEncoder对比》这篇技术博客。我们将从核心内容、原理、应用场景等多个方面进行详细解析,力求让大家对这两种异常检测方法有一个全面而深入的理解。 一、引言 在数据科学和机器学习领域,异常检测(Anomaly…...
Win10环境使用零讯ZeroNews内网穿透实现Deepseek对外服务
Win10环境使用零讯ZeroNews内网穿透实现Deepseek对外服务 前言 之前笔者已经在Win10环境搭建好了Ollama、DeepSeek、Open WebUI、Dify等组件,成功实现了私有化部署及内网访问: https://lizhiyong.blog.csdn.net/article/details/145505686 https://l…...
CUDA 安装 一直卡在Installing Nsight Visual Studio Edition
最近在安装CUDA的时候,CUDA 安装 一直卡在Installing Nsight Visual Studio Edition,莫名的一直卡在安装进行中这儿,过很久都没进度,如图 后面重新下载了12.6的进行安装也是如此 无论是local还是network,都是这样。度…...
Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网
| 线上研讨会时间:2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括:是否只需集成单一的工…...
STM32 定时器产生定周期方法
目录 背景 程序 第一步、使能PCLK1外设时钟编辑 第二步、时基单元配置 第三步、配置NVIC(设置定时中断优先级)编辑 第四步、使能溢出中断 第五步、使能定时器 第六步、填写中断处理函数(ISR) 背景 在单片机开发当中&…...
解锁机器学习核心算法 | 支持向量机:机器学习中的分类利刃
一、引言 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森林、K - 近邻算法、K - 平均算法、支持向…...
青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署
青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署 一、软件开发部署部署的主要内容部署的步骤部署的方式部署的环境 二、Django项目部署1. 准备工作2. 代码部署3. 配置Django项目4. Web服务器和应用服务器配置5. 安全和性能优化6. 监控和日志管理7. 测试和上线 三、在U…...
ARM系统源码编译OpenCV 4.10.0(包含opencv_contrib)
因项目部署在ARM系统上,需要编译一个arm版本的opencv-4.10.0(带opencv_contrib)版本。 若需要Linux系统下源码安装OpenCV,可参考:https://blog.csdn.net/qq_45445740/article/details/142770493?spm1001.2014.3001.55…...
cmake:定位Qt的ui文件
如题。在工程中,将h,cpp,ui文件放置到不同文件夹下,会存在cmake找不到ui文件,导致编译报错情况。 cmake通过指定文件路径,确保工程找到ui文件。 标识1:ui文件保存路径。 标识2:添加…...
(leetcode 1749 前缀和)1749. 任意子数组和的绝对值的最大值
核心题意 任意子数组和 的绝对值的最大值实际上是前缀和之间的差的最大值 建立前缀和数组 如果我们只考虑前缀和的最大值和最小值之差,那么就能够获得一个最大的子数组和的绝对值。因为任意一个子数组的和 prefix[j1] - prefix[i],它的绝对值是最大当…...
下载安装运行测试开源vision-language-action(VLA)模型OpenVLA
1. 安装 项目官网OpenVLA 首先按照官网提示的以下代码,执行创建环境->安装最小依赖->git克隆项目等 # Create and activate conda environment conda create -n openvla python3.10 -y conda activate openvla# Install PyTorch. Below is a sample comma…...
【网络安全 | 漏洞挖掘】我如何通过Cookie Manipulation发现主域上的关键PII?
未经许可,不得转载。 文章目录 正文正文 在分析 Example.com 的认证机制时,我注意到一个特定的 cookie,USER_ID,包含了一个具有预测性的会话标识符,其格式为: USER_ID="VYCVCDs-TZBI:XXXX-random-data"其中,XXXX 是由四个大写字母组成的部分,我使用 Burp S…...
【操作系统】操作系统概述
操作系统概述 1.1 操作系统的概念1.1.1 操作系统定义——什么是OS?1.1.2 操作系统作用——OS有什么用?1.1.3 操作系统地位——计算机系统中,OS处于什么地位?1.1.4 为什么学操作系统? 1.2 操作系统的历史1.2.1 操作系统…...
SQL Server 运算符优先级
在 SQL Server 中,运算符的优先级决定了在没有使用括号明确指定计算顺序时,运算符的执行顺序。 运算符优先级列表 括号 () 一元运算符 (正号)-(负号)~(按位取反) 乘法、除法和取模…...
Python的顺序结构和循环结构
文章目录 一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(c)多分支 if-elif-elif-...-else (3)注意事…...
深入浅出TypedArray:网络数据处理、WebGPU与加密实战
JavaScript的TypedArray是现代Web开发中处理二进制数据的利器。本文将结合网络数据传输、WebGPU编程和简单加密算法三个实战场景,带你领略TypedArray的强大能力。 一、TypedArray基础认知 TypedArray家族包括Int8Array、Uint16Array、Float32Array等11种视图类型&a…...
http 响应码影响 video 标签播放视频
背景 使用后端给的文件下载接口地址实现视频播放,但是 video 标签一直无法播放视频如下图,把接口地址放到浏览器请求能直接下载。但就是不能播放 原因 http 响应码不正确,返回201是无法播放视频200可以如下图 状态码的影响: 20…...
观察者模式原理详解以及Spring源码如何使用观察者模式?
前言 首先说明观察者模式,观察者模式,也叫发布-订阅模式,应该是用来处理对象间的一对多依赖关系的。当被观察者的状态变化时,所有依赖它的观察者都会得到通知并自动更新。 观察者模式的结构,通常包括Subject࿰…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
