问题描述
我熟悉 Keras 的 Tokenizer 中的“fit_on_texts”方法。 “fit_on_sequences”有什么作用,什么时候有用?根据 documentation,它“根据序列列表更新内部词汇表。”,并将其作为输入:'序列列表。 “序列”是整数词索引的列表。'。这什么时候有用?
为了适应文本,我理解文本被解析为标记,并且每个标记都分配了一个索引(整数)。因此,标记器对象包含与标记(字符串)和索引(整数)相关的字典等。但是,如果我只给它一个数字序列并调用 fit_on_sequences,它怎么知道这些东西代表什么标记?
作为实验,请尝试以下操作:
from tensorflow.keras.preprocessing.text import Tokenizer
test_seq = [[1,2,3,4,5,6]]
tok = Tokenizer()
tok.fit_on_sequences(test_seq)
然后,属性 word_index 或 index_word,否则将包含值的字典,当然是空的。该文档还说明了 fit_on_sequences :“在使用sequence_to_matrix 之前需要(如果从未调用过fit_on_texts)。”但是,在仅调用fit_on_sequences(而不是fit_on_texts)之后调用sequence_to_matrix 不起作用。那么,fit_on_sequences 有什么用?
解决方法
sequences_to_matrix
在调用 fit_on_sequences
后确实有效,您只需要在 num_words
实例化中指定参数 Tokenizer()
。
from tensorflow.keras.preprocessing.text import Tokenizer
test_seq = [[1,2,3,4,5,6]]
tok = Tokenizer(num_words=10)
tok.fit_on_sequences(test_seq)
tok.sequences_to_matrix(test_seq)
array([[0.,1.,0.,0.]])
开头的零是因为您的序列中没有 0,而末尾的零是因为我指定了 10 num_words
但您的测试序列中的最大值是 6。
它的目的只是跳过将整数映射到字符串的步骤。它只使用整数。