Vec.cc

向量在机器学习中的实战:从嵌入到降维

2026-04-12

向量在机器学习中的实战:从嵌入到降维

作者:你的名字 · 日期:2026-04-12

摘要:在机器学习系统中,向量是把真实世界事物(文本、图像、用户、物品)映射到可计算空间的通用工具。本文以工程视角介绍向量的常用表示、相似度计算、归一化策略、降维与向量搜索,并给出实践中的经验与简明代码示例,帮助你在真实项目中稳健使用向量。


1. 向量为何在 ML 中无处不在

向量把复杂对象(如一段句子或一张图片)表示为一组数值,从而可以用线性代数与距离度量来比较、检索与学习。现代模型(word2vec、BERT、CLIP、ResNet 等)都把输入映射为向量,工程中常见任务(检索、推荐、聚类、分类)都以向量为核心。

2. 嵌入(Embeddings)简要分类

每种嵌入都有预训练与微调两条路径:预训练模型可快速上手,微调能让向量更贴合下游任务。

3. 距离与相似度:选对指标很重要

经验法则:文本嵌入一般用余弦;若做度量学习并对欧氏空间进行训练(如某些 ANN 库),可直接使用 L2。

4. 归一化与数值稳定性

5. 降维与可视化

实践建议:先用 PCA 降到几十维再用 UMAP/t-SNE 做 2D 可视化,能减少噪声影响并加速计算。

6. 向量搜索与近似最近邻(ANN)

当数据量增长到百万级或以上,精确搜索变得昂贵。常用方案:

选择索引时需要权衡吞吐、延迟、索引构建时间和内存占用;可通过模拟查询分布评估召回率与 QPS 下的延迟。

7. 工程实践要点与常见坑

8. 快速上手:Python 示例

计算余弦相似度与用 PCA 做降维的最小示例:

import numpy as np
from sklearn.decomposition import PCA

def cosine_sim(a, b):
    a = np.asarray(a, dtype=float)
    b = np.asarray(b, dtype=float)
    na = np.linalg.norm(a)
    nb = np.linalg.norm(b)
    if na == 0 or nb == 0:
        return 0.0
    return np.dot(a, b) / (na * nb)

# 批量相似度(归一化后做矩阵乘法更快)
def batch_cosine_similarity(X, Y):
    # X: (m, d), Y: (n, d)
    X_norm = X / np.linalg.norm(X, axis=1, keepdims=True)
    Y_norm = Y / np.linalg.norm(Y, axis=1, keepdims=True)
    return np.dot(X_norm, Y_norm.T)

# PCA
X = np.random.randn(1000, 128)
pca = PCA(n_components=2)
X2 = pca.fit_transform(X)

提示:在大规模场景中避免在 Python 层逐条归一化,利用向量化或在数据库/索引层面处理。

9. 总结与进一步阅读

向量是连接现实世界与机器可计算空间的桥梁。理解不同相似度指标、归一化策略、降维工具与索引技术,能让你在工程中更好地构建高效且可靠的向量系统。

进一步阅读:Faiss 文档、HNSW、sentence-transformers 官方教程、PCA/t-SNE/UMAP 论文。


© 你的名字