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

向量库面试题

什么是向量数据库,和传统数据库相比有什么不同?

“向量数据库是一类专门用于存储和检索高维向量数据的数据库。向量通常是从文本、图像、音频等非结构化数据通过 embedding 模型生成的高维浮点数组。

与传统数据库相比,它的核心区别在于查询方式和索引方式。传统数据库主要处理结构化数据,通过精确匹配或关系查询实现数据检索,比如 SQL 查询。而向量数据库侧重于相似性搜索,即找出与查询向量最接近的数据项,通常采用 HNSW、IVF 等向量索引结构进行近似最近邻搜索。

因此,向量数据库在语义搜索、推荐系统、知识库、AI Agent 等需要理解数据语义的场景中更有优势,而传统数据库更适合事务处理和结构化数据分析。”

向量数据库主要解决什么问题?

向量数据库主要解决非结构化数据的语义检索问题。它通过将文本、图像、音频等内容转换为高维向量表示(embedding),再利用相似性搜索算法(如 HNSW)根据向量距离找到语义上最相近的数据,从而实现“理解含义”的搜索,而不仅仅是关键词匹配。相比传统数据库,向量数据库让系统能在语义层面处理数据,广泛应用于智能搜索、推荐系统和 RAG 等 AI 场景。

什么是向量化(vectorization)?

向量化(Vectorization)是指将文本、图像、音频等非结构化数据转换为数值化的高维向量表示(embedding)的过程,使机器能够以数学方式理解和计算语义相似度。
这些向量通常由深度学习模型(如 BERT、CLIP、Sentence Transformers 等)生成,同类或语义相近的内容在向量空间中的距离会更近。
简单来说,向量化就是让机器“看懂”数据,把自然语言或感知信息变成模型可计算的数字表示,为语义搜索、推荐系统和大模型检索(RAG)等应用奠定基础。

向量与特征向量的区别

向量(vector)是一个数学概念,表示一组有序的数值,用于描述空间中的方向或位置,本身不限定具体含义。而特征向量(feature vector)是在机器学习和数据表示中的具体应用,指的是用数值来刻画样本特征的向量。例如,一朵花的花瓣长度、宽度等属性可以组成特征向量,用来反映该样本的特征。简单来说,向量是形式,特征向量是内容——前者是抽象的数学结构,后者是基于数据含义的向量化特征表示。

Embedding 是什么?它在向量搜索中起什么作用?

Embedding(嵌入)是一种将文本、图像、音频等非结构化数据转换为高维向量表示的技术,使得语义上相似的内容在向量空间中距离更近。它的核心思想是用一组数值(向量)来表示数据的语义特征。
在向量搜索中,Embedding 起到“桥梁”的作用——它把原始数据转化为可计算的数值形式,使得数据库能够通过向量相似度(如余弦相似度或欧氏距离)找到语义上最相似的内容。

例如,一段查询文本经过模型生成 embedding 后,与存储在数据库中的向量进行比对,就能检索出语义最接近的文档或图片。

向量数据库中的相似度搜索通常使用哪些指标?

  1. 余弦相似度(Cosine Similarity):衡量两个向量的方向是否一致,常用于文本、语义向量等高维数据。值越接近 1,表示越相似。

    \[\text{CosineSimilarity}(A, B) = \frac{A \cdot B}{|A| \times |B|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \times \sqrt{\sum_{i=1}^{n} B_i^2}} \]

  2. 欧氏距离(Euclidean Distance):衡量两个向量在空间中的几何距离,距离越小越相似,常用于连续数值型特征。

\[\text{EuclideanDistance}(A, B) = \sqrt{\sum_{i=1}^{n} (A_i - B_i)^2} \]

  1. 内积(Dot Product / Inner Product):反映两个向量在空间方向上的重合程度,常用于经过归一化的 embedding 向量。

\[\text{DotProduct}(A, B) = \sum_{i=1}^{n} A_i B_i \]

  1. (补充)曼哈顿距离(Manhattan Distance)闵可夫斯基距离(Minkowski Distance):在某些数值或低维场景下使用较多。

各个指标的关系

  • Weaviate 会把每条数据的 embedding 存储为 浮点向量

  • 为了实现高效的相似性搜索,它通常会 对向量进行归一化(L2-normalization),也就是保证向量的长度 (|v| = 1)。

  • 这样做有两个好处:

    1. 简化计算:归一化后,余弦相似度直接等于向量的点积,减少了每次搜索的计算量。
    2. 统一尺度:避免不同向量长度差异对相似度的影响,使距离或相似度更可靠。

