Keras 的 Tokenizer fit_on_sequences 有什么用?

What is Keras' Tokenizer fit_on_sequences used for?

我熟悉 Keras 分词器中的方法 'fit_on_texts'。 'fit_on_sequences' 有什么作用,什么时候有用?根据 documentation,它“根据序列列表更新内部词汇表。”,并将其作为输入:'A list of sequence. A "sequence" is a list of integer word indices.'。这什么时候有用?

为了适合文本,我知道文本被解析为标记,并且每个标记都分配有一个索引(整数)。因此,tokenizer 对象包含一个与标记(字符串)和索引(整数)相关的字典。但是,如果我只给它一个数字序列并调用 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:“在使用 sequences_to_matrix 之前需要(如果从未调用过 fit_on_texts)。”,但是,仅在调用 fit_on_sequences 之后调用 sequences_to_matrix (not fit_on_texts) 不起作用。那么,fit_on_sequences有什么用呢?

sequences_to_matrix 在调用 fit_on_sequences 后有效,您只需要在 Tokenizer() 实例化中指定参数 num_words

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., 1., 1., 1., 1., 1., 0., 0., 0.]])

开头的零是因为你的序列中没有0,最后的零是因为我指定了10 num_words但是你测试序列中的最高值在6.

它的作用只是跳过了将整数映射到字符串的步骤。它只使用整数。