You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keras Tokenizer中word_index长度不受max_words影响的原因排查

为什么Tokenizer的word_index长度不受num_words限制?

这是个很常见的误解,我来给你拆解清楚:

核心原因:num_words的作用不是限制词汇表生成

Tokenizer的num_words参数不会影响fit_on_texts()生成完整词汇表的过程。fit_on_texts()会遍历所有输入文本,统计每一个出现过的词,最终生成包含全部88582个词的word_index字典——不管你设置的max_words是多少。

那num_words到底管什么?它是用来控制后续文本转换为序列时的词汇保留规则:当你调用texts_to_sequences()时,只会保留前num_words-1个高频词(因为索引0是留给填充(padding)的特殊值),其他低频词会被直接忽略。

验证与解决方案

比如你的代码里,虽然tokenizer.word_index有88582个词,但如果执行:

sequences = tokenizer.texts_to_sequences(texts)

生成的序列里只会包含前99个高频词的索引(因为你设置了max_words=100),剩下的词都会被过滤掉。

如果你的需求是获取仅包含前N个高频词的索引字典,可以手动截取word_index:

from keras.preprocessing.text import Tokenizer
max_words = 100
tokenizer = Tokenizer(num_words=max_words)
tokenizer.fit_on_texts(texts)

# 截取前max_words-1个高频词(因为索引0不对应任何词)
top_word_index = {word: idx for word, idx in tokenizer.word_index.items() if idx < max_words}
print(len(top_word_index))  # 这里会输出99(当总词汇数>=100时)

补充说明

官方文档里明确提到:num_words是"the maximum number of words to keep, based on word frequency. Only the most common num_words-1 words will be kept." 记住这个细节,避免后续处理序列时踩坑。

内容的提问来源于stack exchange,提问作者Hossein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:08:57