Я знаком с методом fit_on_texts из токенизатора Keras. Что делает 'fit_on_sequences' и когда это полезно? Согласно документации , он «обновляет внутренний словарь на основе списка последовательностей» и принимает в качестве входных данных: «Список последовательностей. «Последовательность» — это список целочисленных индексов слов.'. Когда это полезно?
Я понимаю, что для подгонки текстов текст разбирается на токены, и каждому токену присваивается индекс (целое число). Таким образом, объект токенизатора содержит, среди прочего, словарь, относящийся к токенам (строкам) и индексам (целым числам). Однако, если я дам ему только последовательность чисел и вызову 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 никогда не вызывался)», однако вызов sequences_to_matrix после вызова только fit_on_sequences (не fit_on_texts) не работает. Итак, для чего используется 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., 1., 1., 1., 1., 1., 0., 0., 0.]])
Ноль в начале есть, потому что в вашей последовательности нет 0, а нули в конце потому, что я указал 10 num_words
, но самое высокое значение в вашей тестовой последовательности 6.
Цель, которую он выполняет, — просто пропустить шаг сопоставления целого числа со строкой. Он использует только целое число.