Привет! Иногда смотришь фильм, а в голове только один вопрос: «Опять я попался на кликбейтЭ» Давайте решим эту проблему и будем смотреть только хорошие фильмы.
Предлагаю немного поэкспериментировать с данными и написать простую нейросеть для оценки фильма.
Наш эксперимент основан на технологии анализа настроений, позволяющей определить настроение аудитории по отношению к продукту.
В качестве данных мы берем датасет пользовательских обзоров фильмов IMDb. Среда разработки Google Colab позволит быстро обучить нейронную сеть благодаря бесплатному доступу к графическому процессору (NVidia Tesla K80).
Я использую библиотеку Keras, с помощью которой построю универсальную модель для решения подобных задач машинного обучения.
Мне понадобится серверная часть TensorFlow, версия по умолчанию в Colab 1.15.0, поэтому давайте просто обновимся до 2.0.0.
Далее импортируем все необходимые модули для предварительной обработки данных и построения модели.from __future__ import absolute_import, division, print_function, unicode_literals import tensorflow as tf !tf_upgrade_v2 -h
Предыдущие статьи посвящены библиотекам, вы можете посмотреть там.
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from keras.utils import to_categorical
from keras import models
from keras import layers
from keras.datasets import imdb
Анализ данных IMDb
Набор данных IMDb состоит из 50 000 обзоров фильмов от пользователей, помеченных как положительные (1) и отрицательные (0).
- Отзывы предварительно обрабатываются, и каждый из них кодируется последовательностью индексов слов в виде целых чисел.
- Слова в обзорах индексируются по общей частоте их появления в наборе данных.
Например, целое число «2» кодирует второе наиболее часто используемое слово.
- 50 000 отзывов, разделенных на две группы: 25 000 для обучения и 25 000 для тестирования.
from keras.datasets import imdb
(training_data, training_targets), (testing_data, testing_targets) = imdb.load_data(num_words=10000)
data = np.concatenate((training_data, testing_data), axis=0)
targets = np.concatenate((training_targets, testing_targets), axis=0)
Исследование данных
Давайте посмотрим, с чем мы работаем.
print("Categories:", np.unique(targets))
print("Number of unique words:", len(np.unique(np.hstack(data))))
length = [len(i) for i in data]
print("Average Review length:", np.mean(length))
print("Standard Deviation:", round(np.std(length)))
Вы можете видеть, что все данные делятся на две категории: 0 или 1, что отражает настроение обзора.
Весь датасет содержит 9998 уникальных слов, средний размер отзыва — 234 слова со стандартным отклонением 173. Давайте посмотрим на первый отзыв из этого набора данных, который отмечен как положительный.
print("Label:", targets[0])
print(data[0])
index = imdb.get_word_index()
reverse_index = dict([(value, key) for (key, value) in index.items()])
decoded = " ".
join( [reverse_index.get(i - 3, "#") for i in data[0]] )
print(decoded)
Подготовка данных
Пришло время подготовить данные.Нам нужно векторизовать каждый отзыв и заполнить его нулями, чтобы вектор содержал ровно 10 000 чисел.
Это означает, что мы заполняем нулями каждый отзыв длиной более 10 000 слов.
Я делаю это потому, что самый большой обзор имеет почти одинаковый размер, и каждый элемент входных данных нашей нейронной сети должен быть одинакового размера.
Вам также необходимо преобразовать переменные в тип float. def vectorize(sequences, dimension = 10000):
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1
return results
data = vectorize(data)
targets = np.array(targets).
astype("float32")
Далее я разделяю набор данных на обучающие и тестовые данные, как и было согласовано, 4:1. test_x = data[:10000]
test_y = targets[:10000]
train_x = data[10000:]
train_y = targets[10000:]
Создаем и обучаем модель
Делать особо нечего, осталось только написать модель и обучить ее.Начать следует с выбора типа.
В Keras доступны два типа моделей: последовательный и функциональный API. Затем вам нужно добавить входные, скрытые и выходные слои.
Чтобы предотвратить переобучение, мы будем использовать отсев между ними.
На каждом слое используется функция «плотность» для полного соединения слоев друг с другом.
В скрытых слоях мы будем использовать функцию активации «relu»; это почти всегда приводит к удовлетворительным результатам.
На выходном слое мы используем сигмовидную функцию, которая перенормирует значения в диапазоне от 0 до 1. Я использую оптимизатор «Адам», он будет менять веса в процессе тренировки.
Мы используем двоичную кросс-энтропию в качестве функции потерь и точность в качестве показателя оценки.
Теперь мы можем обучить нашу модель.
Мы сделаем это с размером пакета 500 и всего тремя эпохами, поскольку было обнаружено, что модель начинает переобучаться, если она обучается дольше.
model = models.Sequential()
# Input - Layer
model.add(layers.Dense(50, activation = "relu", input_shape=(10000, )))
# Hidden - Layers
model.add(layers.Dropout(0.3, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
model.add(layers.Dropout(0.2, noise_shape=None, seed=None))
model.add(layers.Dense(50, activation = "relu"))
# Output- Layer
model.add(layers.Dense(1, activation = "sigmoid"))
model.summary()
# compiling the model
model.compile(
optimizer = "adam",
loss = "binary_crossentropy",
metrics = ["accuracy"]
)
results = model.fit(
train_x, train_y,
epochs= 3,
batch_size = 500,
validation_data = (test_x, test_y)
)
print("Test-Accuracy:", np.mean(results.history["val_acc"]))
Заключение
Мы создали простую нейронную сеть с шестью слоями, которая может вычислять настроения рецензентов фильмов с точностью 0,89. Конечно, вам не обязательно писать нейронную сеть, чтобы смотреть отличные фильмы, но это был всего лишь еще один пример того, как вы можете использовать данные и получать от них пользу, потому что именно для этого они и нужны.Нейронная сеть универсальна благодаря простоте своей структуры; изменив некоторые параметры, можно адаптировать его под совершенно разные задачи.
Не стесняйтесь писать свои идеи в комментариях.
Теги: #Машинное обучение #python #нейронные сети #Большие данные #Визуализация данных #наука о данных #Интеллектуальный анализ данных #комментарии
-
Улучшения В Технологии Hd-Dvr
19 Oct, 24 -
Ламповые Компьютеры: Maddida
19 Oct, 24 -
Тестирование P2P-Видео На Предмет Перегрузки
19 Oct, 24 -
Памятка Будущему Премьер-Министру
19 Oct, 24 -
Робофилия Как Сексуальная Ориентация
19 Oct, 24 -
Самый Полезный Искусственный Язык
19 Oct, 24