Skip to content
🔗 分享本题
查看我的学习进度 →

Token 与 Embedding 动漫知识图:文本切分为离散 Token 和 Token ID 后查表得到连续向量,再经 Transformer 上下文化;文本 Embedding 则服务于检索和聚类

🧠 图解记忆:Token 是离散符号,Embedding 是连续坐标,上下文让含义改变;点击图片可查看原图。

Embedding = 把文本/Token 映射成稠密向量的技术,是 LLM 理解语义的基石。

核心概念

概念说明
Token文本的最小切分单位(字符串层面)
Token IDToken 在词表中的编号(离散整数)
EmbeddingToken ID 对应的稠密向量(连续浮点数,如 768/1024/4096 维)

关系链路:

"我爱AI" → Tokenize → ["我", "爱", "AI"] → 查表 → [[0.12, -0.34, ...], ...]

Embedding 的核心特性

  1. 语义相似 → 向量距离近:"苹果"和"水果"余弦相似度高,和"汽车"距离远
  2. 两种 Embedding
    • 静态 Embedding(Word2Vec/GloVe):一个词一个向量,不随上下文变化("bank"河岸/银行都一样)
    • 上下文 Embedding(BERT/LLM 内部):同一个词在不同句子中向量不同("苹果"在水果/手机语境下不同)✅ 主流
  3. 维度:决定表示能力与显存/计算成本(常见 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 里它是检索的基石:文档和问题向量化后用余弦相似度匹配,这也是我们系统召回率的基础。"


📚 参考:OpenAI Embeddings Guide