从零构建大语言模型词嵌入 — 为什么深度学习需要把文字变成数字(三)

张开发
2026/4/13 18:36:40 15 分钟阅读

分享文章

从零构建大语言模型词嵌入 — 为什么深度学习需要把文字变成数字(三)
1. 理解词嵌入Understanding Word Embeddings为什么需要嵌入——一个具体的例子包括 LLM 在内的深度神经网络模型无法直接处理原始文本。由于文本是类别型数据categorical它与用于实现和训练神经网络的数学运算不兼容。因此我们需要一种方法来将词表示为连续值向量。让我们用一个具体的例子看看问题所在。假设我们有三个词cat、dog、car。一个朴素的想法是给每个词分配一个整数cat → 1 dog → 2 car → 3问题立刻出现神经网络的运算会把这些数字当作数值来处理。举例说明假设神经网络的某一层需要计算dog 和 cat 的平均dogcat22121.5 \frac{\text{dog} \text{cat}}{2} \frac{2 1}{2} 1.52dogcat​221​1.5但 1.5 代表什么呢半个 cat 加半个 dog这毫无意义。更糟的是这种表示暗示了错误的关系∣cat−dog∣∣1−2∣1∣dog−car∣∣2−3∣1 |\text{cat} - \text{dog}| |1 - 2| 1 \\ |\text{dog} - \text{car}| |2 - 3| 1∣cat−dog∣∣1−2∣1∣dog−car∣∣2−3∣1数学上看cat 到 dog 的距离等于 dog 到 car 的距离。但语义上cat 和 dog 都是动物应该更接近car 是汽车应该离得更远。朴素的数字编码丢失了语义关系。嵌入正是为了解决这个问题把每个词映射到多维空间中的一个点让语义关系通过向量之间的几何关系来表达。图1同样是三个词朴素整数编码让距离失去语义向量嵌入则让语义关系通过几何距离自然表达。嵌入Embedding是什么将数据转换为向量格式的概念通常被称为嵌入。使用特定的神经网络层或另一个预训练的神经网络模型我们可以嵌入不同的数据类型例如视频、音频和文本。深度学习模型无法以原始形式处理视频、音频和文本等数据格式。因此我们使用嵌入模型将这些原始数据转换为密集向量表示使深度学习架构能够轻松理解和处理。具体来说图中展示了将原始数据转换为三维数值向量的过程。需要注意的是不同的数据格式需要不同的嵌入模型。为文本设计的嵌入模型不适合用于嵌入音频或视频数据。从核心来说嵌入是一种从离散对象词、图像甚至整个文档到连续向量空间中的点的映射。嵌入的主要目的是将非数值数据转换为神经网络可以处理的格式。不同粒度的文本嵌入虽然词嵌入是最常见的文本嵌入形式但也存在面向句子、段落或整个文档的嵌入。句子或段落嵌入是**检索增强生成Retrieval-Augmented Generation, RAG**的流行选择。RAG 将生成与检索如搜索外部知识库相结合在生成文本时拉取相关信息——这一技术超出了本书的范围。由于我们的目标是训练类 GPT 的 LLM它们学习逐词生成文本因此本章专注于词嵌入。2. 向量空间如何表达语义具体数值推演这部分原书并未展开但为了真正理解嵌入的威力我们用一个具体例子把它推导一遍。示例用三维向量表达四个词假设我们有四个词king国王、queen王后、man男人、woman女人。我们给每个词分配一个三维向量维度的含义假设为[皇室程度, 男性程度, 年龄程度]king [0.9, 0.9, 0.5] queen [0.9, 0.1, 0.5] man [0.1, 0.9, 0.5] woman [0.1, 0.1, 0.5]推演 1计算两个词的相似度使用欧氏距离向量间的直线距离d(A,B)∑i1n(Ai−Bi)2 d(A, B) \sqrt{\sum_{i1}^{n}(A_i - B_i)^2}d(A,B)i1∑n​(Ai​−Bi​)2​计算king和queen的距离d(king,queen)(0.9−0.9)2(0.9−0.1)2(0.5−0.5)200.6400.8 d(\text{king}, \text{queen}) \sqrt{(0.9-0.9)^2 (0.9-0.1)^2 (0.5-0.5)^2} \sqrt{0 0.64 0} 0.8d(king,queen)(0.9−0.9)2(0.9−0.1)2(0.5−0.5)2​00.640​0.8计算king和man的距离d(king,man)(0.9−0.1)2(0.9−0.9)2(0.5−0.5)20.64000.8 d(\text{king}, \text{man}) \sqrt{(0.9-0.1)^2 (0.9-0.9)^2 (0.5-0.5)^2} \sqrt{0.64 0 0} 0.8d(king,man)(0.9−0.1)2(0.9−0.9)2(0.5−0.5)2​0.6400​0.8计算king和woman的距离d(king,woman)(0.9−0.1)2(0.9−0.1)2(0.5−0.5)20.640.640≈1.13 d(\text{king}, \text{woman}) \sqrt{(0.9-0.1)^2 (0.9-0.1)^2 (0.5-0.5)^2} \sqrt{0.64 0.64 0} \approx 1.13d(king,woman)(0.9−0.1)2(0.9−0.1)2(0.5−0.5)2​0.640.640​≈1.13结论king离queen和man都很近都是 0.8但离woman较远1.13——这符合语义直觉。推演 2著名的国王 - 男人 女人 ≈ 王后这是 Word2Vec 最著名的发现之一词嵌入可以做向量算术。king−manwoman? \text{king} - \text{man} \text{woman} ?king−manwoman?逐分量计算[0.9,0.9,0.5]−[0.1,0.9,0.5][0.1,0.1,0.5][0.9−0.10.1, 0.9−0.90.1, 0.5−0.50.5][0.9,0.1,0.5] \begin{aligned} [0.9, 0.9, 0.5] - [0.1, 0.9, 0.5] [0.1, 0.1, 0.5] \\ [0.9-0.10.1,\ 0.9-0.90.1,\ 0.5-0.50.5] \\ [0.9, 0.1, 0.5] \end{aligned}​[0.9,0.9,0.5]−[0.1,0.9,0.5][0.1,0.1,0.5][0.9−0.10.1,0.9−0.90.1,0.5−0.50.5][0.9,0.1,0.5]​结果正好等于queen的向量图2king − man woman的逐步推演过程。每一步都是简单的逐分量加减最终结果恰好等于queen的向量。这说明嵌入空间中性别这个概念可以被表示为一个方向向量man - woman或king - queen。减去男性方向再加上女性方向就能从king移动到queen。这就是向量空间的威力——几何关系自动编码了语义关系。注意这里的数值是人为构造的真实的 Word2Vec 向量在高维空间中学到这种关系不会这么整齐但核心思想完全一致。3.Word2Vec早期的词嵌入方法有多种算法和框架被开发来生成词嵌入。其中一个最早且最流行的例子是Word2Vec。Word2Vec 训练了一种神经网络架构通过预测给定目标词的上下文或反过来来生成词嵌入。Word2Vec 背后的核心思想是出现在相似上下文中的词往往具有相似的含义。因此当投影到二维词嵌入进行可视化时可以看到相似的词项会聚集在一起。Figure 2.3 说明如果词嵌入是二维的我们可以将它们绘制在二维散点图中进行可视化。当使用像 Word2Vec 这样的词嵌入技术时对应于相似概念的词在嵌入空间中往往彼此靠近。例如不同类型的鸟在嵌入空间中彼此更接近而与国家和城市相比距离更远。嵌入维度性能与效率的权衡词嵌入的维度可以从 1 到数千不等。我们可以选择二维词嵌入以便于可视化。更高的维度可能捕获更细微的关系但代价是计算效率降低。这是一个典型的权衡维度太低 → 无法捕获足够的语义信息维度太高 → 计算和内存成本过高需要找到一个适合任务的平衡点4.LLM 中的嵌入为什么不用预训练的 Word2Vec虽然我们可以使用像 Word2Vec 这样的预训练模型来为机器学习模型生成嵌入但 LLM 通常产生自己的嵌入——这些嵌入是输入层的一部分并在训练过程中被更新。将嵌入优化作为 LLM 训练的一部分而不是使用 Word2Vec 的优势在于嵌入被优化为适合手头的特定任务和数据。我们将在本章后面实现这样的嵌入层。此外LLM 还可以创建上下文化的输出嵌入这将在第3章中讨论。静态嵌入 vs 上下文化嵌入这是理解 LLM 的一个重要概念静态嵌入如 Word2Vec每个词有一个固定的向量无论上下文如何。I went to the bank to deposit money ← bank 对应向量 v I sat on the river bank ← bank 对应同一个向量 v ❌两个句子中bank的含义完全不同银行 vs 河岸但 Word2Vec 给出相同的向量。上下文化嵌入LLM 产生的同一个词在不同上下文中产生不同的向量。I went to the bank to deposit money ← bank 对应向量 v₁偏向银行语义 I sat on the river bank ← bank 对应向量 v₂偏向河岸语义 ✅这种能力是通过注意力机制实现的第3章详述。本章我们先实现静态的输入嵌入层即查找表上下文化的部分由后续的 Transformer 层在运行时动态生成。5. 实际 LLM 中的嵌入维度遗憾的是高维嵌入给可视化带来了挑战因为我们的感知和常见的图形表示天然受限于三维或更少的维度。然而在使用 LLM 时我们通常使用高得多的维度。对于 GPT-2 和 GPT-3嵌入大小通常称为模型隐藏状态的维度因特定的模型变体和大小而异模型参数量嵌入维度GPT-2最小版本117M / 125M768GPT-3最大版本175B12,288推演嵌入层的参数量有多大嵌入层本质上是一个查找表——一个形状为[词汇表大小, 嵌入维度]的矩阵。让我们具体算一下 GPT-3 的嵌入层有多大词汇表大小50,257GPT-2/3 的 BPE 词汇表大小嵌入维度12,288嵌入层参数量50,257×12,288617,557,056≈6.18 亿 50{,}257 \times 12{,}288 617{,}557{,}056 \approx 6.18 \text{ 亿}50,257×12,288617,557,056≈6.18亿对比一下GPT-3 总共 1750 亿参数嵌入层就占了大约 6.18 亿——仅仅是一个查找表就有 6 亿参数。这也解释了为什么高维嵌入那么昂贵。如果换成 GPT-2嵌入维度 76850,257×76838,597,376≈3,860 万 50{,}257 \times 768 38{,}597{,}376 \approx 3{,}860 \text{ 万}50,257×76838,597,376≈3,860万相差 16 倍。图3GPT-2 和 GPT-3 嵌入层参数量对比。虽然嵌入层只是一个查找表但随着维度从 768 扩大到 12,288参数量也从 3,860 万跃升到 6.18 亿。本章后续步骤预告本章接下来的各节将逐步讲解为 LLM 准备嵌入所需的步骤将文本拆分为词分词 — 2.2 节将词转换为 Token ID2.3 节添加特殊 Token2.4 节BPE 字节对编码2.5 节滑动窗口数据采样2.6 节Token 嵌入层2.7 节位置编码2.8 节6. 本篇小结概念要点为什么需要嵌入神经网络无法直接处理类别型文本朴素的整数编码会引入错误的语义关系嵌入的本质离散对象 → 连续向量空间中的点向量空间的威力语义关系可以通过几何关系表达距离、方向Word2Vec早期词嵌入方法“相似上下文中的词有相似含义”向量算术king - man woman ≈ queen静态 vs 上下文化嵌入Word2Vec 给固定向量LLM 根据上下文动态调整GPT-2 嵌入维度768 维约 3,860 万参数GPT-3 嵌入维度12,288 维约 6.18 亿参数7. 预习思考如果把cat、dog、car放到二维嵌入空间中你会如何摆放它们的坐标才能合理反映语义关系为什么 GPT-3 要把嵌入维度提到 12,288 这么高维度再高会发生什么静态嵌入无法区分多义词的不同含义。你能想到一种简单的打补丁方法吗提示位置信息

更多文章