One-Hot 编码

This article is extracted from the chat log with AI. Please identify it with caution.

One-Hot 编码介绍#

One-Hot 是早期 NLP 领域用来表示词向量的解决方案,现在已经不流行了。本篇我们来详细介绍一下 One-Hot 编码,并清晰地解释它和 Tokenizer 之间的关系。

1. 什么是 One-Hot 编码?#

One-Hot 编码是一种将分类变量表示为二进制向量的方法。这里的“分类变量”是指其值来自于一个有限的、不连续的集合(例如:“猫”、“狗”、“鸟”;“北京”、“上海”、“广州”)。

核心思想: 对于每一个可能的类别,我们都创建一个与类别总数长度相同的向量。在这个向量中:

  • 只有一个位置1(“热”的)。
  • 所有其他位置都是 0(“冷”的)。

这个“热”的位置就唯一地代表了该类别。


2. One-Hot 编码的工作原理#

假设我们有一个变量“动物”,它有三个可能的类别:

步骤1:定义词汇表 首先,我们列出所有可能的类别,形成一个词汇表。假设我们按字母顺序排列: [猫, 狗, 鸟] -> 对应的索引为 [0, 1, 2]

步骤2:创建 One-Hot 向量 对于每一个类别,我们创建一个长度为 3(因为总共有 3 个类别)的向量。

  • “猫”:在索引 0 的位置为 1。
    • [1, 0, 0]
  • “狗”:在索引 1 的位置为 1。
    • [0, 1, 0]
  • “鸟”:在索引 2 的位置为 1。
    • [0, 0, 1]

另一个例子:城市 词汇表:[北京, 上海, 广州, 深圳] -> 索引 [0, 1, 2, 3]

  • 上海 -> [0, 1, 0, 0]
  • 深圳 -> [0, 0, 0, 1]

3. One-Hot 编码的优缺点#

优点:

  1. 解决类别无序性问题:对于很多机器学习算法,如果简单地将类别编码为整数(如 猫=0, 狗=1, 鸟=2),模型会错误地认为这些数字之间存在大小或顺序关系(鸟 > 狗 > 猫)。One-Hot 编码将所有类别放在平等的地位上,消除了这种潜在的误解。
  2. 简单直观:实现和理解起来都非常容易。

缺点:

  1. 维度灾难:如果类别数量非常多(比如有 10,000 个不同的单词),那么 One-Hot 向量的维度就会非常高(10,000 维)。这会导致计算和存储成本急剧上升。
  2. 向量稀疏:生成的向量中几乎全是 0,只有一个 1。这种高稀疏性会浪费大量内存,且对于某些模型来说信息密度很低。
  3. 无法表达语义关系:从向量本身来看,[1,0,0](猫)、[0,1,0](狗)和 [0,0,1](鸟)之间的“距离”是相等的(例如,计算余弦相似度都为 0)。这意味着它无法表达“猫和狗都是哺乳动物”这种语义上的相似性。

4. One-Hot 编码与 Tokenizer 的关系#

现在我们来回答核心问题:One-Hot 编码和 Tokenizer 有关系吗?

答案是:有密切的、前后承接的关系,但它们在 NLP 流水线中扮演着完全不同的角色。

你可以将它们理解为 “上下游” 的关系:

第一步:Tokenizer(分词器)

  • 任务:将原始文本转换成令牌
  • 输入:一个字符串。例如:“I love cats.”
  • 输出:一个令牌列表。例如(使用一个简单的词汇表 {“I”: 0, “love”: 1, “cat”: 2, “s”: 3, “.”: 4}):
    • [“I”, “love”, “cat”, “s”, “.”] -> 对应的 ID 是 [0, 1, 2, 3, 4]
  • 作用:Tokenizer 完成了从人类可读的文本模型可处理的离散符号(ID) 的转换。

