🧠 图解记忆:Token 是离散符号,Embedding 是连续坐标,上下文让含义改变;点击图片可查看原图。
Embedding = 把文本/Token 映射成稠密向量的技术,是 LLM 理解语义的基石。
核心概念
| 概念 | 说明 |
|---|---|
| Token | 文本的最小切分单位(字符串层面) |
| Token ID | Token 在词表中的编号(离散整数) |
| Embedding | Token ID 对应的稠密向量(连续浮点数,如 768/1024/4096 维) |
关系链路:
"我爱AI" → Tokenize → ["我", "爱", "AI"] → 查表 → [[0.12, -0.34, ...], ...]Embedding 的核心特性
- 语义相似 → 向量距离近:"苹果"和"水果"余弦相似度高,和"汽车"距离远
- 两种 Embedding
- 静态 Embedding(Word2Vec/GloVe):一个词一个向量,不随上下文变化("bank"河岸/银行都一样)
- 上下文 Embedding(BERT/LLM 内部):同一个词在不同句子中向量不同("苹果"在水果/手机语境下不同)✅ 主流
- 维度:决定表示能力与显存/计算成本(常见 768~8192)
应用场景
- 向量检索(RAG):文档和问题都转成向量,用余弦相似度找最相关片段
- 语义搜索:替代关键词匹配
- 聚类/分类:向量空间聚类
代码示例
python
# OpenAI Embedding API
from openai import OpenAI
client = OpenAI()
resp = client.embeddings.create(
model="text-embedding-3-large", # 3072 维
input=["苹果是一种水果", "苹果公司发布了新手机"]
)
vec1, vec2 = resp.data[0].embedding, resp.data[1].embedding
# 余弦相似度
import numpy as np
def cos_sim(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(cos_sim(vec1, vec2)) # 语义相关度打分面试话术:
"Embedding 是把 Token 映射成稠密向量的过程,语义相近的文本向量距离就近。重点要区分静态 Embedding 和上下文 Embedding——现在的 LLM 都是上下文相关的。在 RAG 里它是检索的基石:文档和问题向量化后用余弦相似度匹配,这也是我们系统召回率的基础。"
