【机器学习】(31)—— 如何得到 Embedding
如何得到 Embedding:降维、联合训练与上下文
文章目录
- 如何得到 Embedding:降维、联合训练与上下文
- 1. 向量从哪来
- 2. 降维:把高维结构压矮
- 3. 联合训练:Embedding 作为网络一层
- 3.1 和 One-Hot 的关系
- 3.2 汽车例子里怎么监督
- 3.3 代价与训练时注意点
- 4. 静态词嵌入与分布假说
- 5. 上下文嵌入:同一词可以有多个向量
- 6. 汽车场景怎么选
- 7. 常见误区
- 8. 术语表
- 9. 延伸阅读
- 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 dd,在网络里放一层(查表或等价线性变换),与后面的隐藏层、输出层一起,用任务损失做反向传播。这是表格高基数特征最常用的做法。
3.1 和 One-Hot 的关系
输入可以是整数下标(框架Embedding层),概念上等价于:先变成 One-Hot,再乘一张V × d V\times dV×d的矩阵得到d dd维向量。训练时更新的就是这张矩阵(嵌入表)。
示意数值仅帮助理解,真实训练后的分量不会按「甜度」命名。第 30 篇已强调:轴通常不可解释,但相似样本会在损失驱动下逐渐靠近。
3.2 汽车例子里怎么监督
目标可以是:预测油耗数值,或「是否高效」。品牌走 Embedding,重量、马力等走标准化后与嵌入拼接,再接 MLP 或线性层。损失从输出回传到嵌入表。
也可以构造「根据若干已选品牌,预测另一个相关品牌 / 车型」这类辅助任务(推荐里常见),用 Softmax 等损失;入门阶段用主任务标签联合训练即可,不必一上来叠很多辅助目标。
3.3 代价与训练时注意点
联合训练得到的嵌入通常更贴合当前任务,但:
- 需要足够标签与训练时间
- 换任务后空间可能不再合适,往往要继续训或重学
- d dd、正则、早停仍要按第 21、28、29 篇的习惯用验证集选
嵌入表参数量为V × d V\times dV×d。V VV很大且d dd也开得很大时,过拟合与显存压力都会上来。可以先从较小的d dd(如 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 的功劳。
概念代码(联合训练路径):
# 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 与 mlp7. 常见误区
| 情况 | 说明 |
|---|---|
| 有了 PCA 就认为一定优于可学习 Embedding | 目标不同;应用验证集比较 |
| 联合训练却用全表统计建词表 | 仍是泄漏 |
| 把预训练静态向量当永久正确答案 | 换领域、换任务可能失效,常需微调 |
| 表格品牌 ID 强行上大型上下文模型 | 成本高,收益未必有;先试普通 Embedding |
| 静态与上下文分不清 | 静态一词一点;上下文随句子变 |
| 只初始化嵌入、后面层乱设却怪 Embedding | 输出头、划分、指标仍要单独检查 |
8. 术语表
| 术语 | 含义 |
|---|---|
| PCA | 主成分分析,一种线性降维方法 |
| 联合训练 | Embedding 与下游网络共用任务损失更新 |
| 嵌入层 | 将 ID / One-Hot 映到d dd维的网络层 |
| 分布假说 | 上下文相似的词语义也更接近 |
| 静态嵌入 | 每个词 / ID 全局一个向量 |
| 上下文嵌入 | 同一词随上下文可对应不同向量 |
| 微调 | 在预训练向量或模型上继续用下游数据训练 |
9. 延伸阅读
| 资源 | 适合看什么 |
|---|---|
| 专栏第 29 篇 | 为何需要 Embedding |
| 专栏第 30 篇 | 空间、距离与静态嵌入 |
| sklearn PCA | 降维基线 |
| PyTorch Embedding | 联合训练查表层 |
| gensim Word2Vec | 静态词向量 |
10. 小结
得到 Embedding 不必只有一种办法:降维能从高维表示压出短坐标;联合训练让嵌入直接服务油耗等任务;静态词向量提供可迁移的语义起点,上下文嵌入则缓解一词多义。汽车表格里高基数品牌,优先考虑「Embedding 层 + 数值特征 + 任务损失」;水平很少时 One-Hot 仍然有效。三条路径可以并存作对照,最终仍以验证集上的业务指标决定采用哪一种。
下一篇会对 Embedding 相关几篇做一次串讲,把动机、空间、获取方式等整理一下,并预告后面的主题。
系列导航:
- 上一篇:【机器学习】(30)—— 嵌入空间
- 下一篇(预告):Embedding 这几篇串一下
如果本篇对你有帮助,欢迎点赞、收藏、关注博主,机器学习专栏持续更新中,下次更新不迷路。
