Embeddings
嵌入是经过学习的向量,可将相似的文本、图像或项目放置在彼此附近。涵盖嵌入的生成、比较和大规模检索方式。
嵌入是一组学习得到的数值向量,用于表示单词、图像、商品或用户等条目,因此含义或内容相似的条目会对应彼此接近的向量。向量空间中的距离可以衡量相似度,因此软件能够通过比较向量,而不是原始像素或字符串,来进行聚类、搜索、推荐和分类。嵌入也是神经网络内部使用的表示形式:大语言模型 (LLM)会在第一个 Transformer 层之前将每个词元转换为嵌入,而视觉模型会通过骨干网络将图像转换为特征向量。用于搜索的嵌入通常有几百到几千个维度,远少于原始输入的数值数量。
嵌入是如何创建的#
嵌入来自两类通过学习得到的组件:
- 查找表:对于 token、产品 ID 或用户 ID 等离散项,嵌入层会为每一项存储一个可学习的行,查找某一项时会返回对应的行。PyTorch 的
nn.Embedding就是这样一种表。表中的行起初是随机值,然后会与模型的其他部分一起通过反向传播更新,因此在训练任务中作用相似的项会逐渐形成相似的向量。 - 编码器:对于图像、音频和自由文本,网络会将整个输入映射为一个向量,通常通过池化 CNN 的特征图,或读取 Transformer 的输出 token 来实现。针对分类等任务训练的编码器会顺带产生有用的嵌入,而通过对比学习训练的编码器则会直接塑造嵌入空间,CLIP 就是通过将图像及其说明放在同一个共享空间中来实现这一点的。
Word2vec 由 Tomas Mikolov 及其 Google 同事于 2013 年发布,展示了这类训练能捕捉到多丰富的结构。在其词向量中,vector("King") − vector("Man") + vector("Woman") 的结果最接近 vector("Queen");它发布的预训练 Google News 向量包含 300 万个词和短语,每个向量有 300 个维度。
比较嵌入#
余弦相似度比较两个向量的方向,取值范围为 −1 到 1。点积还会考虑向量的长度,而欧氏距离则衡量它们之间的直线距离。许多系统会将嵌入归一化为单位长度,这样余弦相似度和点积就相同,且邻居的排序与欧氏距离一致。YOLO26 模型通过 embed() 生成图像嵌入:该方法会跳过预测头,对模型倒数第二层的输出进行平均池化,为每张图像返回一个向量:
import torch.nn.functional as F
from ultralytics import YOLO
from ultralytics.utils import ASSETS
# Load a YOLO26 classification model trained on ImageNet
model = YOLO("yolo26n-cls.pt")
# embed() returns one pooled feature vector per image instead of predictions
bus, zidane = model.embed([ASSETS / "bus.jpg", ASSETS / "zidane.jpg"])
print(f"Embedding length: {bus.shape[0]}")
# Higher cosine similarity means the model sees more similar content
print(f"Cosine similarity: {F.cosine_similarity(bus, zidane, dim=0).item():.3f}")对于 YOLO26n-cls,嵌入是一个 256 维向量,也就是其骨干网络末端注意力模块的池化输出;第二行则会打印两张随附示例照片的余弦相似度。将相同的比较方法用于整个集合的已存储嵌入,就能通过图像相似度搜索对结果进行排序。
大规模搜索嵌入#
逐个将查询与数百万个已存储向量进行比较,速度太慢,因此向量数据库会构建近似最近邻索引,例如基于图的 HNSW 索引或倒排文件索引,只需检查集合中的一小部分,就能找到相近的匹配项。集合只需嵌入一次;每次搜索时,系统会使用同一个编码器对查询进行嵌入,如果要用文本搜索图像,则使用配对的文本编码器:
存储方式对设计的影响不亚于准确率。套娃式表示学习训练出的嵌入,其前几个维度单独使用也有效,因此可以截断向量以节省空间;向量量化则会将每个向量压缩为几个字节。混合搜索将嵌入相似度与关键词匹配结合起来。
应用场景#
- 语义搜索和检索增强生成(RAG):文本嵌入按含义检索段落,因此查询“汽车保险理赔”时,也能找到写着“机动车保单”的文档;RAG 会将检索到的段落作为上下文传给 LLM。
- 推荐系统:用户和物品会嵌入同一个空间中,距离用户向量最近的物品会成为推荐候选项。
- 零样本分类:具有共享图文空间的模型会将图像嵌入与以文本形式写出的类别名称嵌入进行比较,从而对图像分类。
- 目标重识别:外观嵌入可以跨摄像头、跨轨迹间断关联同一个人或车辆。
- 数据集探索:使用 t-SNE 或 UMAP 将嵌入投影到二维空间,可以揭示数据集中的聚类、近似重复项和离群点。










