为何Keras的one_hot函数输出整数索引而非含0的独热编码向量?
关于Keras one_hot函数与独热编码的疑问
先看你给出的代码示例:
from tensorflow.keras.preprocessing.text import one_hot vocab_size = 5 one_hot('good job', vocab_size) Out[6]: [3, 2]
问题1:独热编码是否应始终生成由1和0组成的向量?
严格来说,标准独热编码的输出确实是仅包含0和1的向量——每个类别对应向量中的一个位置,该位置设为1,其余全为0。但在实际工程场景里,大家常把“整数索引编码”也看作独热编码的简化形式,因为它是独热向量的压缩表示,后续可以很轻松转换成标准的独热向量。
问题2:为何Keras的one_hot函数未输出含0的结果?
Keras的one_hot函数本质是个哈希式整数索引生成工具,它的核心作用是把每个单词映射到[1, vocab_size]范围内的整数(注意是从1开始,不是0),而非直接生成标准独热向量。这么设计的原因很实际:
- 省内存:如果词汇量很大,存储独热向量会占用海量空间,而整数索引只需要存单个数字,空间效率高很多
- 后续流程兼容:Keras里有专门的
to_categorical函数,或者直接用Embedding嵌入层,都能把这些整数索引快速转换成独热向量或者更高效的词嵌入,完全不需要提前生成占空间的独热向量 - 哈希碰撞处理:这个函数用哈希映射单词到索引,当不同单词哈希到同一个整数时会自动处理,但核心逻辑还是输出索引而非向量
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

