从 300 维到 4096 维:embedding 嵌入

B站影视 欧美电影 2025-09-02 16:34 2

摘要:几年前,我写过一篇关于 embedding (嵌入) 的论文。我当时写道,200-300 维的 embedding 在业界相当普遍,并且在训练过程中增加更多维度对于下游任务(如分类、推荐、语义搜索、主题建模等)的效果存在边际递减。

几年前,我写过一篇 关于 embedding (嵌入) 的论文 。我当时写道,200-300 维的 embedding 在业界相当普遍,并且在训练过程中增加更多维度对于下游任务(如分类、推荐、语义搜索、主题建模等)的效果存在边际递减。

我写那篇论文时,希望它能不受行业变化的影响,因为它侧重于基础原理和历史背景,而非特定的库函数或前沿架构。但如今,关于 embedding 大小的假设已经过时,在 embedding 维度不断增长和 embedding 访问模式变化的背景下值得重新审视。

简单回顾一下,embedding 向量是对各种特征(文本、图像、音频)的压缩数值表示,可用于机器学习任务,如搜索、推荐、RAG 和分类。Embedding 向量的大小即是我们的项目所拥有的特征数量。

例如,假设我们有两只蝴蝶。我们可以从多个维度对它们进行比较,包括翼展、翅膀颜色、触角数量。假设我们用一个三维特征来表示一只蝴蝶,它可能看起来是这样的。

通过直观地审视,我们可以目测出数据中 butterfly_1 和 butterfly_3 彼此之间比 butterfly_2 更相似,因为它们的特征在数值上更接近。

但蝴蝶是三维生物,且其中一些特征是数值化的。如今在业界我们谈论 embedding 时,通常指的是试图理解文本的属性,那么这个概念如何应用于词语呢?我们无法直接比较给定文本中的「bird」、「butterfly」或「fly」等词,但如果我们将它们映射到同一个共享空间中,就可以比较它们的数值表示。通过数值表示,我们可以看出「bird」和「flying」比「dog」更相似。

直觉上我们知道这是成立的,但我们如何人为地创造这些关系呢?

从给定词语创建文本 embedding 有多种方法,所有这些方法都依赖于在给定语料库中分析该词与其周围词语的关系。我们可以使用传统的基于计数的方法,如基于文档词频的 TF-IDF,或统计方法,如 PCA 或 LSA。

随着深度学习模型的出现,我们开始学习由 Word2Vec 等模型生成的表示。这些模型会最大化训练数据中被遮蔽词与给定相邻词共现的概率。

当我们使用概率模型学习一个给定词的 embedding 表示时,我们实际上是在比较这个词与其他词的相似程度。这些特征并非像「翅膀颜色」这样的显式特征,而是在潜在空间 (latent space) 中一种难以明确解释的、基于感觉的潜在表征。

例如,某个维度可能代表「这个词是动词」,或者「这个词与食物相关的其他词有关」,但我们通常并不确切知道模型认为每个特征代表什么。事实上,这是一个 值得研究的领域 ,我们才刚刚开始通过 控制向量 (control vectors) 等思想来理解这些潜在表示是如何工作的,而 Anthropic 在著名的 Golden Gate Claude 论文中就探讨了这一概念。

在训练模型时,embedding 大小作为超参数在模型训练前被初始化,我们根据训练后的下游评估来迭代调整这个大小。选择合适的超参数是艺术与科学的结合 ( 炼金术 ),并且 取决于对以下几方面的优化 :训练吞吐量、最终 embedding 的存储空间大小,以及 embedding 在下游任务上的性能——既包括定性表现,也包括对不同大小的 embedding 执行搜索时的延迟。

由于前几代模型规模较小且为内部训练,公司通常不会公布超参数,因此,关于 embedding 大小并没有标准的共识。作为一个行业,我们普遍认为 对于一个给定的 embedding 模型,大约 300 个维度可能足以压缩给定文本数据集中的所有细微差别 。300 是 Word2Vec 和 GloVE 等早期模型通常使用的维度数量。

在 attention 论文发表后, BERT 于 2018 年发布。该模型的架构 引入了 768 维的 embedding 。尽管之前的 RNN 和 LSTM 模型也已在 GPU 上进行训练,但 BERT 是首批在 GPU( 以及 TPU )上训练的较大型 embedding 模型之一,这意味着 GPU 优化变得日益重要。

高效训练 Transformer 模型 的关键在于能够 高效地将数据移至 GPU 并在多个 pipeline(即 attention heads,注意力头)之间并行化矩阵乘法运算,其中每个注意力头可以专注于理解和定义 embedding 特征空间的不同部分。因此,embedding 需要能够被注意力头的数量均匀地划分。

BERT 有 12 个注意力头,因此选择 768 维是反复试验和高效并行计算相结合的结果,以便「关注」特征空间的不同部分。这意味着,在模型训练中,每个头在原始 768 维输入 embedding 的一个 64 维子空间上操作。这本身源于 Transformer 论文,其中每个头的子 embedding 大小 通常选择为 64

