VECTOR · EMBEDDING · SEMANTIC SPACE

拆解 AI 的灵魂
一文看懂大模型「向量」

"向量数据库""Embedding"这些词无处不在——它是连接人类语言与计算机数字世界的桥梁。下面这张星图里,每一个词、每一段话,最终都会变成空间中的一个坐标点。

拖动可旋转视角DIMENSIONS: 1536
01

向量究竟是什么?

想象你开了一家水果店,想用两个特征给水果打分:甜度酸度,分值范围 0~1。把两个分数连起来,就得到一串数字——这就是一个「二维向量」。

点击下面的水果,看看它在「甜度 × 酸度」空间里的位置:

大模型做的事情一模一样,只不过特征不是 2 个,而是成千上万个——OpenAI 的 Embedding 模型有 1536 维,Llama-3 甚至有 4096 维。每一维都在刻画情感、词性、主题、语境……最终生成一串几千个数字的数组,这就是特征向量

02

向量在数学上怎么理解?

在几何学中,向量最直观的解释是:有方向和长度的箭头。一维是数轴上的点,二维、三维是坐标系里的箭头;到了 1536 维,人脑虽然想象不出图形,但数学公式依然成立。

"很高兴认识你"和"认识你我真开心",字面完全不同,但转化为高维向量后,两个箭头几乎指向同一个方向。衡量这种相似度,用的是余弦相似度 —— 计算两个箭头夹角 θ 的余弦值。拖动下面的滑块,感受夹角如何影响相似度:

夹角 θ 35°
COS(θ)0.82
语义关系高度相关
03

向量代数:King − Man + Woman ≈ Queen

最经典的向量例子。用「国王」的向量减去「男人」,抽离出男性属性,只剩下"皇室统治者"的概念;再加上「女人」的女性特征,结果就极度接近「女王」的真实坐标——语义可以做数学加减法

国王
[0.25, 0.88, -0.12, 0.45]
男人
[0.22, 0.85, -0.78, 0.02]
+
女人
[0.18, -0.15, 0.75, 0.05]
女王
[0.21, -0.12, 1.39, 0.48]
04

Embedding 模型 ≠ 大语言模型

初学者容易把 Embedding 模型和 GPT-4、Claude 这样的 LLM 混为一谈。实际上它们分工完全不同:

模型类别代表模型核心优化目标最终输出物
大语言模型 LLMGPT-4o / Claude / Llama-3预测下一个 Token自然语言文本
Embedding 模型text-embedding-3-small / bge-large-zh将语义投影到高维坐标系高维浮点数数组

Embedding 模型的训练用的是对比学习:准备相似文本对(正样本)和不相似文本对(负样本),训练中拉近正样本、推远负样本,最终学会给任意文本做精确的"语义定位"。

05

如何把数据向量化?

把文本转化为向量的过程叫 Embedding(嵌入),需要借助专门的 Embedding 模型。以下是调用 OpenAI API 的例子:

from openai import OpenAI

# 1. 初始化客户端
client = OpenAI(api_key="your-api-key-here")

text_content = "人工智能正在改变世界。"

# 2. 调用 Embedding 模型
response = client.embeddings.create(
    input=[text_content],
    model="text-embedding-3-small"
)

# 3. 提取生成的向量数组
vector = response.data[0].embedding
print(f"维度数: {len(vector)}")
# 输出类似: [-0.01254, 0.03451, -0.00789, ...]
06

向量用在哪里?

① Transformer 内部:输入的每个字词一开始就被映射为向量,注意力机制本质上就是向量之间的矩阵乘法。

② RAG 检索增强:大模型上下文有限、无法实时联网,AI Agent 用向量数据库做"外接硬盘":

💬

1. 提问

用户问题 → Embedding 模型 → 生成"提问向量"

🔍

2. 检索

向量数据库匹配 → 取出 Top-K 最相关的原始文本块

✍️

3. 生成

原始文本拼接进 Prompt → 发送给 LLM → 生成最终回答

常见误区:发给大模型的不是向量数字,而是向量检索匹配到的原始自然语言文本。大模型只认识 Token,无法把一串浮点数当语义输入。分词(Tokenization)最终也是在大模型服务器端完成的;Agent 本地跑 Tokenizer 只是为了预算审计和更精准地切片,不是替大模型分担计算。
SEMANTIC SEARCH

语义搜索 vs 关键词搜索

搜"汽车",关键词搜索漏掉"越野车";向量搜索能感知 car / vehicle / 越野车 是同类事物。

HYBRID SEARCH

混合搜索

纯向量搜索分不清 iPhone 15 与 16;关键词检索(BM25)+ 向量检索结合,兼顾精确度与泛化度。

RE-RANKING

重排序

向量库先捞出高召回的 Top-20,再用 Cross-Encoder 重排序模型精选出最相关的 Top-3 给大模型。

AGENT MEMORY

长期记忆

Agent 把历史聊天记录切片、向量化存储,提问时自动检索相关记忆合并进 Prompt。

07

向量数据库里存了什么?

传统数据库全表扫描计算相似度效率太低,向量数据库用 ANN 近似最近邻算法(如 HNSW、IVF),毫秒级从数亿向量中找到最接近的几个。一条典型记录长这样:

id
"123"
embedding
[0.81, 0.5, -0.1, -0.22, ...]
text
"OpenAI released GPT-4"
metadata
{ source: "news", author: "Rick" }

常见方案:轻量本地型 Chroma / Faiss;企业分布式 Pinecone / Milvus / Qdrant;传统数据库扩展 pgvector(给 PostgreSQL 加 HNSW / IVF 索引)。

08

不同模型的向量能混用吗?

切勿混用:不同 Embedding 模型的向量处于不同的语义空间,第 1 维在模型 A 里可能和"喜悦程度"相关,在模型 B 里可能完全对应别的东西。一旦混用,余弦相似度计算会彻底失真。

需要说明的是,现代 Embedding 的单个维度通常并没有人类可读的明确含义——语义特征由成百上千个维度共同编码,这叫分布式表示。而且维度并非越高越好:过高的维度会拖慢检索、占用更多存储,很多 384 维的小模型在垂直场景反而更好用。

09

数据分块与重叠

长文章不能整段塞进 Embedding 模型,需要先切片(Chunking)。为了避免完整意思被"拦腰截断",相邻分块之间会设置重叠区间。下面是 Chunk Size = 24 字、Overlap = 8 字的滑动窗口切分:

更进阶的做法是语义分块:通过分析相邻句子余弦相似度的突变,识别出段落或语义转折的真实边界,让每个分块天然对应一个完整的思想。

10

进阶原理:马特廖什卡嵌入

套娃嵌入(Matryoshka Representation Learning)允许把 1536 维向量直接截断,只保留前 256 维,语义信息几乎不丢失,但存储和检索开销降低数倍:

秘密在于训练阶段就针对多个尺度联合优化损失函数,模型在一次前向传播中同时学好"从粗到细"所有尺度的表示——因此截断不需要重新训练,是非常实用的工程调优手段。