核心概念:嵌入、向量维度与相似度度量

说实话,刚接触向量数据库那会儿,我也被这些术语搞得有点懵。什么嵌入、维度、余弦相似度……听着像数学课又像计算机课。但后来我发现,搞懂这三个东西,你就抓住了向量数据库的命门。

咱们一个一个来拆。我尽量用大白话讲,但该有的深度一点不少。

嵌入(Embedding)——把现实世界“塞”进向量

嵌入是什么?说白了,就是把文字、图片、声音这些东西,变成一串数字。这串数字就是向量。

举个例子。你想想看,“猫”和“狗”这两个词,在计算机眼里原本就是两个字符串。但嵌入之后,它们会变成类似 [0.2, 0.8, -0.3, ...] 这样的数字列表。而且有意思的是,语义相近的词,它们的数字列表也会更接近。

我在项目中遇到过这样一个场景:用户搜索“笔记本电脑”,我们希望把“笔记本”、“便携电脑”、“MacBook”这些相关结果都找出来。如果用传统的关键词匹配,根本做不到。但用了嵌入之后,这些词的向量距离天然就很近,一搜一个准。

核心要点:嵌入的本质是语义压缩。它把高维的、非结构化的信息,压缩成一个固定长度的、结构化的向量。这个向量保留了原始信息的“含义”。

常见的嵌入模型有 的 text-embedding-ada-002、Google 的 Universal Sentence Encoder,还有开源的 BGE 系列。选哪个?我个人习惯先看数据量。小项目用开源的 BGE 就够了,大项目或者对精度要求高的,直接上 。

向量维度——长一点好,还是短一点好?

每个向量有多少个数字,就是它的维度。比如 [0.1, 0.5, -0.2] 是 3 维,[0.1, 0.5, -0.2, 0.8, ...] 是 1536 维。

维度这个东西,很有意思。维度越高,能承载的信息量越大,区分度也越高。但代价是什么?计算变慢,存储变大。

我给大家一个参考表:

维度数 常见模型 特点 适用场景
128 - 384 BGE-small, MiniLM 轻量、快速、省资源 移动端、实时搜索、小规模数据
512 - 768 BGE-base, Sentence-BERT 平衡型,精度和速度兼顾 大多数通用场景
1024 - 1536 ada-002, BGE-large 高精度、高区分度 知识库问答、语义搜索、推荐系统

我的建议:别一上来就选最高维度的。先跑个小样本测试,看看 384 维能不能满足你的精度需求。能的话就别上 1536,省下来的计算资源够你干很多事了。

嗯,这里要注意一点:维度不是越高越好。我记得有一次,我把一个项目的嵌入维度从 768 提到 1536,结果召回率只提升了 0.5%,但查询时间翻了一倍。得不偿失。

相似度度量——怎么判断两个向量“像不像”?

向量有了,维度定了,接下来就是怎么比较它们。常用的有三种:余弦相似度、欧氏距离、点积。

这三种方法,说白了就是三种不同的“尺子”。量同一个东西,结果可能不一样。

余弦相似度

这个最常用。它看的是两个向量的方向是否一致,不管长度。

公式长这样:

cosine_similarity(A, B) = (A · B) / (||A|| * ||B||)

结果范围在 -1 到 1 之间。1 表示方向完全一致,0 表示正交(不相关),-1 表示方向相反。

我为什么喜欢用余弦相似度?因为它对文本特别友好。两个文档长度差很多,但讲的是同一件事,余弦相似度依然能给出高分。这在搜索场景里太重要了。

欧氏距离

这个更直观。就是计算两个向量在空间中的直线距离。

euclidean_distance(A, B) = sqrt(sum((A_i - B_i)^2))

值越小,表示越相似。

欧氏距离对向量的长度很敏感。两个方向相同但长度差很多的向量,余弦相似度可能很高,但欧氏距离会很大。所以它适合那些需要比较“大小”的场景,比如图像相似度、异常检测。

点积

点积就是两个向量对应位置相乘再求和。

dot_product(A, B) = sum(A_i * B_i)

点积同时考虑了方向和长度。值越大,表示越相似。

点积有个好处:计算速度最快。在一些高性能场景下,比如实时推荐系统,点积是首选。

避坑指南:我曾经在一个项目里直接用点积做相似度搜索,结果发现长文档总是排在前面。后来才意识到,点积受向量长度影响太大。如果你用点积,一定要确保所有向量都做了归一化处理,否则结果会有偏差。

三种方法怎么选?我给大家一个快速判断表:

度量方法 关注点 适合场景 注意事项
余弦相似度 方向 文本搜索、语义匹配 忽略向量长度
欧氏距离 距离 图像检索、聚类 对长度敏感
点积 方向和长度 推荐系统、高性能场景 需要向量归一化

知识体系总览

说了这么多,咱们用一张图把这三个概念串起来。你想想看,整个流程其实就是:原始数据 → 嵌入 → 向量 → 相似度度量 → 检索结果。

向量数据库核心概念关系图 原始数据 文本 / 图片 / 音频 嵌入模型 语义压缩 向量 [0.2, 0.8, ...] 相似度度量 余弦 / 欧氏 / 点积 向量维度: 决定每个向量包含多少个数字。低维度(128-384)轻量快速,高维度(1024-1536)精度更高但计算更慢。 三种相似度度量对比 余弦相似度 关注方向 适合文本搜索 忽略向量长度 欧氏距离 关注距离 适合图像检索 对长度敏感 点积 关注方向和长度 适合推荐系统 需向量归一化

这张图把整个流程串起来了。从原始数据开始,经过嵌入模型变成向量,然后通过相似度度量来比较。向量维度贯穿其中,影响着每一步的效果。

你想想看,搞懂了这三个概念,向量数据库对你来说就不再是黑盒了。你知道数据是怎么进来的,怎么存的,又是怎么被比较的。剩下的,就是选工具、调参数的事了。

一个小练习:找两个词,比如“苹果”和“香蕉”,用任意嵌入模型生成它们的向量,然后分别用余弦相似度、欧氏距离和点积算一下相似度。看看结果有什么不同。这个练习能帮你直观理解三种度量的差异。