TensorFlow Tokenizer num_words参数疑问及词汇量限制问题
Tokenizer词汇量超出预期值的疑问
执行以下代码时,输出结果为11937,但预期应该是10000,对此有三个疑问:
- num_words参数的作用是什么?
- 得到的数值11937代表什么?
- 如何限制词汇量大小?
代码如下:
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))
疑问解答
num_words参数的作用
num_words的作用是保留语料中出现频率前N高的词汇(N为设置的数值),但它不会影响word_index的生成。这个参数仅在调用texts_to_sequences时生效:此时只会将高频词汇转换为对应索引,低频词会被忽略(若设置了oov_token,则会映射到OOV的索引)。数值11937的含义
11937是输入语料x_data中所有不重复词汇的总数,包含所有低频词。因为tokenizer.word_index会统计并记录每一个出现过的独特词汇,不受num_words参数限制,所以它的长度就是语料的总词汇量。如何限制词汇量大小
- 若想让最终可用词汇量限制为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
相关产品推荐
相关产品推荐

