【机器学习】(32)—— Embedding 串讲

文章目录

    • [1. 前面几篇分别讲了什么](#1. 前面几篇分别讲了什么)
    • [2. 表格场景](#2. 表格场景)
    • [3. 多维空间](#3. 多维空间)
    • [4. 向量来源](#4. 向量来源)
    • [5. 提交前检查](#5. 提交前检查)
    • [6. 常见误区](#6. 常见误区)
    • [7. 和前面篇章关系](#7. 和前面篇章关系)
    • [8. 术语速查](#8. 术语速查)
    • [9. 延伸阅读](#9. 延伸阅读)
    • [10. 小结与下一主题](#10. 小结与下一主题)

摘要:第 29~31 篇分别讲了为何需要 Embedding、嵌入空间里距离意味着什么,以及向量可以从哪些途径得到。本文不引入新公式,把这三篇串成可对照的备忘:什么时候上 Embedding、表格里怎么接、词表与维数注意什么,并预告下一主题------语言模型与更长上下文。


1. 前面几篇分别讲了什么

第 17 篇的 One-Hot 在词表较小时很合适。品牌、车型、用户 ID 这类水平很多时,稀疏向量会把后续全连接撑得很肥,也几乎表达不了「谁和谁更像」。Embedding 相关三篇补的就是这块。

篇次 大概讲了什么
29 One-Hot 在高基数下的问题;Embedding 查表与参数量
30 嵌入空间、距离 / 余弦、任务依赖;静态嵌入及局限
31 降维、联合训练、预训练;静态与上下文嵌入的差别

贯穿示例仍是汽车:品牌走离散 ID,重量与马力走数值特征,目标可以是油耗回归或是否高效。换了表示方式,划分、防泄漏和验证集选参的要求没有换。

若刚读完 29~31,本文可当复习;若手头正好有高基数类别要进模型,也可先对照第 5 节的核对项,再决定 One-Hot 还是 Embedding。


2. 表格场景

高基数类别接到预测模型时,一条常见路径是:

text 复制代码
切分 train / val / test
    → 只在训练集上建词表(含 UNK 策略)
    → 品牌 ID → Embedding(d 维)
    → 与标准化后的数值特征拼接
    → MLP / 线性层 → 油耗相关目标
    → 用验证集选 d、正则、是否早停

与第 28 篇神经网络串讲相同的部分:先切分再 fit;测试集少碰;类别不平衡时别只看准确率。

Embedding 多出来的部分:要决定词表与 UNK、嵌入维 d d d、以及多个类别字段时各用一张表再拼接。水平很少时,继续 One-Hot 往往更简单,不必为了「用上 Embedding」而用。

多个类别字段时(品牌、车身类型、销售区域等),常见做法是各自一张嵌入表,查出向量后与数值特征一起拼接。不必强行把所有离散字段塞进同一张超大表;字段语义不同,分开学通常更清楚,也便于对某一字段单独调 d d d。

One-Hot Embedding
向量长度 V V V d ≪ V d\ll V d≪V
相似性 输入里几乎看不出 训练后可反映远近
更适合 词表小 词表大、且有监督信号
主要负担 后续 V × N V\times N V×N 权重 表 V × d V\times d V×d + 后续 d × N d\times N d×N

3. 多维空间

第 30 篇的核心可以压成几条:

  • 每个类别是 d d d 维空间中的一个点
  • 欧氏距离或余弦刻画相对相似,没有跨任务通用的绝对阈值
  • 真实轴通常不能按「甜度」「价位」直接命名;教学用的 1D/2D 图只为直觉
  • 嵌入依赖任务:油耗任务下的近邻,不必等于「是否家用」任务下的近邻
  • 静态词嵌入一词一点,多义场景会不够用;上下文嵌入随句子变化

抽出嵌入表做近邻检查,适合发现「全挤成一团」或「邻居完全乱」这类异常,不能代替验证集上的业务指标。样本量小、品牌极多时,近邻本身也不稳定。

分析近邻时,前后使用的距离定义要一致:有的流程先把向量归一化再比余弦,有的直接比欧氏距离。尺度变了,数值阈值不能沿用。二维投影(若做了)只是观察工具,投影会损失信息,不能当成嵌入质量的最终证明。


4. 向量来源

路径 何时更常考虑
降维(如 PCA) 已有高维词袋 / 数值,需要压缩;或作对照基线
联合训练 表格高基数 + 有标签;汽车品牌最常见起点
预训练再接入 文本等有大规模语料;可冻结或微调

汽车品牌 ID:优先联合训练。只有车评等自由文本、且多义明显时,再考虑上下文嵌入或预训练语言模型。降维得到的坐标不一定贴合油耗损失,应用验证集与可学习 Embedding 比较,而不是默认 PCA 更好。

比较时尽量只改一项:同一划分、同一数值预处理、同一输出头,分别试 One-Hot、PCA 压缩与可学习 Embedding,再看验证集。这样更容易判断收益是否来自表示方式本身。


5. 提交前检查

text 复制代码
[ ] 词表水平数已估计;很小则考虑 One-Hot,很大再上 Embedding
[ ] 词表与 UNK 只在训练集确定;验证 / 测试只变换
[ ] 嵌入维 d 用验证集选过;不是盲目加大
[ ] 品牌嵌入与数值特征拼接方式正确
[ ] 验证损失与业务指标一起看;必要时做近邻抽查
[ ] 测试集未参与调 d / 调结构
[ ] (可选)与 One-Hot 或逻辑回归基线对比过

若验证集上 Embedding 并不比 One-Hot 更好,可以维持更简单的编码。表示方式是手段,指标才是目的。

d d d 的试探范围不必一次拉得很开。汽车数据若只有数千行,可先在 8 8 8、 16 16 16、 32 32 32 这类取值上比较;验证集没有明显差异时,优先选更小的 d d d,减少过拟合与算力。嵌入表很大时,也可以对低频品牌并入 UNK,避免大量只出现一两次的行占满容量。

概念示意:

python 复制代码
emb = embedding_table[brand_id]          # (batch, d)
x = concat([emb, weight_scaled, hp_scaled], -1)
y_hat = model(x)

6. 常见误区

情况 说明
词表很小仍强行 Embedding 收益有限,维护成本上升
全表先建词表再切分 泄漏
把某一任务的嵌入当成通用品牌坐标 换任务常需重训或微调
只看近邻好看,不看验证指标 近邻是辅助
静态与上下文分不清 静态一词一点;上下文随句而变
d d d 越大越好 过拟合与算力都会涨
有了 Embedding 就忽略输出头与划分 第 27、28 篇的要求仍在

第 26 篇里非线性可分靠浅层网络,第 29 篇里高基数靠 Embedding,解决的是不同瓶颈:前者是决策边界形状,后者是离散输入的维数与相似性。两者可以同时出现在一个模型里------品牌嵌入后,仍可用带 ReLU 的隐藏层拟合更弯曲的油耗关系。


7. 和前面篇章关系

主题 相关篇 与 Embedding 的关系
类别词表与 One-Hot 17 词表小用 One-Hot;词表大再考虑嵌入
划分、泄漏、验证 18、19、22 词表与 UNK 必须训练集拟合
过拟合与早停 21、26、28 嵌入参数多,同样需要正则与早停
输出头 27 嵌入只改输入;分类 / 回归头规则不变
神经网络结构 23~26 嵌入向量当作普通稠密特征往后传

可以把 Embedding 看成输入侧的可学习编码层,而不是一套独立于专栏前半部分的新学科。旧纪律仍然约束新模块。例如:品牌嵌入训得再好,若输出层在互斥三分类上误用了多个独立 Sigmoid,优化目标仍然不对。

实践里也常见「先逻辑回归 + One-Hot 基线,再换 Embedding + 浅层 MLP」的对比。基线能说明任务难度与数据质量;若基线已经很好,上复杂表示的必要性会下降。


8. 术语速查

术语 含义
高基数类别 水平很多的离散特征
Embedding 将离散 ID 映为 d d d 维稠密向量
嵌入空间 这些向量所在的 d d d 维空间
静态嵌入 每个词 / ID 全局一个向量
上下文嵌入 同一词随上下文可对应不同向量
UNK 未见或低频类别的占位
联合训练 嵌入表与下游网络共用任务损失更新

9. 延伸阅读

资源 适合看什么
专栏第 29 篇 动机与查表
专栏第 30 篇 空间与静态嵌入
专栏第 31 篇 获取路径
专栏第 17 篇 One-Hot 基础
专栏第 28 篇 神经网络单元串讲

10. 小结与下一主题

Embedding 这几篇可以概括为:

  1. 词表很大时,用短稠密向量代替超长 One-Hot,减轻后续权重并保留学相似性的可能。
  2. 向量落在嵌入空间里,远近由任务与数据塑造;轴多半不可直接命名。
  3. 表格场景优先联合训练;降维与预训练是另外的来源;多义文本再考虑上下文嵌入。

本单元到此先告一段落。后面讨论序列与语言模型时,会默认已经熟悉:稀疏 One-Hot 的问题、查表得到稠密向量、空间中的相对相似性,以及联合训练与预训练的差别。若这些内容还有些模糊,可以把第 29~31 篇按「动机 → 空间 → 来源」再过一遍会比较省事。

下一主题会进入 语言模型:在词或子词序列上,模型如何利用上下文估计下一个词(或某一位置的词)出现的可能,以及为什么需要比 N-gram、简单固定窗口更长的上下文。Embedding 仍会作为输入侧的要素出现,但讨论重心会从「单个离散 ID」转到「整段序列」。

汽车例子也会扩展:除了品牌 ID,还可能涉及车评文本、故障描述等序列输入------那时会用到本单元的嵌入概念,以及后面的序列建模工具。

系列导航


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

相关推荐
手写码匠1 小时前
华为云Flexus+DeepSeek征文|Dify 构建企业级联网搜索 Agent:查询改写、多源检索与引用溯源实战
人工智能·深度学习·算法·aigc
江苏汉软1 小时前
汉软 MES解决方案引领航空航天制造精准智造新时代
人工智能·制造
七夜zippoe1 小时前
DolphinDB 能耗统计分析实战:报表生成、同比环比与定额对比
人工智能·算法·dolphindb·报表生成·能耗统计·定额对比
云端漫步19871 小时前
HarmonyOS NEXT AI 智能生活助手:AI 待办事项生成
人工智能·华为·生活·harmonyos
武子康1 小时前
开放权重不是唯一控制权:Kimi K3、Tencent Hy3 与 ByteDance Seed 的九项交付比较
人工智能·llm·agent
Zzj_tju1 小时前
Instruction Tuning 论文精读路线:从 Supervised Fine-Tuning 到 Instruction Following
人工智能·笔记·学习·语言模型·自然语言处理
2601_960906721 小时前
AI研发加速中式及泛亚洲
人工智能·vscode·macos·sublime text·phpstorm
为啥全要学1 小时前
在大语言模型上使用 PPO 算法
人工智能·算法·语言模型