我有以下代码

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)



现在我的代码如何跟踪超过 3 个独特的常用词?

我在这里错过了什么吗?

最佳答案

查看 source code ,似乎索引已分配给遇到的所有单词。但是,一旦您实际使用分词器将文本转换为索引序列(例如使用 texts_to_sequences ),所有“不常用词”都将被 OOV 标记替换。请注意,这只会在您实际指定 OOV token (您没有)时完成。例子:

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"])



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

如果我们指定 OOV token ,会发生以下情况:
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"])



如您所见,索引 1 现在是为 OOV 标记保留的,并且在转换时将不常用的词分配给该索引。

关于python - 为什么 Tokenizer 跟踪的单词比 num_words 多?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57899789/

10-12 23:33