Python 为什么标记器跟踪的单词多于num_单词?

Python 为什么标记器跟踪的单词多于num_单词?,python,tensorflow,keras,Python,Tensorflow,Keras,我有以下代码 import tensorflow as tf from tensorflow import keras from tensorflow.keras.preprocessing.text import Tokenizer sentences = [ 'I love my dog', 'I love my cat', 'You love my dog', ] tokenizer = Tokenizer(

我有以下代码

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer

sentences = [
             'I love my dog',
             'I love my cat',
             'You love my dog',
]

tokenizer = Tokenizer(num_words=3)
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index

print(word_index)
输出:{'love':1,'my':2,'i':3,'dog':4,'cat':5,'you':6}

现在,我的代码如何跟踪3个以上的唯一常用词

我在这里遗漏了什么吗?

看着,似乎索引被分配给了所有遇到的单词。但是,一旦您实际使用标记器将文本转换为索引序列(例如,使用
文本\u到\u序列
),所有“不频繁的单词”都将被OOV标记替换。请注意,只有在您实际指定了OOV令牌(您还没有指定)的情况下,才会执行此操作。示例:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer

sentences = [
             'I love my dog',
             'I love my cat',
             'You love my dog dog',
]

tokenizer = Tokenizer(num_words=4, oov_token=None)
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index

print(word_index)
tokenizer.texts_to_sequences(["I love my cat"])
{'love':1,'you':6,'i':4,'dog':3,'my':2,'cat':5}
[[1,2]]

我稍微修改了文本以打破“dog”和“I”之间的联系,并将存储的单词数增加了一个(无论出于何种原因,指定4实际上只使用三个最常见的单词…)。您可以看到,OOV单词(“I”和“cat”)只是被排除在文本之外,即使它们指定了索引

如果我们指定一个OOV令牌,会发生以下情况:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.preprocessing.text import Tokenizer

sentences = [
             'I love my dog',
             'I love my cat',
             'You love my dog dog',
]

tokenizer = Tokenizer(num_words=4, oov_token="oov")
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index

print(word_index)
tokenizer.texts_to_sequences(["I love my cat"])
{'love':2,'you':7,'i':5,'dog':4,'my':3,'cat':6,'oov':1}
[[1,2,3,1]]

如您所见,索引1现在是为OOV令牌保留的,并且在转换时为该索引分配了不常用的字