One-Hot编码
One-Hot
一、One-Hot 编码是什么
One-Hot 编码是一种最基础的文本表示方式。
它的核心思想非常简单:
用一个只有 0 和 1 的向量来表示一个词,其中只有一个位置为 1,其余位置全为 0。
每一个词在词表中都有一个唯一的位置,这个位置对应向量中为 1 的索引。
二、One-Hot 编码的构造方式
假设有一个简单词表:
["我", "喜欢", "学习", "NLP"]
那么可以构造如下 One-Hot 表示:
- 我 → [1, 0, 0, 0]
- 喜欢 → [0, 1, 0, 0]
- 学习 → [0, 0, 1, 0]
- NLP → [0, 0, 0, 1]
这种表示方式不依赖任何训练过程,完全由词表结构决定。
三、使用 Python 实现 One-Hot 编码
下面是我在学习过程中,用 Python 手写的一个简单 One-Hot 编码示例。
import numpy as np
vocab = ["我", "喜欢", "学习", "NLP"]
word_to_index = {word: idx for idx, word in enumerate(vocab)}
def one_hot_encode(word, vocab_size):
vector = np.zeros(vocab_size)
index = word_to_index[word]
vector[index] = 1
return vector
# 示例
for word in vocab:
print(word, one_hot_encode(word, len(vocab)))
通过这段代码,可以直观地看到每个词对应一个高维稀疏向量。
四、One-Hot 编码的优点
One-Hot 编码的优点主要体现在:
- 实现简单,容易理解
- 不需要训练过程
- 表示方式完全确定,可解释性强
因此,在 NLP 学习中,One-Hot 通常作为最早接触的文本表示方法。
五、One-Hot 编码的局限性
在实际使用中,One-Hot 编码存在明显不足:
- 维度随词表线性增长
词表越大,向量维度越高,计算和存储成本极大。 - 向量极度稀疏
大多数位置都是 0,信息利用率很低。 - 无法表达语义相似度
任意两个不同词的向量内积和相似度都为 0。
为了验证这一点,可以计算两个不同 One-Hot 向量的余弦相似度。
from numpy.linalg import norm
v1 = one_hot_encode("我", len(vocab))
v2 = one_hot_encode("喜欢", len(vocab))
cos_sim = np.dot(v1, v2) / (norm(v1) * norm(v2))
print("余弦相似度:", cos_sim)
输出结果为 0,说明 One-Hot 无法刻画词语之间的语义关系。
六、One-Hot 在学习中的意义
虽然 One-Hot 编码在实际 NLP 系统中很少直接使用,但它在学习中的意义非常重要:
- 帮助理解“词如何被转化为向量”
- 作为后续词向量方法的对照基线
- 让人清楚地认识到“表示能力不足”这一问题
正是 One-Hot 的这些局限性,促使了 Word2Vec 等分布式词向量方法的出现。
七、小结
One-Hot 编码是最基础的词表示方法,它简单直观,但表达能力极其有限。

浙公网安备 33010602011771号