Шаг 93.
Глубокое обучение на Python. ... . Классификация отзывов к фильмам: пример бинарной классификации. Набор данных IMDB

    На этом шаге мы рассмотрим особенности набора данных.

    Вы будете работать с набором данных IMDB: множеством из 50 000 самых разных отзывов к кинолентам в интернет-базе фильмов (Internet Movie Database). Набор разбит на 25 000 обучающих и 25 000 контрольных отзывов, каждый набор на 50% состоит из отрицательных и на 50% из положительных отзывов.

    Подобно MNIST, набор данных IMDB поставляется в составе Keras. Он уже готов к использованию: отзывы (последовательности слов) преобразованы в последовательности целых чисел, каждое из которых определяет позицию слова в словаре. Это позволит нам сосредоточиться на конструировании моделей, их обучении и оценке. Позже мы рассмотрим, как использовать необработанные текстовые данные с нуля.

    Код в примере 4.1 загружает набор данных (при первом запуске на ваш компьютер будет загружено примерно 80 Мбайт данных).


Пример 4.1. Загрузка набора данных IMDB
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 показан пример декодирования одного из отзывов в последовательность слов на английском языке.


Пример 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]])

    На следующем шаге мы рассмотрим подготовку данных.




Предыдущий шаг Содержание Следующий шаг