什么是独热编码 (One-Hot Encoding)?
独热编码是一种将类别数据(如单词)转换为数值格式的方法。在自然语言处理(NLP)中,词汇表中的每个单词都被表示为一个唯一的向量,其中只有一个位置是“1”,其余全为“0”。
如何执行独热编码:
-
为每个单词分配数字(标签编码 Label-Encoding):
- 将句子中的每个单词分配一个唯一的数字。
- 例如,对于句子: "I love to play cricket on weekends"
每个单词的分配如下:- "I" = 1, "love" = 2, "to" = 3, "play" = 4, "cricket" = 5, "on" = 6, "weekends" = 7。
-
将数字转换为独热向量:
- 每个单词用一个二进制向量表示:
- 向量长度等于词汇表大小(唯一单词数量)。
- 对应分配的数字位置为“1”,其余位置为“0”。
- 例如:
- "I" = [1, 0, 0, 0, 0, 0, 0]
- "love" = [0, 1, 0, 0, 0, 0, 0]
- "cricket" = [0, 0, 0, 0, 1, 0, 0]
- 每个单词用一个二进制向量表示:
幻灯片中的例子:
- 句子:"I love to play cricket on weekends"
- 步骤 1: 为每个单词分配数字:
- "I" = 1, "love" = 2, "to" = 3, ..., "weekends" = 7。
- 步骤 2: 转换为独热向量:
- "cricket"(分配为 5)= [0, 0, 0, 0, 1, 0, 0]。
独热编码的挑战:
-
高维度问题:
- 对于较大的词汇表,向量会变得非常长且稀疏(大部分为零),导致内存和计算资源消耗大。
-
无法表示语义关系:
- 独热编码无法捕捉单词之间的任何语义或句法关系。
- 例如:“king”和“queen”虽然语义上相关,但它们的向量完全不同。
-
扩展性问题:
- 随着词汇表大小的增加,矩阵尺寸会迅速膨胀,在实际 NLP 任务中难以处理。
解决独热编码局限的方法:
-
词嵌入 (Word Embeddings):
- 使用稠密向量(例如 Word2Vec 或 GloVe)代替独热编码。
- 词嵌入不仅维度低,还可以捕捉单词之间的语义关系。
-
减少词汇表大小:
- 使用子词单元(例如 BPE 或 SentencePiece),将单词拆分为更小的单位。
总结:
独热编码虽然简单易用,但由于其高维度、缺乏语义关系表示等问题,在实际应用中往往会被更高效的词嵌入方法取代。