На этом шаге мы рассмотрим особенности набора данных.
Вы будете работать с набором данных IMDB: множеством из 50 000 самых разных отзывов к кинолентам в интернет-базе фильмов (Internet Movie Database). Набор разбит на 25 000 обучающих и 25 000 контрольных отзывов, каждый набор на 50% состоит из отрицательных и на 50% из положительных отзывов.
Подобно MNIST, набор данных IMDB поставляется в составе Keras. Он уже готов к использованию: отзывы (последовательности слов) преобразованы в последовательности целых чисел, каждое из которых определяет позицию слова в словаре. Это позволит нам сосредоточиться на конструировании моделей, их обучении и оценке. Позже мы рассмотрим, как использовать необработанные текстовые данные с нуля.
Код в примере 4.1 загружает набор данных (при первом запуске на ваш компьютер будет загружено примерно 80 Мбайт данных).
from tensorflow.keras.datasets import imdb (train_data, train_labels), (test_data, test_labels) = imdb.load_data( num_words=10000)
Аргумент num_words=10000 означает, что будет сохранено только 10 000 слов, наиболее часто встречающихся в обучающем наборе отзывов. Редкие слова будут отброшены. Это позволит вам работать с вектором управляемого размера. Если не установить данный предел, то модели придется столкнуться с 88 585 уникальными словами - это слишком много. Многие из них встречаются только в одном образце и поэтому не несут полезной информации для классификации.
Переменные train_data и test_data - это списки отзывов; каждый отзыв - это список индексов слов (кодированное представление последовательности слов). Переменные train_labels и test_labels - это списки нулей и единиц, где нули соответствуют отрицательным отзывам, а единицы - положительным:
print(train_data[0]) print(train_labels[0]) [1, 14, 22, 16, ... , 178, 32] 1
Поскольку мы ограничили себя 10 000 наиболее употребительных слов, в наборе отсутствуют индексы больше 10 000:
print(max([max(sequence) for sequence in train_data])) 9999
Чтобы вам было понятнее, в примере 4.2 показан пример декодирования одного из отзывов в последовательность слов на английском языке.
# word_index - это словарь, отображающий слова в целочисленные индексы word_index = imdb.get_word_index() reverse_word_index = dict( # Получить обратное представление словаря, отображающее индексы в слова [(value, key) for (key, value) in word_index.items()]) decoded_review = ' '.join( # Декодирование отзыва. # Обратите внимание, что индексы смещены на 3, потому что # индексы 0, 1 и 2 зарезервированы для слов padding (отступ), # start of sequence (начало последовательности) и unknown (неизвестно) [reverse_word_index.get(i - 3, '?') for i in train_data[0]])
На следующем шаге мы рассмотрим подготовку данных.