Weaviate 提供的向量搜索(nearVector / nearText 等)通常使用 归一化后的向量做点积 或近似最近邻(ANN)算法,例如 HNSW 索引。

  • 对于 cosine / dot-product 相似度

    • 归一化后的点积 = 余弦相似度
  • 对于 欧氏距离

    • 一般也会用归一化后的向量,但欧氏距离和余弦相似度在归一化后有固定关系:

      \[\text{EuclideanDistance}^2 = 2 - 2 \cdot (\text{CosineSimilarity}) \]

L2 范式计算方法

为什么要做 L2 范数归一化**

L2 归一化是将向量缩放到长度为 1,即:

\[|v|*2 = \sqrt{\sum*{i=1}^{n} v_i^2} = 1 \]

原因:

  1. 统一尺度

    • 不同向量的原始长度可能差异很大,如果直接用点积或欧氏距离,长度差异会影响相似度判断。
    • 归一化后,每个向量只保留“方向信息”,长度对结果无影响。
  2. 简化相似度计算

    • 归一化后,点积 = 余弦相似度

      \[\text{CosineSimilarity}(A, B) = \frac{A \cdot B}{|A||B|} = A \cdot B \quad (\text{当 } |A|=|B|=1) \]

    • 这样可以直接用点积计算余弦相似度,提高搜索效率。
  3. 提高 ANN 索引效果

    • HNSW、IVF 等索引算法在高维空间中搜索相似向量时,归一化可以稳定搜索性能,减少噪声影响。

L2 归一化的计算方法**

给定向量 (v = [v_1, v_2, ..., v_n]),归一化步骤如下:

  1. 计算 L2 范数(长度):

    \[|v|_2 = \sqrt{v_1^2 + v_2^2 + \dots + v_n^2} \]

  2. 每个维度除以范数:

    \[v_{\text{normalized}} = \left[\frac{v_1}{|v|_2}, \frac{v_2}{|v|_2}, \dots, \frac{v_n}{|v|_2}\right] \]

归一化后的向量长度为 1:

\[|v_{\text{normalized}}|_2 = 1 \]

什么是 近似最近邻算法 ANN(Approximate Nearest Neighbor)?

ANN(Approximate Nearest Neighbor,近似最近邻)是一类用于高维向量搜索的算法,它的目标是在海量向量中快速找到与查询向量相似的向量,但不保证每次都找到绝对最邻近的向量,而是找到近似最邻近的向量

在高维空间中,精确的最近邻搜索(Exact Nearest Neighbor, ENN)计算复杂度很高,尤其是向量维度很大或数据量巨大时,搜索速度会非常慢。ANN 算法通过建立索引结构(如 HNSW、IVF、PQ)或者分块、图遍历等方式,大幅降低搜索成本,同时保证搜索结果的相似性接近最优。

因此,向量数据库(如 Weaviate、Milvus、Pinecone)普遍使用 ANN 来实现毫秒级语义搜索,实现性能和精度的折中。

向量数据库的应用场景

  1. 语义搜索
    • 将用户查询或文本内容转成向量,通过向量相似度找到语义相关的文档或回答。
    • 场景:智能搜索引擎、企业知识库、问答系统。
  2. 推荐系统
    • 根据用户兴趣或行为生成 embedding,与商品、内容或用户向量匹配,实现个性化推荐。
    • 场景:电商推荐、视频/音乐推荐、社交内容推荐。
  3. 多模态检索
    • 支持文本、图像、音频、视频等多模态向量的搜索与匹配。
    • 场景:图像搜索、语音检索、跨模态检索(比如用文本找相关图片)。
  4. RAG(Retrieval-Augmented Generation)
    • 在大模型生成回答前,通过向量检索相关知识文档,提高生成内容的准确性和知识覆盖。
  5. 异常检测 / 相似性分析
    • 通过向量表示对数据进行聚类或距离分析,检测异常或相似行为。
    • 场景:金融风控、网络安全、图像相似度检测。

向量数据库和全文搜索

  1. 数据类型

    • 全文搜索主要处理文本数据,通过倒排索引存储词项信息。
    • 向量数据库处理高维向量(embedding),可存储文本、图像、音频等非结构化数据的向量表示。
  2. 查询方式

    • 全文搜索依赖关键词匹配、布尔查询、分词和 TF-IDF 或 BM25 等算法,检索结果是基于关键词匹配度
    • 向量数据库通过计算向量相似度(余弦相似度、欧氏距离、内积)进行语义搜索,找出语义上最接近的数据,而不依赖关键词。
  3. 应用场景

    • 全文搜索适合结构化或半结构化文本的快速检索,如日志搜索、文档检索。
    • 向量数据库适合语义搜索、推荐系统、多模态检索、RAG 知识增强等需要理解内容含义的场景。
  4. 索引结构

    • 全文搜索使用倒排索引。
    • 向量数据库使用向量索引,如 HNSW、IVF、PQ,实现近似最近邻搜索(ANN)以提高高维向量检索效率。

