嵌入基础
Embedding是将离散数据转换为连续向量表示的技术,是现代AI系统的基石。
01什么是Embedding
Embedding是能将离散的符号信息(如文字、图片)转换为连续数值向量的技术。
Embedding的定义
在数学上,Embedding是一个从离散空间到连续向量空间的映射函数。 对于文本,这个过程将每个词或句子映射为一个固定长度的实数向量。
一个简单的例子
假设我们使用3维向量表示单词:
"男人" → [0.8, 0.2, 0.1]
"女人" → [0.7, 0.3, 0.2]
"国王" → [0.9, 0.1, 0.0]
"王后" → [0.8, 0.2, 0.1]
可以看出,"男人"和"国王"的向量相似,"女人"和"王后"的向量相似。 这体现了Embedding捕捉语义关系的能力。
核心特征
语义捕获
语义相似的对象在向量空间中距离更近。 "猫"和"狗"的距离比"猫"和"汽车"更近。
维度压缩
将高维稀疏数据(如one-hot编码)压缩为低维密集向量。 典型的embedding维度从数万压缩到256/512/768等。
可计算性
转换后的向量可以进行数学运算。 vec("国王") - vec("男人") + vec("女人") ≈ vec("王后")
02嵌入空间
嵌入空间是一个几何空间,向量之间的距离和方向蕴含着语义关系。
空间特性
- 语义聚类:同义词或相关概念倾向于聚集在一起
- 线性关系:词与词之间的语义关系可以表示为向量运算
- 维度语义:不同的维度可能对应不同的语义特征
- 各向异性:某些方向的语义信息更丰富
可视化理解
由于人类无法直接理解高维空间,通常使用降维技术(如t-SNE、UMAP)将向量投影到2D或3D空间进行可视化。
常见可视化发现
- 同类词汇形成明显的聚类(如国家名、城市名)
- 性别、时态等语法特征形成特定方向
- 多义词在不同上下文中落在不同区域
03相似度计算
在向量空间中,通过计算向量之间的距离或夹角来衡量语义相似度。
余弦相似度
余弦相似度衡量两个向量方向的相似程度,取值范围为[-1, 1]。 值越接近1表示越相似,接近-1表示越相反。
公式
cosine(A, B) = (A · B) / (||A|| × ||B||)
其中 A·B 是向量点积,||A|| 和 ||B|| 是向量的模长。
Python实现
import numpy as np
from numpy.linalg import norm
def cosine_similarity(a, b):
return np.dot(a, b) / (norm(a) * norm(b))点积与欧氏距离
点积(Dot Product)
当向量已归一化时,点积与余弦相似度等价。
点积值越大,相似度越高。
dot(A, B) = Σ(Ai × Bi)
欧氏距离(L2距离)
衡量向量在空间中的绝对距离。
距离越小表示越相似。
euclidean(A, B) = ||A - B|| = sqrt(Σ(Ai - Bi)²)
选择建议
- 余弦相似度:向量长度不重要,关注方向时使用
- 点积:已归一化的向量,或需要快速计算时
- 欧氏距离:需要考虑向量绝对位置时