← 返回

什么是 Embedding

Embedding(嵌入)把文字变成数字向量,让计算机"理解"语义。

类比理解

想象一个 2D 平面:

      猫
       ↖ ↑ ↗
    狗 ←   → 鼠标
       ↙ ↓ ↘
     汽车

在这个空间中,"猫"和"狗"距离很近(都是动物),"汽车"离它们很远。

真实情况

LLM 使用数千维的空间,每个词都是一个高维向量(如 768、1024、4096 维)。

king - man + woman ≈ queen

这是经典的"词语类比"例子,说明 Embedding 捕捉了语义关系。

为什么需要 Embedding?

Embedding vs One-hot

特性 One-hot Embedding
维度 词表大小(10K+) 固定(512-4096)
稀疏性 极度稀疏 稠密
语义信息
泛化能力

如何学习 Embedding?

1. Word2Vec (2013)

2. GloVe (2014)

3. Contextual Embedding (2018+)

应用场景

1. 语义搜索

查询: "如何减肥"
匹配: "减脂方法" (语义相似,非字面匹配)

2. 推荐系统

3. RAG (检索增强生成)

4. 聚类/分类

主流 Embedding 模型

模型 维度 特点
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%}")