第二步:One-Hot 编码(或更现代的替代品)

  • 任务:将令牌 ID 转换成数值向量
  • 输入:Tokenizer 输出的 ID 列表。例如:[0, 1, 2, 3, 4]
  • 输出:一个向量序列。
    • 对于 ID 0 (“I”): [1, 0, 0, 0, 0] (假设词汇表大小为5)
    • 对于 ID 1 (“love”): [0, 1, 0, 0, 0]
    • 对于 ID 2 (“cat”): [0, 0, 1, 0, 0]
    • … 以此类推。
  • 作用:将离散的符号转换为一种数值表示形式,以便输入给数学模型(如神经网络)。

它们的关系可以类比为:

  • Tokenizer 像是编译器的“词法分析器”,它把源代码(文本)拆分成一个个单词(令牌)。
  • One-Hot 编码像是给每个单词分配一个唯一的“座位号”(一个超大的、只有一个座位的礼堂),但这个座位号体系非常低效。

5. 在现代 NLP 中的演变#

虽然 One-Hot 编码在概念上非常重要,并且是理解词表示的基础,但它几乎不再被用于现代深度学习模型中了

为什么? 正如缺点中提到的,当词汇表达到 5万、10万 甚至更大时,使用 5万维的稀疏向量在计算上是不可行的。

现代替代方案:嵌入层

取而代之的是 “嵌入层”

  • 工作原理:嵌入层是一个可学习的查找表。它将每个令牌 ID(比如 2 代表 “cat”)映射到一个低维、稠密的向量中(比如 300 维或 768 维)。
  • 输入:Tokenizer 输出的 ID 列表 [0, 1, 2, 3, 4]
  • 输出:一个稠密向量序列。
    • 对于 ID 2 (“cat”),不再是 [0,0,1,0,0,...] (50000维),而可能是 [0.2, -0.5, 0.8, ..., 0.1] (300维)。
  • 巨大优势
    1. 维度大幅降低:从数万维降到几百维,计算效率极高。
    2. 蕴含语义信息:这些稠密向量是通过模型在海量数据上学习得到的。语义相近的单词(如“猫”和“狗”),它们的向量在空间中的距离也会很近。这使得模型能够理解语言的内在规律。

总结#

特性One-Hot 编码Tokenizer
角色表示层预处理层
输入令牌 ID原始文本字符串
输出高维稀疏二进制向量令牌序列 / ID 序列
目的将离散符号数值化将文本拆分成离散符号
现代地位概念基础,但极少直接使用不可或缺的核心组件

一句话概括关系: Tokenizer 把文本变成数字 ID,而 One-Hot 编码是(在概念上)将这些 ID 转换成向量的一种古老且低效的方法,现已被更强大的嵌入层所取代。

One-Hot 与 Embedding 的关系#

One-Hot 编码Embedding 都是为了解决同一个问题:如何将离散的符号(如单词)表示为计算机可以处理的数值形式。但它们采用了截然不同的哲学和方法。

我们可以用一个非常形象的比喻来理解它们的关系:

One-Hot 编码像是给每个单词分配一个唯一的、独立的“身份证号”(在一个超大的国家里),而 Embedding 则是为每个单词绘制一幅精细的“肖像画”,这幅画包含了它的性格、爱好、社会关系等所有特征。

下面我们从多个维度来详细对比它们的关系。


1. 概念对比:从“身份ID”到“特征肖像”#

特性One-Hot 编码Embedding
核心思想表示身份:用一个唯一的、独立的标识符来代表一个词。表示特征:用一个低维的、稠密的向量来刻画一个词的语义和语法特征。
向量维度高维:维度等于词汇表大小 V。例如,5万个词就是5万维。低维:维度是固定的、较小的值 D。例如 300维、768维,与词汇表大小无关。
向量稀疏性极度稀疏:向量中只有一个元素是1,其余全是0。完全稠密:向量中每个元素都是一个有意义的实数(通常是浮点数)。
语义表达无法表达语义:所有向量相互正交,点积为0。无法表示“猫”和“狗”之间的相似性。可以捕捉语义:通过训练,语义相近的词(如“猫”和“狗”)在向量空间中的位置也很接近。

直观示例:

假设词汇表只有三个词:[国王, 王后, 苹果]

  • One-Hot 编码:

    • 国王 -> [1, 0, 0]
    • 王后 -> [0, 1, 0]
    • 苹果 -> [0, 0, 1]
    • 从向量看,国王王后的距离,与国王苹果的距离是相等的。这不符合我们的语言常识。
  • Embedding(假设我们学习到了一个2维向量):

    • 国王 -> [0.8, 0.5]
    • 王后 -> [0.75, 0.6]
    • 苹果 -> [-0.1, -0.9]
    • 从向量看,国王王后的向量非常接近,而它们都与苹果相距甚远。这捕捉到了语义关系。

2. 技术实现关系:Embedding 是 One-Hot 的一个“智能压缩层”#

在神经网络的实现中,Embedding 层在数学上可以被看作是对 One-Hot 编码向量进行的一次高效线性变换。

这个过程是这样的:

  1. 输入:一个词的 Token ID(例如 “猫” 的 ID 是 253)。
  2. One-Hot 编码(概念上):模型在内部先将这个 ID 概念性地转换为一个 One-Hot 向量。
    • 253 -> [0, 0, ..., 1, ..., 0] (一个 50000 维的向量,只有第253位是1)。
  3. 嵌入层操作:嵌入层本质上是一个大小为 V x D 的矩阵(查找表),其中 V 是词汇表大小,D 是嵌入维度。
    • 当这个 One-Hot 向量与嵌入矩阵相乘时,由于 One-Hot 向量只有一个1,这个矩阵乘法就退化成了一个简单的查找操作:直接取出嵌入矩阵的第 253 行。
  4. 输出:得到的正是 “猫” 词的 D 维嵌入向量。
    • [0, 0, ..., 1, ..., 0] (50000D) × Embedding Matrix (50000x300) = 猫的向量 (300D)

所以,关键点在于:

  • 我们从不需要实际在内存中创建那个巨大的、稀疏的 One-Hot 向量。
  • 嵌入层通过一个查找表 高效地实现了从 ID稠密向量 的映射。
  • 从概念上讲,Embedding 是 One-Hot 编码的“下一代”或“智能升级”。它解决了 One-Hot 编码的所有主要缺陷。

3. 为什么 Embedding 如此强大?#

Embedding 的强大之处在于,它的向量值不是预先设定好的,而是从数据中学习得到的

在模型训练过程中,通过完成诸如“预测下一个词”或“判断句子相似性”等任务,模型会不断地调整嵌入矩阵中的数值。这个过程使得:

  1. 语义相似性:意思相近的词,它们的向量在空间中的方向也相近。
    • 例如:向量(快乐) ≈ 向量(高兴)
  2. 语义关系:词与词之间特定的关系可以通过向量运算来捕捉。
    • 经典的例子:向量(国王) - 向量(男人) + 向量(女人) ≈ 向量(王后)
    • 向量(巴黎) - 向量(法国) + 向量(德国) ≈ 向量(柏林)
  3. 上下文信息:像 BERT 这样的模型生成的嵌入是上下文相关的,同一个词在不同句子中会有不同的向量表示,从而包含了更丰富的语义信息。
    • 例如:“我今天要去银行取钱”“这条河的南岸有一个银行” 中的 “银行” 会有不同的嵌入向量。

总结:演进与替代关系#

方面One-Hot 编码Embedding
历史角色基石与概念起点:定义了如何将符号数值化。现代标准与实践:建立在 One-Hot 概念之上的、更先进的表示方法。
关系本质孤立的“身份证”富含信息的“肖像画”
技术关系Embedding 在数学上可以视为对 One-Hot 向量的一个稠密化、降维的线性变换
现代应用主要用于教学、概念理解,或在一些传统的机器学习模型(如逻辑回归)中处理类别特征。所有深度学习 NLP 模型的标配和核心组件

结论: One-Hot 编码是 Embedding 的“原始形态”和“概念前身”。在深度学习的背景下,Embedding 已经全面取代了 One-Hot 编码,因为它以一种计算高效的方式,将离散符号转化为了富含语义信息的稠密向量,从而为模型理解语言提供了强大的基础。

本文共 3692 字,创建于 Oct 22, 2025

相关标签: NLP, LLM, ByAI, Tokenizer