Embedding(嵌入)把文字变成数字向量,让计算机"理解"语义。
想象一个 2D 平面:
猫
↖ ↑ ↗
狗 ← → 鼠标
↙ ↓ ↘
汽车
在这个空间中,"猫"和"狗"距离很近(都是动物),"汽车"离它们很远。
LLM 使用数千维的空间,每个词都是一个高维向量(如 768、1024、4096 维)。
king - man + woman ≈ queen
这是经典的"词语类比"例子,说明 Embedding 捕捉了语义关系。
| 特性 | One-hot | Embedding |
|---|---|---|
| 维度 | 词表大小(10K+) | 固定(512-4096) |
| 稀疏性 | 极度稀疏 | 稠密 |
| 语义信息 | 无 | 有 |
| 泛化能力 | 无 | 强 |
1. Word2Vec (2013)
2. GloVe (2014)
3. Contextual Embedding (2018+)
1. 语义搜索
查询: "如何减肥" 匹配: "减脂方法" (语义相似,非字面匹配)
2. 推荐系统
3. RAG (检索增强生成)
4. 聚类/分类
| 模型 | 维度 | 特点 |
|---|---|---|
| text-embedding-3-small | 1536 | OpenAI,性价比高 |
| text-embedding-3-large | 3072 | OpenAI,精度最高 |
| bge-base-zh | 768 | 智谱,中文优化 |
| m3e-base | 768 | 开源,中英双语 |
from openai import OpenAI
client = OpenAI()
# 获取 embedding
response = client.embeddings.create(
model="text-embedding-3-small",
input="你好,世界"
)
embedding = response.data[0].embedding
print(f"维度: {len(embedding)}")
print(f"前5个值: {embedding[:5]}")
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# 比较两个句子的相似度
sim = cosine_similarity(embedding1, embedding2)
print(f"相似度: {sim:.2%}")