当没有分配时,如何找到Keras标记器的“num_words”或词汇量大小?

11

如果我在初始化 Tokenizer() 时没有传递 num_words 参数,那么在将其用于对训练数据集进行标记化后,我该如何找到词汇表大小?

为什么要这样做呢?我不想限制分词器的词汇量以了解我的 Keras 模型在没有限制下的表现如何。但是,我需要将这个词汇量作为参数传递给模型的第一层定义。

1个回答

18
所有单词及其索引都将存储在一个字典中,您可以使用 tokenizer.word_index 访问它。因此,您可以根据此字典中的元素数量找到唯一单词的数量:
num_words = len(tokenizer.word_index) + 1

那个+1是因为保留填充(即索引零)。

注意:此解决方案(显然)适用于未设置num_words参数的情况(即您不知道或不想限制单词数),因为word_index包含所有单词(而不仅仅是最常见的单词),无论您是否设置了num_words


4
看起来不对,因为当我将分词器初始化为 Tokenizer(num_words=50000) 并执行 len(tokenizer.word_index) + 1 时,我看到的数字是75000,远远超过我定义的限制。这怎么可能呢? - karthiks
3
@karthiks你提到你不想设置num_wordsword_index包含所有的单词,无论你是否设置了num_words。因此,当你没有限制单词数量时(即没有设置num_words参数),这个解决方案就可以使用。但如果你设置了num_words,那么你已经知道单词的数量了,所以根本不需要这个解决方案! :)我在我的答案中添加了一条注释来澄清这一点。 - today
2
我指的是验证假设,即vocabulary_size = len(tokenizer.word_index)+1 失败了。 - karthiks
3
我认为+1是指“词汇表外的单词”。 - hAlE
@hAlE 如果你能打印出 word_index,那里面会有一个 OOV。那么“reserving padding”是什么意思呢? - En Xie
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接