在 AI/机器学习里,Embedding(嵌入)简单说就是:把某个对象——比如一个词、一句话、一张图、一个用户、一个商品——转换成一串固定长度的数字向量。这串向量就叫它的 embedding。
它的核心特点是:语义或特征相近的对象,在向量空间里的距离会更近。
比如:
“猫” →
[0.8, -0.2, 0.4, ...]“狗” →
[0.7, -0.1, 0.5, ...]“汽车” →
[-0.6, 0.9, -0.3, ...]
“猫”和“狗”的向量会比较接近,“猫”和“汽车”的向量会比较远。计算机不能直接理解“猫”这个词,但可以计算向量之间的相似度。
为什么需要 Embedding?
早期常用one-hot 编码表示词:
“猫” →
[0, 0, 1, 0, 0, ...]“狗” →
[0, 1, 0, 0, 0, ...]
问题是:
维度等于词表大小,可能几万几十万维,很稀疏。
任意两个词都是正交的,距离一样,无法表达“猫和狗很像”。
不能携带语义信息。
Embedding 则把词变成低维、稠密、可学习的向量,比如 128 维、768 维、1536 维。它不仅能压缩表示,还能让“相似”变成可计算的几何关系。
数学上怎么理解?
可以把它看成一个映射:
f:对象→Rdf:对象→Rd
比如输入是“猫”的编号 3,模型通过一个可训练的矩阵W查表:
e猫=W[3]e猫=W[3]
这个矩阵就是Embedding 层。它的每一行对应一个对象的向量,训练时这些数字会不断调整。
怎么训练出来?
不是人工写死的,而是模型从数据里学出来的。常见方式:
Word2Vec:用周围词预测中心词,或反过来。
BERT:通过掩码语言模型,预测被遮住的词。
对比学习:让相似样本的向量靠近,不相似的推远。
推荐系统:让用户向量和喜欢的商品向量更接近。
训练完后,向量里就隐含了语义关系。经典例子:
king−man+woman≈queenking−man+woman≈queen
常见类型
词嵌入:Word2Vec、GloVe、FastText
上下文词嵌入:BERT、ELMo
句子/文档嵌入:Sentence-BERT、BGE、OpenAI text-embedding
图像嵌入:CNN、ViT、CLIP
用户/物品嵌入:推荐系统
多模态嵌入:CLIP 把图片和文字映射到同一个向量空间,所以可以用文字搜图
有什么用途?
是搜索、推荐、RAG、大模型、多模态里非常基础的一块。
语义搜索:把查询和文档都变成向量,算相似度。
RAG:文档切块后做 embedding,存进向量数据库,检索相关片段。
推荐系统:用户 embedding 和物品 embedding 做点积,预测兴趣。
聚类/分类:相似向量聚在一起。
大模型输入:文字先分词成 token,每个 token 查 embedding 变成向量,再加位置 embedding,送进 Transformer。
怎么判断相似?
常用:
余弦相似度:看两个向量夹角,越接近 1 越相似。
点积:常用于推荐。
欧氏距离:距离越小越相似。
Embedding 加噪
就是在向量表示上注入可控扰动,得到一个新的、略有变化的向量,再送进模型或用于后续计算,让模型别过度依赖精确坐标,从而获得更好的泛化、鲁棒性、隐私性或生成能力。
数学上最常见是:
e~=e+ϵe~=e+ϵ
其中:
ee:原始 embedding
ϵϵ:噪声
e~e~:加噪后的 embedding
比如高斯噪声:
ϵ∼N(0,σ2I)ϵ∼N(0,σ2I)
也就是每个维度都加一点小幅随机数。σσ 控制噪声强度。
代码上大概就是:
python
e = embedding(x) noise = torch.randn_like(e) * sigma e_noisy = e + noise
常见加噪方式
高斯噪声
e~=e+N(0,σ2)e~=e+N(0,σ2)最常用,简单,适合正则化、隐私保护。
均匀噪声
ϵ∼U(−a,a)ϵ∼U(−a,a)每个维度在 [−a,a][−a,a] 内随机扰动。
拉普拉斯噪声
差分隐私里常用,因为拉普拉斯分布尾巴更重,更适合隐私保护。Dropout / Mask
e~=e⊙me~=e⊙m
随机把某些维度置零:其中 mm 是 0/1 掩码。它其实也是一种乘性噪声。
对抗扰动
e~=e+δe~=e+δδ=argmax∥δ∥≤ϵL(f(e+δ),y)δ=arg∥δ∥≤ϵmaxL(f(e+δ),y)
不是随机加,而是找让模型最容易出错的方向:常见于 FGM、PGD 对抗训练。
可学习噪声
z=μ+σ⊙ϵz=μ+σ⊙ϵ
在 VAE 里:这相当于在隐空间 embedding 上加噪,用来生成新样本。
为什么要给 Embedding 加噪?
主要目的有这些:
正则化,防止过拟合
让模型不要死记某个 embedding 的精确值,而是学习更平滑的表示空间。数据增强
同一个对象加不同噪声,得到多个“略有不同”的向量,当成额外样本。提高鲁棒性
模型见过带噪声的表示后,遇到输入扰动、数据缺失、噪声数据时更稳。对比学习
同一句话两次前向,由于 dropout 不同,得到两个略有差异的 embedding,作为正样本对。SimCSE 就是典型例子。隐私保护
给用户或物品 embedding 加噪,降低反推原始信息的风险,常和差分隐私一起用。生成模型 / 扩散模型
在 latent 或 embedding 上不断加噪,再学习去噪,从而生成新内容。推荐系统 / 图神经网络
给用户、商品、节点 embedding 加噪,构造对比视图,缓解冷启动和过拟合。
和几个概念的区别
输入加噪:改原始数据,比如词替换、图片加噪。
Embedding 加噪:不改原始数据,改的是模型内部的向量表示。
Dropout:随机置零,属于一种结构化加噪。
对抗训练:加的是“最坏方向”的扰动,不是随机噪声。
差分隐私:通常在梯度或输出上加噪;embedding 加噪也可以用于隐私保护,但要满足隐私预算。
注意点
噪声强度很关键:
太小:几乎没效果。
太大:embedding 语义被破坏,模型性能下降。
通常训练时加噪,推理时不一定加。
如果 embedding 做过归一化,加噪后可能还要重新归一化。
随机种子、噪声分布、加噪位置都会影响结果。