Embeddings 是什么:机器学习中的嵌入向量与高维数据可视化
更新时间
Embeddings(嵌入向量)是把对象(词、句子、图片、用户等)映射成一组稠密数值的表示方式,使语义相近的对象在向量空间中距离更近。它适合处理“比较相似性、检索、聚类、分类”这类任务;如果你只是要观察已有向量之间的关系,可以用 Embedding Projector 这类工具把高维向量降维后可视化,但降维图只能作为参考,不能替代原始任务上的评估。
为什么需要 embeddings
传统做法常用 one-hot 或稀疏计数表示对象:每个词一个维度,维度数等于词表大小,任意两个词的距离几乎一样,无法表达“相似”。Embeddings 把对象压缩到几十到几百维的稠密向量,训练目标通常让“经常出现在相似上下文中的对象”向量接近。结果是:
- 向量可以做算术和距离计算,便于机器比较。
- 维度远低于词表规模,存储和计算更可行。
- 相似性可以迁移到检索、推荐、聚类等下游任务。
一个直观例子
假设有三个词:“猫”“狗”“汽车”。在好的词嵌入中,猫 与 狗 的向量夹角小、距离近,而它们与 汽车 的距离明显更远。把这三个向量画在二维平面上,前两个点会聚在一起,第三个点落在别处。这就是“语义相似 → 向量接近”的最小例子。
如何比较两个向量
常见方法有两类:
| 方法 | 计算方式 | 适用场景 |
|---|---|---|
| 余弦相似度 | 两向量夹角的余弦值,只看方向不看长度 | 文本嵌入最常用,长度差异不重要时 |
| 欧氏距离 | 两向量差的平方和开方 | 向量已归一化或长度本身有含义时 |
实践中常先把向量归一化,再用点积或余弦相似度排序。需要注意:不同模型产出的向量空间不可直接混用,换模型后相似度阈值要重新校准。
常见类型与用途
- 词嵌入:把词映射为向量,用于文本分类、相似词查找、作为下游模型输入。
- 句子/文档嵌入:把整段文本压成一个向量,用于语义检索、去重、聚类。
- 图像嵌入:用卷积网络或视觉模型提取图片向量,用于以图搜图、图像聚类。
- 用户/物品嵌入:推荐系统中把用户和物品放进同一空间,用向量接近程度表示偏好匹配。
类型不同,但共同点是:向量本身不直接可读,价值在于“距离和方向可比较”。
用 Embedding Projector 观察高维向量
Embedding Projector(projector.tensorflow.org)是一个在浏览器中可视化高维数据的工具,页面描述为“Visualize high dimensional data”。典型使用流程如下:
- 准备向量文件:一个文件存放向量(每行一个对象,每列一个维度),另一个文件存放对应的标签或元数据(每行一个名称)。两者行数必须一致。
- 加载数据:在工具中上传或指定这两个文件,确认对象数量与维度数匹配。
- 选择降维方法:常见有 PCA、t-SNE、UMAP 等。PCA 偏重保留全局方差,t-SNE/UMAP 更强调局部邻域结构。
- 观察与交互:按标签着色、搜索某个对象、查看其近邻,判断同类对象是否聚在一起。
- 验证:把可视化中发现的“疑似相似”对象回到原始任务中检查,例如用余弦相似度排序或人工抽查。
常见卡点
- 行数不一致:向量文件与标签文件行数不同,加载会失败或错位。
- 维度声明错误:文件头或参数中的维度与实际列数不符。
- 把降维图当结论:t-SNE 的簇间距离和簇大小不宜直接解读;换随机种子或参数,布局可能明显变化。
- 未归一化就比较:长度差异大的向量直接算欧氏距离,可能被长度主导。
可视化结果该怎么读
降维可视化适合回答“有没有明显分群”“同类是否大致靠拢”“有没有离群点”,不适合回答“两个簇相距多远”“簇的面积代表什么”。原因在于 t-SNE、UMAP 等非线性降维会扭曲全局距离。稳妥做法是:
- 用可视化提出假设(例如“这两类可能混淆”)。
- 回到原始高维向量,用余弦相似度或下游任务指标验证。
- 记录降维方法、参数和随机种子,便于复现。
选择建议
如果你要理解概念或做初步探索,先在一小批已知标签的数据上跑可视化,确认同类是否聚拢,再扩大到真实数据。如果你要做检索或分类,重点应放在嵌入模型的选择和相似度阈值校准上,可视化只作为排查手段。若向量维度很高、样本量大,优先抽样后再可视化,避免交互卡顿和图形过密导致误读。