☰
Embedding 就是对象的“语义坐标”:把离散的符号变成稠密向量,让机器能计算“谁和谁更像”。
2026/10/11 13:53:33 网站建设 项目流程

在 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, ...]

问题是:

  1. 维度等于词表大小,可能几万几十万维,很稀疏。

  2. 任意两个词都是正交的,距离一样,无法表达“猫和狗很像”。

  3. 不能携带语义信息。

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

常见加噪方式

  1. 高斯噪声

    e~=e+N(0,σ2)e~=e+N(0,σ2)

    最常用,简单,适合正则化、隐私保护。

  2. 均匀噪声

    ϵ∼U(−a,a)ϵ∼U(−a,a)

    每个维度在 [−a,a][−a,a] 内随机扰动。

  3. 拉普拉斯噪声
    差分隐私里常用,因为拉普拉斯分布尾巴更重,更适合隐私保护。

  4. Dropout / Mask
    随机把某些维度置零:

    e~=e⊙me~=e⊙m

    其中 mm 是 0/1 掩码。它其实也是一种乘性噪声。

  5. 对抗扰动
    不是随机加,而是找让模型最容易出错的方向:

    e~=e+δe~=e+δδ=arg⁡max⁡∥δ∥≤ϵL(f(e+δ),y)δ=arg∥δ∥≤ϵmax​L(f(e+δ),y)

    常见于 FGM、PGD 对抗训练。

  6. 可学习噪声
    在 VAE 里:

    z=μ+σ⊙ϵz=μ+σ⊙ϵ

    这相当于在隐空间 embedding 上加噪,用来生成新样本。


为什么要给 Embedding 加噪?

主要目的有这些:

  • 正则化,防止过拟合
    让模型不要死记某个 embedding 的精确值,而是学习更平滑的表示空间。

  • 数据增强
    同一个对象加不同噪声,得到多个“略有不同”的向量,当成额外样本。

  • 提高鲁棒性
    模型见过带噪声的表示后,遇到输入扰动、数据缺失、噪声数据时更稳。

  • 对比学习
    同一句话两次前向,由于 dropout 不同,得到两个略有差异的 embedding,作为正样本对。SimCSE 就是典型例子。

  • 隐私保护
    给用户或物品 embedding 加噪,降低反推原始信息的风险,常和差分隐私一起用。

  • 生成模型 / 扩散模型
    在 latent 或 embedding 上不断加噪,再学习去噪,从而生成新内容。

  • 推荐系统 / 图神经网络
    给用户、商品、节点 embedding 加噪,构造对比视图,缓解冷启动和过拟合。


和几个概念的区别

  • 输入加噪:改原始数据,比如词替换、图片加噪。

  • Embedding 加噪:不改原始数据,改的是模型内部的向量表示。

  • Dropout:随机置零,属于一种结构化加噪。

  • 对抗训练:加的是“最坏方向”的扰动,不是随机噪声。

  • 差分隐私:通常在梯度或输出上加噪;embedding 加噪也可以用于隐私保护,但要满足隐私预算。


注意点

噪声强度很关键:

  • 太小:几乎没效果。

  • 太大:embedding 语义被破坏,模型性能下降。

  • 通常训练时加噪,推理时不一定加。

  • 如果 embedding 做过归一化,加噪后可能还要重新归一化。

  • 随机种子、噪声分布、加噪位置都会影响结果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询