因此,许多 BERT 风格的模型及相关模型家族都使用 768 作为 embedding 维度的基线。尽管 GPT-2 的训练数据集要大得多,但它也采用了 768 维。此外,尽管 CLIP 使用的 768 维 embedding 大小源于其图像编码器所采用的 Vision Transformer 架构,但为了保持一致性,其文本编码器也使用了这个维度大小。

尽管与如今大语言模型 (LLM) 所需的长达数月的预训练过程相比,BERT 的训练周期相当短(原始 BERT 模型为 4 天),但即使有 GPU 优化,从计算角度来看,计算这些 embedding 仍然很困难。 例如,对于 BERT 来说

在一个包含 10,000 个句子的集合中找到最相似的一对,需要大约 5000 万次推断计算(约 65 小时)。

因此,在 2019 年, UKP 创建 并优化了一个名为 SBERT 的模型,该模型专注于 句子级别的表示 ,从而实现了更快的推断速度。而 Minilm 成为了文档级块 embedding 的标准基线模型,其维度为 384,并且在多项任务中至今仍然表现出色。

另一个变化是开源平台 HuggingFace 的崛起,模型产物可以在该平台上共享。在此之前,这些模型要么托管在 GitHub 中难以发现的仓库里,要么被锁在缺少元数据的科学存储库中。HuggingFace 作为一个平台以及 transformers 库作为一个面向基于 PyTorch 模型的训练和推断的中心化 API,开启了标准化的新纪元:现在,更多的人可以简单地下载和复现现有模型,而无需从头开始重建晦涩难懂的研究代码。这使得学术界和工业界使用的 embedding 和架构大小都变得更加标准化。

尽管 768 维在相当长的一段时间内都是主流,但随着 GPT-2(ChatGPT 的支柱)的发布,市场竞争对模型规模施加了上行压力,我们开始看到标准的 embedding 大小在增加。

部分原因在于,公司不再需要自己推导 embedding。以前,embedding 是在实验室或 那些核心竞争力是处理大量信息的公司 里定制学习的,这些信息可以通过搜索或推荐进行检索筛选。

但现在,随着 ChatGPT 的出现和基于 API 的模型可用性,embedding 变成了一种通过 GET 请求即可获得的商品。最受欢迎的 embedding 是来自 OpenAI 的产品 ,使用 1536 维,与 GPT-3 保持一致。GPT-3 使用的训练数据比以往任何模型都多得多。( 570GB 对比 GPT-2 的 40GB,以及 96 个注意力头 )。

过去,人们通常只学习或微调 (fine-tuning) 自己的 embedding,但现在所有主流 AI 提供商都有自己托管的 embedding 集。特别常见的是 OpenAI,Cohere 和 Nomic 紧随其后。Google 最近也 发布了用于 Gemini 的 embedding ,同时提供 API 和本地版本。

除了通过 HuggingFace 和 API 实现的标准化之外, 公开对 embedding 进行基准测试 的 MTEB 作为一个资源也发展壮大起来,你可以在上面比较不同的 embedding 模型。

如果我们查看 MTEB 今天的 embedding 基准排行榜 ,可以看到 embedding 的大小从经典的 768 维到 4096 维甚至更高(注意它们都能被 2 整除,这与架构约束一致)。

最后,另一个需要考虑的因素是向量数据库领域的格局变化。向量数据库过去曾是庞然大物,现在正日益成为 Postgres S3 Elasticsearch 等软件和平台中的商品化功能,这降低了对开箱即用的向量存储和性能调优的需求。

由于不必在内部训练模型,embedding 大小受到的持续上行压力不受限制,目前尚不清楚我们将在何处放缓增长:Qwen-3 和其他许多模型已经达到了 4096 维。不过,我们也观察到,增长似乎开始趋于节制。OpenAI 引入了一个名为 俄罗斯套娃表示学习 (matryoshka representation learning) 的概念,该方法在训练 embedding 时会优先学习「最重要」的概念,而额外的维度只带来增量收益。这意味着,在一个 1024 维中学到的 embedding,只要前 64 个 维度能高效地压缩大部分信息 ,那么它在 64 维时可能同样有用,当然也要确保我们对它们进行重新归一化。还有研究表明,在检索和搜索任务中并非所有 embedding 维度都是必需的,并且 在某些情况下,我们实际上可以截断其中的 50%

观察维度的增长,以及在创建更大模型与这些 embedding 需在推断和存储时表现良好之间的持续权衡斗争,是一件非常有趣的事情。这也就是不断面临机器学习中由来已久的召回率与精确率之间的权衡,以及硬件限制、软件和商业考量之间的工程权衡。

随着这些架构的成熟以及内部模型成为面向公众的付费 API 的推理节点,embedding 已经从拥有大量数据的公司内部机器学习系统中的神秘副产品,转变为在众多应用栈中被许多 AI 驱动的应用所使用的标准化商品。

总而言之,观察这个领域的演变充满了乐趣,即使这意味着我可能需要一次又一次地更新我的论文。

来源:晚晚的星河日记一点号

相关推荐