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 编码存在明显不足:

  1. 维度随词表线性增长
    词表越大,向量维度越高,计算和存储成本极大。
  2. 向量极度稀疏
    大多数位置都是 0,信息利用率很低。
  3. 无法表达语义相似度
    任意两个不同词的向量内积和相似度都为 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 编码是最基础的词表示方法,它简单直观,但表达能力极其有限。

posted @ 2025-11-10 14:08  元始天尊123  阅读(8)  评论(0)    收藏  举报