当前位置: 首页 > news >正文

每天学一个算法--向量检索

📘 教案 28:向量检索(Embedding + ANN · 工程级)


一、问题模型(从 BM25 的局限出发)

BM25 本质是:

基于“词”的匹配

问题:

  • 同义词无法匹配
  • 语义无法理解
  • 句子级关系缺失

目标升级

给定:

  • 查询 ( q )
  • 文档集合 ( D )

希望找到:

语义上最相似的文档


数学化表达


将文本映射为向量:

[q→vq∈Rd][ q \rightarrow \mathbf{v}_q \in \mathbb{R}^d ][qvqRd]

[di→vi∈Rd][ d_i \rightarrow \mathbf{v}_i \in \mathbb{R}^d ][diviRd]


目标:

[Top-K=arg,max⁡i;sim(vq,vi)][ \text{Top-K} = \operatorname*{arg,max}_i ; sim(\mathbf{v}_q, \mathbf{v}_i) ][Top-K=arg,maxi;sim(vq,vi)]


常用相似度


1️⃣ 余弦相似度

[sim=vq⋅vi∣∣vq∣∣,∣∣vi∣∣][ sim = \frac{\mathbf{v}_q \cdot \mathbf{v}_i}{||\mathbf{v}_q|| , ||\mathbf{v}_i||} ][sim=∣∣vq∣∣,∣∣vi∣∣vqvi]


2️⃣ 欧氏距离

[∣∣vq−vi∣∣][ ||\mathbf{v}_q - \mathbf{v}_i|| ][∣∣vqvi∣∣]


二、暴力方法(不可用)


直接计算:

[O(n⋅d)][ O(n \cdot d) ][O(nd)]


如果:

n = 10^8 d = 768

👉 完全不可行


三、问题本质


在高维空间中寻找“最近邻”


这类问题称为:

[Nearest Neighbor Search (NN)][ \text{Nearest Neighbor Search (NN)} ][Nearest Neighbor Search (NN)]


四、核心难点


高维空间问题


随着维度增加:

距离失去区分度

👉 KD-Tree 等结构失效


五、解决方案:ANN(Approximate Nearest Neighbor)


允许:

近似解(但很接近)

目标:

  • 大幅减少计算量
  • 牺牲极少精度

六、主流算法体系


1️⃣ 基于图:HNSW(最重要)


核心思想

构建多层图:

上层:稀疏(快速定位) 下层:密集(精确搜索)

搜索过程


Step 1:从顶层开始

随机进入一个点

Step 2:贪心搜索

不断走向“更近的邻居”

Step 3:逐层下降

越来越精细

Step 4:底层 Top-K


复杂度

[O(log⁡n)][ O(\log n) ][O(logn)]


本质

用“图结构”近似高维空间


七、2️⃣ IVF(倒排文件索引)


核心思想


Step 1:聚类(K-Means)

数据分成 K 个中心

Step 2:查询时

只搜索最近的几个簇

优点

  • 可控

缺点

  • 精度依赖聚类质量

八、3️⃣ PQ(Product Quantization)


核心思想


将向量分块:

[ v1 | v2 | v3 | v4 ]

每块量化:

用码本表示

👉 压缩存储 + 快速距离计算


优点

  • 极大减少内存
  • 支持大规模数据

九、FAISS(工业实现)


Facebook 提供:

FAISS = IVF + PQ + HNSW

组合方式:

结构作用
IVF减少搜索范围
PQ压缩
HNSW加速搜索

十、完整查询流程(工程)


用户输入 ↓ Embedding(模型) ↓ 向量 q ↓ ANN 检索(FAISS) ↓ 候选 Top-K ↓ (可选)BM25 / rerank ↓ 返回结果

十一、与传统搜索融合(关键)


现代系统:

BM25 + 向量检索

两种方式:


1️⃣ 并行召回

BM25 → Top-K1 ANN → Top-K2 合并

2️⃣ 重排序(rerank)

BM25 召回 → 用向量排序

十二、工程关键指标


1️⃣ Recall(召回率)

找到多少真实 Top-K

2️⃣ Latency(延迟)


3️⃣ Memory(内存)


👉 三者必须平衡


十三、本质总结(严肃表达)


向量检索通过将数据映射到高维连续空间,并利用近似最近邻搜索算法在可控误差范围内高效定位相似向量,从而实现语义级别的信息检索,其性能依赖于空间划分策略、图结构设计及向量压缩技术。

http://www.jsqmd.com/news/700079/

相关文章:

  • 使用FreeRTOS时的一些注意事项
  • 网络安全学习路线-超详细
  • RS485网络拓扑结构
  • AiPy帮我工作后,我开始躺平摸鱼
  • 算法打卡第12天|多数元素
  • AI提示词库:结构化规则提升AI编程助手效率与代码质量
  • Superturtle:模块化命令行工具集的设计哲学与自动化实践
  • 编译原理实践:在Windows系统上快速搭建Flex词法分析环境与入门测试
  • 3个步骤解决PCL2启动器资源文件下载异常问题:告别“文件已损坏“的困扰
  • C++ MCP网关性能卡在8万QPS?(2024年Linux 6.8+eBPF验证版调优清单)
  • 【Flutter for OpenHarmony第三方库】Flutter for OpenHarmony 音频播放功能适配与实现指南
  • 暗黑破坏神2存档编辑神器:网页版d2s-editor完全指南
  • 网络通信安全技术:加密与认证机制详解
  • 忍者像素绘卷微信小程序性能优化:像素图WebP压缩+渐进式加载
  • CYT4BF芯片“救砖”指南:当设备进入DEAD状态,如何利用RMA流程进行故障分析
  • 从汽车ECU通信到智能家居:深入浅出聊聊CAN数据帧里的‘仲裁’到底在争什么?
  • 用VCS和Verdi联手分析UPF:从仿真波形里看懂电源域开关
  • 股票交易执行算法研究员JD工作地点:[上海]薪资范围:薪资open,绩效奖金+策略超额收益分成岗位职责:1. 搭建并持续完善执行算法的研究与回测框架,辅助评估不同策略的最优执行策略;2. 研
  • 测试开发提升效率利器:AppleScript!
  • 免费降AI实测:高效降低论文AI率方法+工具测评
  • 3步构建专业级3D重建:Meshroom节点编程终极指南
  • 【K线分析08A】K线类型、信号K线、市场背景--30
  • UnityFigmaBridge终极指南:从设计到开发的完整高效协作方案
  • PersistentWindows终极指南:让多显示器窗口布局永不丢失的5个简单技巧
  • AC7801 ADC软件触发+DMA搬运数据实战:从官方例程到多通道采样的避坑指南
  • 算法训练营第十三天| 454.四数相加II
  • Savitech盛微先进Saviaudio原厂原装一级代理分销经销
  • 掌握UIEffect:5分钟让你的Unity UI界面焕发专业级视觉效果
  • 社交媒体成为搜索引擎:2026 年品牌如何应对这一趋势 - SocialEcho社媒管理
  • 经常用到的渗透测试工具集整理,大佬都说好!