如果我在初始化 Tokenizer()
时没有传递 num_words
参数,那么在将其用于对训练数据集进行标记化后,我该如何找到词汇表大小?
为什么要这样做呢?我不想限制分词器的词汇量以了解我的 Keras 模型在没有限制下的表现如何。但是,我需要将这个词汇量作为参数传递给模型的第一层定义。
如果我在初始化 Tokenizer()
时没有传递 num_words
参数,那么在将其用于对训练数据集进行标记化后,我该如何找到词汇表大小?
为什么要这样做呢?我不想限制分词器的词汇量以了解我的 Keras 模型在没有限制下的表现如何。但是,我需要将这个词汇量作为参数传递给模型的第一层定义。
tokenizer.word_index
访问它。因此,您可以根据此字典中的元素数量找到唯一单词的数量:num_words = len(tokenizer.word_index) + 1
那个+1
是因为保留填充(即索引零)。
注意:此解决方案(显然)适用于未设置num_words
参数的情况(即您不知道或不想限制单词数),因为word_index
包含所有单词(而不仅仅是最常见的单词),无论您是否设置了num_words
。
Tokenizer(num_words=50000)
并执行len(tokenizer.word_index) + 1
时,我看到的数字是75000,远远超过我定义的限制。这怎么可能呢? - karthiksnum_words
。word_index
包含所有的单词,无论你是否设置了num_words
。因此,当你没有限制单词数量时(即没有设置num_words
参数),这个解决方案就可以使用。但如果你设置了num_words
,那么你已经知道单词的数量了,所以根本不需要这个解决方案! :)我在我的答案中添加了一条注释来澄清这一点。 - todaylen(tokenizer.word_index)+1
失败了。 - karthiks