Skip to content

高维向量(High-Dimensional Vector)

一句话 TL;DR:高维向量是用几百到几千个数字表示一个语义概念的方式。它是 embedding 的数学形态,是 向量数据库KNN/ANNRAG 等技术的基础。高维空间有一些反直觉的特性(维度灾难、距离聚集),理解它们是理解现代 AI 检索系统的前提。


L1 · 一句话点破

高维向量:用 $d$ 维($d$ 通常 768、1024、1536、3072)浮点数表示一个语义对象的数学结构。

"猫" 的 embedding: [0.23, -0.45, 0.12, ..., 0.78]  # 1536 维
"狗" 的 embedding: [0.21, -0.42, 0.15, ..., 0.75]  # 1536 维(与"猫"接近)
"汽车" 的 embedding: [-0.33, 0.51, -0.28, ..., -0.62]  # 1536 维(与"猫"远)

向量是 embedding 的载体。语义相似的物体在向量空间中距离接近,相似度高的物体方向一致。

为什么是"高维"?因为低维(如 2D、3D)无法表达复杂的语义关系。维度越高,能区分的语义越细,但也带来计算和存储成本。

L2 · 通俗类比

把每个语义对象放到一个高维"特征空间"里:

  • 2D 平面:只能区分两个特征(如 x=体重、y=身高)。猫和狗可能挤在一起分不开。
  • 3D 空间:多一个特征(如 z=毛色)。区分能力强一点,但仍不够。
  • 1000D 空间:每个维度编码一个"语义特征"(如"是否毛茸茸"、"是否家养"、"是否会喵喵叫"...)。猫和狗在多个维度接近但又不完全重合,汽车在大部分维度远离。

直觉:维度越多,能编码的语义"侧面"越多,区分能力越强。

但高维有反直觉特性:

  • 距离聚集:高维空间里,任意两点距离趋于接近,区分变难(维度灾难)
  • 方向比距离重要:高维下"方向"(角度)比"绝对距离"更能反映相似度,所以常用余弦相似度
  • 可视化难:人脑只能理解 2D/3D,高维需要降维(PCA、t-SNE、UMAP)才能看

L3 · 正经定义

高维向量:$d \in [100, 10000]$ 维的实数向量 $\mathbf{x} \in \mathbb{R}^d$,用于表示语义对象。

主流 embedding 维度

模型维度
BERT-base768
BERT-large1024
OpenAI text-embedding-3-small1536
OpenAI text-embedding-3-large3072
Cohere embed-v31024/1536
LLaMA-3 8B (作为 embedding)4096

相似度度量

度量公式用途
余弦相似度$\frac{\mathbf{x} \cdot \mathbf{y}}{|\mathbf{x}| |\mathbf{y}|}$主流,关注方向
点积$\mathbf{x} \cdot \mathbf{y}$归一化后等价余弦
欧氏距离$|\mathbf{x} - \mathbf{y}|$几何距离
L2 归一化后欧氏$\sqrt{2 - 2\cos}$与余弦单调

关键概念

  • 向量空间:所有 embedding 构成的空间
  • 维度灾难:高维下距离区分能力下降
  • 归一化:把向量长度标准化为 1,让相似度只看方向

参考资料

L4 · 原理深挖

4.1 为什么 embedding 是高维的

embedding 维度的本质:每个维度编码一个"语义侧面"

低维(如 2D、3D):

  • 维度少,每个维度要编码多个语义,互相干扰
  • 区分能力弱,相似对象挤在一起

高维:

  • 维度多,每个维度可专注一个语义侧面
  • 区分能力强,相似但不同的对象能在不同维度区分

实证:BERT 的 768 维能编码词义、句法、语义、世界知识等多个层面。降到 100 维以下,能力明显下降。

但维度不是越高越好(见 4.3),有边际递减和维度灾难问题。

4.2 余弦相似度:为什么不用欧氏距离

高维下,余弦相似度(方向相似)通常比欧氏距离(绝对距离)更鲁棒。原因:

① 向量长度无意义

embedding 向量的"长度"通常没有语义意义(不像"身高"有量纲)。两个语义相同的对象,如果 embedding 长度不同,欧氏距离大但余弦相似度高。归一化后比较方向更合理。

② 高维距离聚集(见 4.3)

高维下欧氏距离趋于聚集,区分能力下降。余弦相似度(角度)受影响较小。

③ 计算效率

点积(余弦的归一化版本)比欧氏距离计算快,且 ANN 索引(如 HNSW)原生支持。

实务:多数 向量数据库 默认余弦相似度或点积。

4.3 维度灾难:高维的反直觉特性

Beyer et al., 1999 等研究揭示高维空间的反直觉特性:

① 距离聚集

2D 空间: 任意两点距离在 [0, sqrt(2)] 范围,差异明显
1000D 空间: 任意两点距离都接近 sqrt(1000) ≈ 31.6,差异小

高维下,最近邻和最远邻的距离差趋于 0,"最近"的概念模糊。这让基于距离的检索(KNN)效果下降。

② 体积膨胀

高维空间的"体积"主要在边界附近。如 1000D 单位球,99.9% 体积在靠近边界处。这让索引结构(如 KD-tree)失效。

③ 数据稀疏

固定数据量下,维度越高,数据越稀疏。覆盖整个空间所需数据量随维度指数增长。

对策

  • 降维:PCA、UMAP、t-SNE 把高维降到 2D/3D(可视化)或 100D(检索)
  • 使用余弦:余弦相似度受维度灾难影响较小
  • ANN 索引:HNSW、IVF 等近似最近邻算法,专为高维优化

