Keras中one_hot函数为何对不同单词生成相同编码?
Keras one_hot函数出现重复编码的原因分析
Keras的one_hot函数之所以会让不同单词生成相同编码,核心原因是哈希冲突。
具体原理
one_hot的工作逻辑是:
- 先对每个输入单词计算哈希值
- 再将哈希值对指定的
vocab_size取模,得到最终的编码整数
当两个不同单词的哈希值对vocab_size取模后结果一致时,就会出现重复编码的情况。你的代码里vocab_size应该设置得比较小(比如50),而语料中的唯一单词数量接近或超过这个值,自然更容易触发哈希冲突,导致'amazing'和'too'都被映射到48。
解决办法
如果需要每个单词对应唯一编码,推荐使用Keras的Tokenizer类,它会为每个唯一单词分配专属ID,从根源上避免哈希冲突:
from tensorflow.keras.preprocessing.text import Tokenizer reviews = ['nice food', 'amazing restaurant', 'too good', 'just loved it!', 'will go again', 'horrible food', 'never go there', 'poor service', 'poor quality', 'needs improvement'] tokenizer = Tokenizer() tokenizer.fit_on_texts(reviews) encoded_reviews = tokenizer.texts_to_sequences(reviews) # 查看单词与唯一ID的映射关系 print(tokenizer.word_index)
内容的提问来源于stack exchange,提问作者john doe
相关产品推荐
相关产品推荐

