Хотя информация в этот вопрос хороша, действительно, есть более важные вещи, на которые нужно обратить внимание:
Вы ДОЛЖНЫ использоватьодин и тот же токенизатор в данных обучения и испытаний
В противном случае для каждого набора данных будут разные токены.Каждый токенизатор имеет внутренний словарь, который создается с помощью fit_on_texts
.
. Не гарантируется, что данные обучения и испытаний будут иметь одинаковые слова с одинаковыми частотами, поэтому каждый набор данных создаст свой словарь, и все результаты изданные теста будут неверными.
Это также означает, что вы не можете fit_on_texts
тренироваться, а затем fit_on_texts
снова: это изменит внутренний словарь.
Возможно уместить все данные.Но, вероятно, лучше зарезервировать токен для «неизвестных» слов (oov_token=True
), для случаев, когда вы находите новые тестовые данные со словами, которых ваша модель никогда не видела (для этого необходимо заменить редкие слова в обучающих данных этимжетон тоже).
Тестирование токенизатора с неизвестными словами:
Следующий тест показывает, что токенизатор полностью игнорирует неизвестные слова, когда oov_token
не установлен.Это не может быть хорошей идеей.Неизвестные слова могут быть ключевыми словами в предложениях, и просто игнорировать их может быть хуже, чем знать, что там есть что-то неизвестное.
import numpy as np
from keras.layers import *
from keras.models import Model
from keras.preprocessing.text import Tokenizer
training = ['hey you there', 'how are you', 'i am fine thanks', 'hello there']
test = ['he is fine', 'i am fine too']
tokenizer = Tokenizer()
tokenizer.fit_on_texts(training)
print(tokenizer.texts_to_sequences(training))
print(tokenizer.texts_to_sequences(test))
Выходы:
[[3, 1, 2], [4, 5, 1], [6, 7, 8, 9], [10, 2]]
[[8], [6, 7, 8]]
Теперь это показывает, что токенизатор будет присваивать индекс 1 всем неизвестным словам:
tokenizer2 = Tokenizer(oov_token = True)
tokenizer2.fit_on_texts(training)
print(tokenizer2.texts_to_sequences(training))
print(tokenizer2.texts_to_sequences(test))
Выходы:
[[4, 2, 3], [5, 6, 2], [7, 8, 9, 10], [11, 3]]
[[1, 1, 9], [7, 8, 9, 1]]
Но было бы интересно, чтобы группа редких слов в обучающих данных также была заменена на 1, поэтому ваша модель имеет представление о том, как обращаться с неизвестными словами.