什么是向量检索中的 recall 和 precision?

在向量检索中,Recall(召回率)Precision(精确率)用于衡量搜索结果的质量:

  1. Recall(召回率)

    • 表示从所有相关向量中被检索出来的比例。
    • 公式:

      \[\text{Recall} = \frac{\text{检索出的相关向量数}}{\text{总相关向量数}} \]

    • 高召回率意味着大部分相关向量都被找到了,但可能会包含一些不相关的向量。
  2. Precision(精确率)

    • 表示检索结果中真正相关向量所占比例。
    • 公式:

      \[\text{Precision} = \frac{\text{检索出的相关向量数}}{\text{检索出的向量总数}} \]

    • 高精确率意味着返回的向量大多是相关的,但可能会漏掉部分相关向量。

在向量数据库中

  • 使用 ANN(近似最近邻)搜索时,通常存在 精度-效率折中:为了加速搜索可能牺牲一部分 Recall 或 Precision。
  • 评估检索算法时,一般需要同时考虑 Recall 和 Precision,或者用 F1-score 综合衡量。

什么是 HNSW(Hierarchical Navigable Small World)?

HNSW(Hierarchical Navigable Small World)是一种用于高维向量近似最近邻搜索(ANN)的图索引结构,其核心思想是构建分层的小世界图(Small World Graph),以实现高效、低延迟的向量搜索。

  • 结构特点

    1. 分层(Hierarchical):向量被组织成多层图,顶层稀疏、底层密集。搜索时先从顶层快速定位大致区域,再逐层向下精细搜索。
    2. 小世界(Small World):每个节点只连接少量邻居,但整个图中节点间路径较短,使搜索能快速到达目标。
    3. 导航(Navigable):通过贪心算法(Greedy Search)从入口点开始,沿着距离查询向量最近的邻居逐步逼近最相似向量。
  • 优势

    • 搜索效率高,接近 O(log N)
    • 支持动态插入和删除
    • 高精度 ANN,可达到与精确最近邻相近的效果
  • 应用场景

    • 向量数据库(Weaviate、Milvus、Pinecone)
    • 推荐系统、语义搜索、多模态检索

HNSW(Hierarchical Navigable Small World)结构类似于跳表,都采用顶层稀疏、底层密集的多层设计。不同的是,跳表是二维结构,只会链接同一层的相邻节点和下层节点,而 HNSW 每个节点会链接同一层的多个邻居(通常约 6 个)。在搜索时,算法从顶层稀疏图开始,找到与查询向量最相近的几个节点,然后沿着距离查询向量最近的邻居逐层向下逼近,最终在底层密集图中快速找到近似最相似的向量。

什么是 PQ(Product Quantization)?

  1. 把大向量切成小块

    • 假设有一个 128 维向量 (v),PQ 会把它切成 4 个子向量,每个 32 维:

      \[v = [v_1, v_2, v_3, v_4] \]

  2. 对子向量进行量化

    • 每个子向量独立训练一个“质心簇”(codebook),例如每个子向量有 256 个簇中心。
    • 子向量用最接近的簇中心的 索引 来代替原始数值。
    • 例如:

      \[v_1 → index 23, \quad v_2 → index 87, \quad v_3 → index 5, \quad v_4 → index 150 \]

  3. 组合索引表示原向量

    • 原向量不再存浮点数,而只存 4 个整数索引 [23, 87, 5, 150],大幅减少存储。
    • 查询时,通过 codebook 可以近似重构向量或直接在索引上近似计算距离。

面试的表述

PQ(Product Quantization,乘积量化)是一种高维向量压缩方法,它将原始向量拆分为若干子向量,对每个子向量独立训练簇中心(codebook),然后用子向量最接近簇中心的索引来表示原始向量。通过这种方式,向量只需存储索引即可大幅降低存储成本,同时在索引上可以直接近似计算向量相似度,从而加速大规模向量的近似最近邻搜索。

Flat 索引(Brute-Force / Linear Scan)

Flat 索引,也称暴力搜索或线性扫描,是最简单、最直接的向量检索方式。它将所有向量完整存储后,对于每个查询向量都计算其与全部向量的相似度(如点积、余弦相似度或欧氏距离),然后返回 top-k 最近邻。由于不依赖任何索引结构,Flat 索引保证了搜索结果的精确性,但其计算量随向量数量线性增长,因此在海量数据场景下效率较低。它通常适用于小规模向量库、测试阶段或对精度要求极高的应用场景。