4.4 向量归一化:让相似度只看方向

embedding 向量通常归一化(长度标准化为 1):

$$ \hat{\mathbf{x}} = \frac{\mathbf{x}}{|\mathbf{x}|} $$

归一化后:

  • 余弦相似度 = 点积(计算简化)
  • 欧氏距离与余弦单调相关
  • 所有向量在单位球面上

很多 embedding 模型(如 OpenAI text-embedding-3)默认输出归一化向量。向量数据库 检索时假设向量已归一化。

4.5 向量空间的结构:语义几何

embedding 向量在高维空间形成有意义的几何结构:

① 语义聚类

相似语义的对象聚集:

  • "猫"、"狗"、"兔子" 聚在"宠物"区域
  • "苹果"、"香蕉"、"橘子" 聚在"水果"区域
  • "猫" 和 "汽车" 距离远

② 类比关系

经典 word2vec 发现:$\mathbf{v}(\text{国王}) - \mathbf{v}(\text{男人}) + \mathbf{v}(\text{女人}) \approx \mathbf{v}(\text{女王})$。

向量空间编码了"性别"等抽象关系的方向。

③ 多义消歧

"苹果"(水果)和"苹果"(公司)的 embedding 不同(依赖上下文)。上下文化 embedding(如 BERT)能区分多义。

Embedding 词条详述这些语义结构。

4.6 维度的选择:性能 vs 精度

embedding 维度的权衡:

维度精度存储检索速度
低(100-300)较低
中(768-1024)中等
高(1536-3072)

OpenAI text-embedding-3 支持"维度截断":3072 维模型可直接降到 256 维使用(Matryoshka representation)。低维精度略降但成本大降。

实务:

  • 小规模、高精度:3072 维
  • 中等规模:1024-1536 维(主流)
  • 大规模、低成本:256-768 维
  • 极度规模:降到 100 维以下 + 量化

4.7 高维向量的工程挑战

① 存储成本

1536 维 FP32 向量 = 6KB。1 亿向量 = 600GB。需量化(如 PQ)压缩。

② 检索速度

暴力 KNN 在 1 亿向量上需数十秒。需 ANN 索引(HNSW、IVF)降到毫秒级。见 KNN/ANN

③ 内存压力

ANN 索引常驻内存,1 亿 1536 维 FP32 向量 + 索引 = TB 级内存。需分布式或量化。

④ 分布式

大规模向量库需分片(sharding)。Pinecone、Milvus 等支持分布式。

L5 · 沿革与坑

沿革

  • 2013Word2Vec (Mikolov et al.) 用 100-300 维向量表示词,开启 embedding 时代。
  • 2018:BERT 用 768/1024 维上下文 embedding,NLP 范式变革。
  • 2018-2020Beyer 等的维度灾难研究 被重新关注,ANN 算法(HNSW、IVF)流行。
  • 2020-2022:OpenAI text-embedding-ada-002 用 1536 维,成为 RAG 主流。
  • 2024:text-embedding-3-large 用 3072 维,支持 Matryoshka 维度截断。
  • 2024-2025:高维向量 + ANN 索引成为 RAG 标配。研究焦点转向多模态向量、量化压缩、分布式检索。

常见误解

  • 误解:维度越高效果越好。 ✅ 真相:维度高精度好但有维度灾难、存储成本、检索速度问题。需平衡,主流 768-3072(4.6)。

  • 误解:欧氏距离和余弦相似度等价。 ✅ 真相:归一化后等价,但 embedding 通常不保证归一化。且高维下余弦更鲁棒。主流用余弦(4.2)。

  • 误解:维度灾难让高维向量不可用。 ✅ 真相:维度灾难是真实问题,但 ANN 算法(HNSW 等)专为高维优化,实际效果良好。1000-3000 维是工程友好范围(4.3)。

  • 误解:embedding 维度可以任意选。 ✅ 真相:维度由 embedding 模型决定,是模型架构的一部分。换维度需换模型或用截断(如 Matryoshka)。

  • 误解:向量长度有意义。 ✅ 真相:embedding 向量长度通常无语义意义。归一化后比较方向更合理(4.4)。

  • 误解:高维向量可以可视化。 ✅ 真相:人脑只能理解 2D/3D。高维需降维(PCA、t-SNE、UMAP)才能可视化,但降维会损失信息(4.2)。

面试怎么考

  1. "什么是高维向量?为什么 embedding 是高维的?" --用 $d \in [100, 10000]$ 维浮点数表示语义对象。维度高能编码更多语义侧面,区分能力强(L1、4.1)。
  2. "为什么用余弦相似度不用欧氏距离?" --向量长度无意义、高维距离聚集、计算效率。主流用余弦(4.2)。
  3. "什么是维度灾难?" --高维下距离聚集、体积膨胀、数据稀疏。最近邻概念模糊,需 ANN 算法(4.3)。
  4. "embedding 维度怎么选?" --权衡精度/存储/速度。主流 768-3072。OpenAI 支持 Matryoshka 截断(4.6)。
  5. "向量归一化的作用?" --让相似度只看方向,余弦=点积。很多 embedding 模型默认输出归一化(4.4)。

延伸阅读


上一篇:分块 Chunking -- 长文档怎么切成段。下一篇:稠密 vs 稀疏向量 -- 两种向量表示的取舍。

内容采用 CC BY-SA 4.0,代码采用 MIT。