【发布时间】:2019-04-30 17:56:17
【问题描述】:
那么,如果我在初始化Tokenizer() 时不传递num_words 参数,那么在使用它对训练数据集进行标记后,如何找到词汇量大小?
为什么这样,我不想限制分词器词汇量的大小,以了解我的 Keras 模型在没有它的情况下表现如何。但是我需要将这个词汇量大小作为模型第一层定义中的参数传递。
【问题讨论】:
标签: machine-learning keras deep-learning nlp tokenize
那么,如果我在初始化Tokenizer() 时不传递num_words 参数,那么在使用它对训练数据集进行标记后,如何找到词汇量大小?
为什么这样,我不想限制分词器词汇量的大小,以了解我的 Keras 模型在没有它的情况下表现如何。但是我需要将这个词汇量大小作为模型第一层定义中的参数传递。
【问题讨论】:
标签: machine-learning keras deep-learning nlp tokenize
所有单词及其索引都将存储在字典中,您可以使用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 这样的数字,远远超过我定义的限制。这怎么可能?
num_words。 word_index 包含所有单词,无论您是否设置num_words。因此,当您没有限制字数(即没有设置num_words 参数)时,此解决方案有效。否则,如果您设置了num_words,那么您就知道字数是多少,而且您一开始就不需要这个解决方案! :) 我在回答中添加了一条注释来澄清这一点。
len(tokenizer.word_index)+1 失败的假设。