从「为什么 AI 知道"汽车"和"轿车"意思接近」这个直觉问题开始
下面是用真实的 Embedding 模型(all-MiniLM-L6-v2)计算出的词与词之间的余弦相似度。 观察同类词的相似度(高)和不同类词的相似度(低)。
| 目标词 | 相似度 | 强度 |
|---|
真实的 Embedding 是 384 维的,人脑看不见。PCA 把它降到 2 维后, 可以清晰看到同类词自然聚集在一起。
文档库中包含「汽车」「轿车」「SUV」「卡车」「香蕉」「苹果」等词条。 试试搜索"代步工具"—— 文档中一个"代步工具"的字都没有,但语义搜索能找到汽车和轿车。
核心直觉:余弦相似度看的是"方向",欧几里得距离看的是"绝对位置"。 在文本中,长文本和短文本表达同一个意思时,向量长度不同但方向接近——所以 NLP 只用余弦相似度。
# 两个方向相同、长度不同的向量
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
1. 喂入海量文本(维基百科、新闻、书籍)
2. 对每个词创建随机向量作为"初始值"
3. 让模型做预测:看到"汽车",猜周围有哪些词
4. 预测"轿车"的概率应该很高,
预测"香蕉"的概率应该很低
5. 根据预测误差,调整向量值
6. 重复几亿次
每个维度没有明确的名字,但可以类比:
| 维度1 ≈ | "是否跟交通有关" |
| 维度2 ≈ | "是否是生物" |
| 维度3 ≈ | "是否是人造物" |
| 真实的 384 个维度学到的特征更复杂、更抽象,但原理一样。 | |
Embedding 负责"理解语义",向量数据库负责"存储和快速检索"。两者配合才能构建高效的语义搜索系统。