>>> t = Tokenizer(num_words=3)
>>> l = ["Hello, World! This is so&#$ fantastic!", "There is no other world like this one"]
>>> t.fit_on_texts(l)
>>> t.word_index
{'fantastic': 6, 'like': 10, 'no': 8, 'this': 2, 'is': 3, 'there': 7, 'one': 11, 'other': 9, 'so': 5, 'world': 1, 'hello': 4}
我预计t.word_index
只有前3个单词。我做错了什么?
答案 0 :(得分:8)
你在做什么没有错。 word_index
的计算方法与您以后使用的最常用词数相同(正如您可能会看到here)。因此,当你打电话给任何变形方法时 - Tokenizer
将只使用三个最常见的单词,同时,它将保留所有单词的反击 - 即使很明显它不会使用它后面。
答案 1 :(得分:2)
只需增加Marcin的答案即可(“它将保留所有单词的计数器-即使很明显以后不再使用它也可以。”)
它与所有字词相反的原因是您可以多次调用fit_on_texts
。每次它将更新内部计数器,并在调用转换时,它将使用基于更新的计数器的高位字。
希望有帮助。
答案 2 :(得分:1)
只是在 farid khafizov 的回答中添加一点, 从texts_to_sequences的结果中去除num_words及以上序列的单词(第1句4个,第2句5个,第3句6个分别消失)
import tensorflow as tf
from tensorflow.keras.preprocessing.text import Tokenizer
print(tf.__version__) # 2.4.1, in my case
sentences = [
'I love my dog',
'I, love my cat',
'You love my dog!'
]
tokenizer = Tokenizer(num_words=4)
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index
seq = tokenizer.texts_to_sequences(sentences)
print(word_index) # {'love': 1, 'my': 2, 'i': 3, 'dog': 4, 'cat': 5, 'you': 6}
print(seq) # [[3, 1, 2], [3, 1, 2], [1, 2]]
答案 3 :(得分:0)
将个单词限制为少量(例如3个)不会影响 fit_on_texts输出,例如 word_index,word_counts,word_docs 。它确实对 texts_to_matrix 具有影响。生成的矩阵将具有 num_words (3)列。
>>> t = Tokenizer(num_words=3)
>>> l = ["Hello, World! This is so&#$ fantastic!", "There is no other world like this one"]
>>> t.fit_on_texts(l)
>>> print(t.word_index)
{'world': 1, 'this': 2, 'is': 3, 'hello': 4, 'so': 5, 'fantastic': 6, 'there': 7, 'no': 8, 'other': 9, 'like': 10, 'one': 11}
>>> t.texts_to_matrix(l, mode='count')
array([[0., 1., 1.],
[0., 1., 1.]])