Embedding 学习:程序员的视角

从「为什么 AI 知道"汽车"和"轿车"意思接近」这个直觉问题开始

📐 词向量相似度矩阵

下面是用真实的 Embedding 模型(all-MiniLM-L6-v2)计算出的词与词之间的余弦相似度。 观察同类词的相似度(高)和不同类词的相似度(低)。

点击一个词查看它和其他词的相似度排名

汽车 的相似度排名

目标词相似度强度
发现:"汽车"和"轿车"的相似度高达 0.85,和"卡车"也有 0.67。但和"香蕉"只有 0.23。Embedding 成功捕捉了语义关系 —— 意思接近的词,在向量空间中距离也近

🧭 语义空间可视化(PCA 降维到 2D)

真实的 Embedding 是 384 维的,人脑看不见。PCA 把它降到 2 维后, 可以清晰看到同类词自然聚集在一起

交通工具 水果 编程语言 查询向量

📏 余弦相似度 vs 欧几里得距离

核心直觉:余弦相似度看的是"方向",欧几里得距离看的是"绝对位置"。 在文本中,长文本和短文本表达同一个意思时,向量长度不同但方向接近——所以 NLP 只用余弦相似度。

为什么长文本和短文本的"欧几里得距离"不准

两条向量方向相同,长度不同
→ 余弦相似度 = 1.0(方向一致!)
→ 欧几里得距离 = 很远(被长度骗了)

代码计算

# 两个方向相同、长度不同的向量
v1 = [1, 2, 3]    # 短文本 Embedding
v2 = [4, 8, 12]   # 长文本 Embedding(方向同,4倍长)

# 欧几里得距离 → 很远(被长度误导)
euc = sqrt(3²+6²+9²) = 11.2

# 余弦相似度 → 方向完全一致
cos = dot(v1,v2)/(|v1|×|v2|) = 1.0

💡 Embedding 的核心思想

「意思接近的词,出现在相似的上下文中
文字"汽车"
Embedding模型
384维向量[0.23, -0.45, 0.78, ...]

训练方式(Word2Vec)

1. 喂入海量文本(维基百科、新闻、书籍)
2. 对每个词创建随机向量作为"初始值"
3. 让模型做预测:看到"汽车",猜周围有哪些词
4. 预测"轿车"的概率应该很高,
   预测"香蕉"的概率应该很低
5. 根据预测误差,调整向量值
6. 重复几亿次

向量维度的直觉理解

每个维度没有明确的名字,但可以类比:

维度1 ≈"是否跟交通有关"
维度2 ≈"是否是生物"
维度3 ≈"是否是人造物"
真实的 384 个维度学到的特征更复杂、更抽象,但原理一样。

Embedding 的 4 个核心应用

语义搜索
按意思搜,不按关键词
"代步工具" → 找到"汽车""自行车"
文本聚类
把相似文本分到一组
自动分类客服工单
推荐系统
"你还可能喜欢..."
看了"汽车"文章→推荐"轿车"
异常检测
找到"不对劲"的内容
检测代码中的不安全模式

Embedding vs 向量数据库 —— 分工

Embedding 模型文字→向量
向量数据库存储+检索
应用RAG / 搜索 / 推荐

Embedding 负责"理解语义",向量数据库负责"存储和快速检索"。两者配合才能构建高效的语义搜索系统。