【机器学习】(31)—— 如何得到 Embedding

如何得到 Embedding:降维、联合训练与上下文

文章目录

  • [如何得到 Embedding:降维、联合训练与上下文](#如何得到 Embedding:降维、联合训练与上下文)
    • [1. 向量从哪来](#1. 向量从哪来)
    • [2. 降维:把高维结构压矮](#2. 降维:把高维结构压矮)
    • [3. 联合训练:Embedding 作为网络一层](#3. 联合训练:Embedding 作为网络一层)
      • [3.1 和 One-Hot 的关系](#3.1 和 One-Hot 的关系)
      • [3.2 汽车例子里怎么监督](#3.2 汽车例子里怎么监督)
      • [3.3 代价与训练时注意点](#3.3 代价与训练时注意点)
    • [4. 静态词嵌入与分布假说](#4. 静态词嵌入与分布假说)
    • [5. 上下文嵌入:同一词可以有多个向量](#5. 上下文嵌入:同一词可以有多个向量)
    • [6. 汽车场景怎么选](#6. 汽车场景怎么选)
    • [7. 常见误区](#7. 常见误区)
    • [8. 术语表](#8. 术语表)
    • [9. 延伸阅读](#9. 延伸阅读)
    • [10. 小结](#10. 小结)

摘要:第 29、30 篇说明了为什么要用 Embedding,以及嵌入空间里距离代表什么。接下来的问题是:这些向量从哪来。本文介绍三条常见路径------用 PCA 一类方法做降维、把 Embedding 当作网络一层与任务联合训练、以及先学静态词向量再(在需要时)升级到上下文嵌入------并说明汽车品牌这类表格特征更常走哪一条。


1. 向量从哪来

Embedding 不是凭空出现的表。常见来源可以粗分成三类:

路径 大致做法 特点
降维 对高维稀疏表示做 PCA 等 不直接优化下游损失
联合训练 Embedding 层跟预测网络一起训 贴合当前任务,表格场景常用
预训练再接入 先在语料 / 共现上学会向量,再接到任务 适合文本等;可冻结或微调

第 29 篇的「品牌查表」在实现上多半属于联合训练:表参数由油耗等损失回传更新。降维与预训练是另外两种获得低维坐标的方式,有时会混用(例如先 PCA 初始化,再继续训)。


2. 降维:把高维结构压矮

高维空间里若存在可合并的相关方向,可以用数学方法压到较低维,得到每个样本或每个类别的短坐标。**主成分分析(PCA)**是经典例子:在词袋、One-Hot 等表示上,寻找方差较大的方向,把相关维合并。

理论上,凡是能保留高维主要结构的降维,都可以当作一种「嵌入」供后续模型使用。实务上要注意:

  • PCA 优化的是重构 / 方差一类目标,不一定等于油耗预测损失
  • 类别 ID 若只做一次全表 PCA 再切分,仍有泄漏风险;变换应在训练集上 fit
  • 词表极大时,先物化稠密 One-Hot 再 PCA,内存本身可能先爆掉

因此,汽车品牌预测里更常见的是直接用可学习的 Embedding 层,而不是先对品牌 One-Hot 做 PCA。降维更适合「已经有高维数值或词袋、需要压缩」的情形,或作为对照基线。


3. 联合训练:Embedding 作为网络一层

把嵌入维数设为 d d d,在网络里放一层(查表或等价线性变换),与后面的隐藏层、输出层一起,用任务损失做反向传播。这是表格高基数特征最常用的做法。

3.1 和 One-Hot 的关系

输入可以是整数下标(框架 Embedding 层),概念上等价于:先变成 One-Hot,再乘一张 V × d V\times d V×d 的矩阵得到 d d d 维向量。训练时更新的就是这张矩阵(嵌入表)。

示意数值仅帮助理解,真实训练后的分量不会按「甜度」命名。第 30 篇已强调:轴通常不可解释,但相似样本会在损失驱动下逐渐靠近。

3.2 汽车例子里怎么监督

目标可以是:预测油耗数值,或「是否高效」。品牌走 Embedding,重量、马力等走标准化后与嵌入拼接,再接 MLP 或线性层。损失从输出回传到嵌入表。

也可以构造「根据若干已选品牌,预测另一个相关品牌 / 车型」这类辅助任务(推荐里常见),用 Softmax 等损失;入门阶段用主任务标签联合训练即可,不必一上来叠很多辅助目标。

3.3 代价与训练时注意点

联合训练得到的嵌入通常更贴合当前任务,但:

  • 需要足够标签与训练时间
  • 换任务后空间可能不再合适,往往要继续训或重学
  • d d d、正则、早停仍要按第 21、28、29 篇的习惯用验证集选

嵌入表参数量为 V × d V\times d V×d。 V V V 很大且 d d d 也开得很大时,过拟合与显存压力都会上来。可以先从较小的 d d d(如 8~32)试起,确认验证集有收益再加。低频品牌可并入 UNK,避免大量几乎只出现一次的行占满表容量。

若从随机初始化开始,前几轮近邻可能看起来很乱,这不反常;应主要看验证损失是否下降,而不是过早用二维投影下结论。


4. 静态词嵌入与分布假说

文本上有一条常用假设:出现在相似上下文中的词,语义上也更接近 (分布假说)。word2vec 等算法据此在大规模语料上为每个词学一个固定向量,即第 30 篇说的静态嵌入

得到静态向量之后,可以:

  • 直接当特征接到逻辑回归 / MLP
  • 作为 Embedding 表的初始化,再在下游任务上微调
  • 做检索、近邻分析

对汽车业务:若只有结构化品牌 ID、没有长文本,静态词向量用不上品牌字段本身;若车评、配置说明是文本,可以为词或短语接入预训练向量。品牌 ID 字段仍优先联合训练的离散 Embedding。

静态向量的质量强烈依赖语料领域。通用网页语料上的「发动机」「涡轮」邻居,未必等于某一车企内部工单语料上的邻居。领域差距大时,把静态向量当初始化再微调,通常比完全冻结更稳妥。


5. 上下文嵌入:同一词可以有多个向量

静态嵌入的限制是一词一点。「行」在「银行」与「行走」里含义不同,「orange」可以是颜色或水果,单点无法同时兼顾。

**上下文嵌入(contextual embedding)**让同一词在不同句子中可以对应不同向量,向量由该词及其周围词共同决定。

获取方式(了解级别即可):

方向 大意
ELMo 一类 在静态向量基础上,用双向语言模型状态融合上下文
掩码语言模型(如 BERT 方向) 根据两侧上下文预测被遮住的词,得到随句而变的表示
Transformer 自注意力按上下文加权;常再叠加位置信息,形成该序列特有的输入表示

图像里也可以谈「上下文」:像素颜色的静态编码,若再结合位置与邻域,信息往往更完整。专栏当前主线仍是表格与浅层网络;上下文嵌入在文本、序列任务里更关键,这里只标出与静态嵌入的差别,避免一上来陷入大模型细节。

对离散品牌 ID:多数情况下一品牌一向量足够。若「同一字符串在不同地区 / 渠道含义不同」,才需要更细的 ID 设计或上下文式建模。


6. 汽车场景怎么选

情况 更稳妥的起点
品牌 / 车型水平很少 One-Hot(第 17 篇)往往够用
水平很多,且有油耗等标签 Embedding 层与模型联合训练
只有共现、弱标签 可参考上下文 / 预训练思路,或先做辅助预测任务
输入是自由文本且多义明显 再考虑上下文嵌入或预训练语言模型
已有高维词袋要压缩 可试 PCA 等降维作基线,再与联合训练对比

无论哪条路,词表与变换仍应在训练集上确定;验证、测试只做查表或 transform。第 18、19、29 篇的防泄漏要求不因换了 Embedding 来源而取消。

比较两条路径时,尽量控制其他变量:同一划分、同一数值特征处理、同一输出头与指标,只改「品牌用 One-Hot / PCA 压缩 / 可学习 Embedding」中的一项,再看验证集差异。这样结论更干净,也避免把学习率或宽度造成的波动误当成 Embedding 的功劳。

概念代码(联合训练路径):

python 复制代码
# brand_id: (batch,) 整数下标
emb = embedding(brand_id)              # (batch, d)
x = concat([emb, numeric_features], -1)
y_hat = mlp(x)
loss = mse(y_hat, y)  # 或交叉熵等
# loss.backward() 会更新 embedding 与 mlp

7. 常见误区

情况 说明
有了 PCA 就认为一定优于可学习 Embedding 目标不同;应用验证集比较
联合训练却用全表统计建词表 仍是泄漏
把预训练静态向量当永久正确答案 换领域、换任务可能失效,常需微调
表格品牌 ID 强行上大型上下文模型 成本高,收益未必有;先试普通 Embedding
静态与上下文分不清 静态一词一点;上下文随句子变
只初始化嵌入、后面层乱设却怪 Embedding 输出头、划分、指标仍要单独检查

8. 术语表

术语 含义
PCA 主成分分析,一种线性降维方法
联合训练 Embedding 与下游网络共用任务损失更新
嵌入层 将 ID / One-Hot 映到 d d d 维的网络层
分布假说 上下文相似的词语义也更接近
静态嵌入 每个词 / ID 全局一个向量
上下文嵌入 同一词随上下文可对应不同向量
微调 在预训练向量或模型上继续用下游数据训练

9. 延伸阅读

资源 适合看什么
专栏第 29 篇 为何需要 Embedding
专栏第 30 篇 空间、距离与静态嵌入
sklearn PCA 降维基线
PyTorch Embedding 联合训练查表层
gensim Word2Vec 静态词向量

10. 小结

得到 Embedding 不必只有一种办法:降维能从高维表示压出短坐标;联合训练让嵌入直接服务油耗等任务;静态词向量提供可迁移的语义起点,上下文嵌入则缓解一词多义。汽车表格里高基数品牌,优先考虑「Embedding 层 + 数值特征 + 任务损失」;水平很少时 One-Hot 仍然有效。三条路径可以并存作对照,最终仍以验证集上的业务指标决定采用哪一种。

下一篇会对 Embedding 相关几篇做一次串讲,把动机、空间、获取方式等整理一下,并预告后面的主题。

系列导航


如果本篇对你有帮助,欢迎点赞、收藏、关注博主,机器学习专栏持续更新中,下次更新不迷路。

相关推荐
码云之上2 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978332 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒2 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
天天爱吃肉82182 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
把所有砖敲烂3 小时前
DeepSeek V4正式版发布,教你在Codex中配置Flash
人工智能·产品
wyg_0311133 小时前
从0搭建极简transformer大模型
人工智能·深度学习·transformer
老王以为3 小时前
走进 AI Agent
前端·人工智能·架构
dong_junshuai3 小时前
每天一个开源项目#59 AirLLM:27.6K星,3.72GB显存跑2.8T模型
人工智能·程序员·github
文心快码BaiduComate3 小时前
Comate 已支持DeepSeek-V4-Flash 正式版
人工智能·程序员
MartinYeung53 小时前
[论文学习]OSReward:为跨平台计算机使用奖励模型建立标准化评估
人工智能·学习