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

发布时间:2026/8/4 2:32:05
【机器学习】(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如 832试起确认验证集有收益再加。低频品牌可并入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,) 整数下标embembedding(brand_id)# (batch, d)xconcat([emb,numeric_features],-1)y_hatmlp(x)lossmse(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 这几篇串一下如果本篇对你有帮助欢迎点赞、收藏、关注博主机器学习专栏持续更新中下次更新不迷路。