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

kar*_*iks 9 nlp machine-learning tokenize deep-learning keras

因此,如果我num_words在初始化时不传递参数Tokenizer(),那么在使用它来标记训练数据集后如何找到词汇量大小?

为什么这样,我不想限制分词器词汇量的大小来了解我的 Keras 模型在没有它的情况下的表现。但随后我需要将此词汇量大小作为模型第一层定义中的参数传递。

tod*_*day 15

所有单词及其索引都将存储在字典中,您可以使用tokenizer.word_index. 因此,您可以根据该词典中的元素数量找到唯一词的数量:

num_words = len(tokenizer.word_index) + 1
Run Code Online (Sandbox Code Playgroud)

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

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

  • 似乎不对,因为当我将分词器启动为 `Tokenizer(num_words=50000)` 并执行 `len(tokenizer.word_index) + 1` 时,我看到一个像 75000 这样的数字,远远超过我定义的限制。这怎么可能? (3认同)
  • 我认为+1代表“词汇表之外”这个词 (3认同)
  • @karthiks 你提到你不想设置`num_words`。`word_index` 包含**所有单词**,无论您是否设置了 `num_words`。因此,当您没有限制字数(即没有设置`num_words` 参数)时,这个解决方案是有效的。否则,如果您已经设置了 `num_words`,那么您就知道单词的数量是多少,并且您一开始就不需要这个解决方案!:) 我在答案中添加了一条注释以澄清这一点。 (2认同)
  • 我指的是验证词汇表大小 = `len(tokenizer.word_index)+1` 失败的假设。 (2认同)