什么是向量搜索中的半径搜索(radius search)?

半径搜索(Radius Search)是向量检索的一种方法,它会返回所有距离查询向量在指定阈值半径 (r) 以内的向量,而不是固定数量的 top-k 向量。

  • 特点

    1. 可以动态返回满足条件的向量数量,不依赖固定数量
    2. 阈值可以基于欧氏距离、余弦距离或其他相似度指标
    3. 常用于需要“范围内所有相似向量”或过滤特定相似度范围的场景
  • 应用场景

    • 语义检索中找出所有相似度超过某个阈值的向量
    • 异常检测中找出与中心点距离超过阈值的异常向量

半径搜索是返回与查询向量距离在指定半径内的所有向量的一种检索方式,适用于按距离范围筛选相似向量的场景。

什么是向量搜索中的 top-k 查询?

Top-k 查询是向量检索中最常用的一种方法,它会返回与查询向量最相似的前 (k) 个向量,而不是全部满足条件的向量。

  • 特点

    1. (k) 是固定数量,由用户指定
    2. 相似度可以基于点积、余弦相似度或欧氏距离等指标
    3. 查询结果通常按相似度从高到低排序
  • 应用场景

    • 搜索引擎或推荐系统中返回最相关的 top-k 文档或商品
    • 语义检索中返回最相似的 k 条向量数据

向量搜索中如何做召回与精排?

在向量搜索中,“召回(Recall)”和“精排(Ranking)”通常是分两步处理的,面试中可以这样表述:


向量搜索通常分为召回(Candidate Retrieval)精排(Re-Ranking)两步。

  1. 召回:首先使用索引(如 HNSW、IVF、IVF+PQ)快速找到一批候选向量,这一阶段追求速度和高召回率,不要求非常精确的距离计算。
  2. 精排:然后对候选向量进行精确距离计算或更复杂的相似度计算(如重新计算完整向量的点积或余弦相似度,甚至结合业务特征),对结果排序,返回最终 top-k 或符合阈值的向量。

优势

  • 通过召回阶段快速缩小搜索空间,提高检索效率
  • 通过精排阶段保证最终结果的准确性
  • 可以结合业务特征或多模态信号做排序优化

什么是量化误差(quantization error)?

这是向量数据库和 PQ(Product Quantization)面试中常见的考点,可以这样表述:


量化误差(Quantization Error)是指在向量压缩过程中,由原始向量映射到量化向量(如 PQ 的子向量簇中心)时产生的近似误差。简单来说,就是原始向量和量化向量之间的距离差异。

  • 来源

    • PQ 将子向量映射到最近的簇中心,原始向量信息无法完全保留
    • 这种近似会导致向量距离计算与真实值存在偏差
  • 影响

    • 量化误差越大,近似最近邻搜索的精度越低
    • 需要在压缩率和精度之间做折中
  • 应用优化

    • 增加簇中心数量(codebook 大小)
    • 调整子向量划分数量
    • 结合精排阶段做距离校正
http://www.hskmm.com/?act=detail&tid=29451

相关文章:

  • 02 常用快捷键和指令
  • 深圳公共资源交易中心 www.szzfcg.cn
  • mysql百分数转小数点格式
  • mysql误删的performance_schema库
  • 操作系统内存管理思维导图总结
  • 15
  • 取证复刻1
  • 如何在Ubuntu中查看编辑lvgl的demo和examples?
  • 英语_翻译
  • 操作系统(Linux)文件系统思维导图总结
  • mysql不等于<>取特定值反向条件的时候字段有null值或空值读取不到数据
  • linux查看/修改各种资源限制ulimit
  • MySQL非root安装-初始化数据库时unknown variable ‘defaults-file=**/my.cnf‘
  • python中mod函数怎么用
  • Educational Codeforces Round 101 (Rated for Div. 2) 题解
  • Centos7下docker的jenkins下载并配置jdk与maven
  • The 2024 ICPC Asia Shanghai Regional Contest
  • 英语_阅读_Fireflies_待读
  • 1.基础
  • 深入解析:RoadCLIP 笔记 针对自动驾驶优化的 CLIP 变体 vlm
  • ASP.NET Razor VB 变量 - 实践
  • dos命令和命令提示符
  • 20232401 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • for 循环 range
  • 在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名离线转录工具需求洞察
  • JavaScript async/await 基础使用
  • 27. 移除元素 暴力+快慢指针+相向双指针
  • ST表学习笔记
  • 谈一类易实现的非四毛子线性 RMQ
  • 我们学会在具体情境中做出恰当判断