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

TensorFlow Tokenizer num_words参数疑问及词汇量限制问题

Tokenizer词汇量超出预期值的疑问

执行以下代码时,输出结果为11937,但预期应该是10000,对此有三个疑问:

  1. num_words参数的作用是什么?
  2. 得到的数值11937代表什么?
  3. 如何限制词汇量大小?

代码如下:

MAX_WORDS_COUNT = 10000 
WIN_SIZE   = 1000 
WIN_HOP    = 100 

tokenizer = Tokenizer(num_words=MAX_WORDS_COUNT, filters='!"#$%&()*+,-–—./…:;<=>?@[\\]^_`{|}~«»\t\n\xa0\ufeff',
                      lower=True, split=' ', oov_token='unkown_word', char_level=False, )

tokenizer.fit_on_texts(x_data)

items = list(tokenizer.word_index.items())
print(len(items))

疑问解答

  1. num_words参数的作用
    num_words的作用是保留语料中出现频率前N高的词汇(N为设置的数值),但它不会影响word_index的生成。这个参数仅在调用texts_to_sequences时生效:此时只会将高频词汇转换为对应索引,低频词会被忽略(若设置了oov_token,则会映射到OOV的索引)。

  2. 数值11937的含义
    11937是输入语料x_data中所有不重复词汇的总数,包含所有低频词。因为tokenizer.word_index会统计并记录每一个出现过的独特词汇,不受num_words参数限制,所以它的长度就是语料的总词汇量。

  3. 如何限制词汇量大小

  • 若想让最终可用词汇量限制为10000,需注意num_words的计数逻辑:如果设置了oov_token,OOV会额外占用一个索引位,因此实际保留的高频词汇数量是num_words - 1。
  • 不要直接通过word_index获取限制后的词汇表,应该使用tokenizer.index_word——它包含的是经过num_words过滤后的高频词汇(加上OOV)。比如设置num_words=10000时,len(tokenizer.index_word)应该为10000(包含OOV)。
  • 如果你想手动获取前N个高频词汇,可以对tokenizer.word_counts按词频排序后取前N个条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:39:53