嵌入模型与向量数据库集成

Embedding models & vector DB integration

嵌入与向量数据库简介

向量数据库是专门用于存储和查询高维向量的数据管理系统。这些向量(即“嵌入”,Embedding)由机器学习模型生成,可将文本、图像等数据映射为高维空间中的数值向量,用来表征数据的语义或特征。模型在语言理解、图像识别等任务中学习这类压缩表示,使含义或特征相近的输入在向量空间中彼此靠近。因此,向量数据库非常适合语义搜索与推荐系统等需要按含义或特征查找相似内容的应用。

与依赖字面词语匹配的关键词搜索不同,向量数据库针对向量相似度搜索做了专门优化,通过计算嵌入之间的数值相似性来检索结果,能够自然处理同义词与不同表述。例如,“raise an issue”(提出问题)和“create a ticket”(创建工单)在英文中没有相同的实词,但二者的嵌入表示可能相近,向量搜索仍能将它们匹配起来。

面对大规模数据集,逐一比对全部高维向量会非常缓慢。为此,向量数据库通常采用专门的数据结构与近似最近邻(ANN)算法来加速相似度搜索。目前最常用的索引方法是分层可导航小世界图(Hierarchical Navigable Small World,HNSW)算法,后文还会介绍其他索引算法。

嵌入模型及其输出

本节聚焦 RAG 数据摄取流程中的嵌入阶段。

图 1 · 数据准备流程中的嵌入阶段
分块后的数据通过嵌入模型转换为向量表示。

嵌入模型通常基于神经网络,负责将数据编码为向量表示。在自然语言处理(NLP)中,Transformer 模型可将句子表示为稠密向量;两个含义相似的句子即便没有共同词语,其向量也可能彼此接近,从而支持同义词识别乃至跨语言的语义匹配。可选的嵌入模型既包括可自行部署的开源模型,也包括通过专有 API 调用的服务:

  • 百炼 text-embedding-v4:本例采用 1024 维配置,批大小(Batch Size)上限为 10。官方向量化说明列出了可用地域、向量维度与输入限制;查询与文档需使用相同的模型配置。
  • Sentence Transformers(Hugging Face 模型):大量开源文本嵌入模型支持在自有计算设备上运行。例如,SentenceTransformers 库提供的 all-MiniLM-L6-v2 等预训练模型可生成 384 维句子嵌入。这类模型基于 BERT、RoBERTa 等 Transformer 架构微调而来,能够为句子或文本片段生成有意义的向量表示,并支持针对特定业务领域进一步微调。
  • 本地 embedding:按所选开源模型的官方输入格式、长度限制和向量维度运行,模型权重下载与数据存储位置由部署者自行管理。

选择嵌入模型时,应考虑数据类型,例如文本或图像;输出维度;模型在目标任务中的表现,例如对短文本或长文档语义差异的识别能力;部署方式,例如自行托管或调用 API;以及成本限制。Hugging Face Hub 等平台提供了许多现成的预训练模型,可以通过实验比较哪些嵌入更适合你的应用。

Hugging Face Hub 等平台提供了丰富的预训练模型,可通过实验对比哪类嵌入更贴合你的应用。无论选用哪种模型,基本流程都是先用嵌入模型将数据编码为向量,再在向量数据库中建立索引并执行检索。需要注意,查询阶段使用的嵌入模型必须与索引阶段的模型相同或兼容,使查询向量与已存储向量处于同一语义空间;如果文档编码与查询编码使用了完全不同的模型,将无法获得有意义的搜索结果。

向量索引类型与 ANN 算法

向量数据库依靠索引结构和 ANN 算法实现快速相似度搜索。不同索引在搜索准确性、查询速度与内存占用之间各有取舍。

图 2 · 数据准备流程中的索引阶段
嵌入向量进入索引,为后续检索提供支持。

常见索引类型包括:

  • Flat 索引(穷举搜索):最直接的方式,完整存储所有向量,每次查询都与集合中的全部向量逐一比对,返回精确结果,召回率与准确性最高。但由于搜索耗时随向量数量线性增长,在大规模数据集上查询较慢。适用于小型数据集,或对准确性要求极高、对延迟要求较低的场景。
  • LSH(局部敏感哈希):通过多个随机投影或哈希函数对向量分组,将相似向量以较大概率映射到同一个哈希桶中,查询时只比对同一桶内的向量。LSH 的搜索速度可以很快,但要达到较高召回率通常需要维护大量哈希表;面对高维数据时,所需的哈希位数会显著增加,从而限制了处理效果。因此,LSH 通常适合低维嵌入或较小的数据集,在现代高维应用中使用较少。
  • HNSW(分层可导航小世界图):主流的图结构索引方法,将向量组织为多层小世界图,每个节点与周围近邻相连,查询时通过遍历图结构快速定位相近节点,无需检查全部数据。HNSW 能兼顾查询速度与较高召回率,但由于每个节点都需保存多条边连接,可能占用较多内存。参数 M 用于控制每个节点连接的近邻数量:增大 M 可以改善召回率,但会增加索引内存消耗;扩大搜索时的候选范围同样可以改善召回率,但会增加计算量与查询延迟。目前大多数现代向量数据库均采用 HNSW。
  • IVF(倒排文件索引):由 Facebook 的 FAISS 库率先推广,先将向量空间划分为多个聚类(Voronoi 区域),并将每个向量分配给距离最近的聚类中心;查询时仅搜索距离查询向量最近的若干个聚类(数量由 nprobe 等参数控制),从而大幅减少比对次数。若真实最近邻恰好落在未被搜索的相邻聚类中,IVF 可能会遗漏结果,但它通常能以较低的延迟和内存开销获得较高召回率,且常与量化技术结合使用。
  • PQ(乘积量化):常与 IVF 等索引配合使用的向量压缩方法。PQ 将每个高维向量切分为多个子向量,并利用从数据中学到的码本(Codebook)将各子向量量化为紧凑的短编码,大幅降低存储完整浮点向量所需的内存;查询时则通过预先计算的码本距离近似估算向量间距。PQ 支持在较低内存消耗和更快磁盘读取速度下检索大规模向量集合,代价是压缩会带来一定的精度损失。Milvus、FAISS 等系统均提供 IVF+PQ 配置,适合能够接受少量精度损失、需兼顾速度与内存占用的大规模场景。

不同索引各有适用边界:例如在计算资源适中、追求高検索准确性的场景下,常选择速度快但内存占用较高的 HNSW;而在处理磁盘上数十亿级向量时,则可能选择 IVF+PQ。

用于衡量相似性的距离指标

相似度搜索需要量化两个向量的接近程度。最常见的距离指标包括余弦相似度、点积和欧氏距离,Qdrant 完整支持这三种指标:

  • 余弦相似度:计算两个向量夹角的余弦值,比较方向。方向完全相同的两个向量,其余弦相似度为最大值 1.0;相互正交时为 0;方向完全相反时为 −1。余弦相似度关注各个分量之间的相对关系,因此常用于文本嵌入。使用时,通常会将嵌入向量归一化为单位长度。
    图 3 · 余弦相似度取决于夹角
    两组向量的长度不同,但夹角相同,因此余弦相似度相同。
  • 点积:计算两个向量对应分量的乘积之和,同时受到方向和长度影响。对于未归一化的向量,即使方向相近,长度较大的向量,例如较长文档生成的向量,也可能得到更高的点积。如果所有向量都归一化为长度 1,点积在数学上就等于余弦相似度。点积常用于向量长度具有意义的嵌入。
    图 4 · 点积同时受到夹角与长度影响
    夹角相同的两组向量,在长度发生变化时可以具有不同的点积。
  • 欧氏距离(L2 距离):向量空间中两点之间的 L2 范数距离。计算时,将各个对应分量的差值平方后相加,再取平方根。欧氏距离将向量分量视为空间坐标,衡量它们的绝对差异。欧氏距离很近的向量具有很高相似性。当向量分量的大小具有意义时,欧氏距离是自然的选择。
    图 5 · 欧氏距离衡量端点间距
    两组向量端点的方向和位置不同,也可以具有相同的欧氏距离。

距离指标应结合数据特征与所用嵌入模型来选择。文本语义嵌入的向量长度通常没有特定含义,因此多采用余弦相似度;在其他场景或模型输出本身已完成归一化时,也可能采用欧氏距离或点积。向量数据库会按所选指标排序,返回距离最小或相似度最高的结果。借助二维示意图理解这三种指标时,可以把向量方向看作语义方向,把向量长度看作对该语义的强化程度,从而更直观地把握不同指标的取舍。

使用二维示意图理解每种指标的计算方式很有帮助。可以将向量方向理解为含义,将长度理解为对该含义的强化程度,这样更容易理解不同距离指标的取舍。

独立配置 embedding 与集合

使用 text-embedding-v4 的独立 endpoint、API Key 与 1024 维配置,保持文档端与查询端配置一致。运行前检查批大小、输入长度、返回数量和向量维度。记录语料 hash,更换或升级嵌入模型后重建向量索引,并使用同一份评估集对比前后效果。

练习:记录本课所用配置、输入、预期结果与失败分支,并用脱敏数据复现。

搜索课程

正在加载课程目录…