Что вы найдете в этой статье:

  • Презентация нейронной сетевой модели для обнаружения эмоций в TensorFlow (платформа машинного обучения Google с открытым исходным кодом).
  • Результаты прогнозирования эмоций субреддита /wallstreetbetstop-comments (пропустите это, если вас не интересуют технические подробности)

Набор данных

Набор данных, используемый для обучения, называется GoEmotions и содержит 58 тыс. комментариев, помеченных для 28 эмоций (включая нейтральные в качестве категории), разделенных на обучение, тестирование, и проверочные наборы.

Одна из первых вещей, которую мы должны сделать, это просмотреть данные для получения дополнительной информации.

Ниже вы можете найти график с количеством слов на комментарий. Мы видим, что у нас максимум 30 слов на комментарий. Эта информация ценна, так как мы будем использовать ее во входном слое нейронной сети.

Далее мы ищем распределение эмоций по всему набору данных.

ЭМОЦИИ = ['восхищение', 'развлечение', 'гнев', 'раздражение', 'одобрение', 'забота', 'замешательство', 'любопытство', 'желание', 'разочарование', 'неодобрение', «отвращение», «смущение», «возбуждение», «страх», «благодарность», «горе», «радость», «любовь», «нервозность», «оптимизм», «гордость», «осознание», «облегчение». ', 'раскаяние', 'грусть', 'удивление', 'нейтральный']

Обратите внимание, что 28 — это индекс категории«нейтральная» , и большая часть комментариев попадает в эту категорию.

Подготовка набора данных

Входной слой нейронной сети принимает фиксированные входные размеры. Мы будем передавать фиксированные входные векторы размером 30 элементов. То, что меньше этого, мы дополним нулями. Каждое слово токенизируется (преобразуется в число и поддерживает структуру данных отношения «слово-число» с использованием токенизатора keras).

Нейронная сеть

Сначала мы пытались создать модель, используя только плотные слои (слои нейронов, плотно связанных друг с другом) в нейронной сети с прямой связью. Вы можете выдвинуть гипотезу: хорошо, у нас есть предложение, содержащее несколько слов, мы передаем его в сеть, и если какие-то слова попадут в комментарий (для которого мы пытаемся предсказать эмоцию), мы получим хорошую классификацию. Это было не совсем правильно, поскольку точность, которую я получал, составляла около 29%.

Это можно сделать с помощью специальной категории нейронных сетей, называемой RNN (рекуррентные нейронные сети). Этот тип сети поддерживает состояние: в основном знает историю предыдущих комментариев.

Ниже мы подытожим процесс. Обратите внимание, что Input и Tokenizer не представлены в реальной модели нейронной сети, а здесь для демонстрации всего процесса.

Слой внедрения (16 измерений) переносит массив слов (список целых чисел) в более высокие измерения. Главным образом потому, что он должен отслеживать контекст слова по мере его появления (имея в виду другие слова). Ниже вы можете найти пример, перенесенный в пространственную геометрию (love и stock ближе друг к другу, чем другие слова):

За слоем внедрения следует слой LTSM — Long Short-Term Memory, который отслеживает зависимости во входной последовательности, как упоминалось выше.

Наконец, у нас есть слой классификации, содержащий 28 нейронов (классы). Каждый нейрон здесь выводит вероятность, которая в сумме составляет 1,0 (с функцией активации softmax).

Далее мы обучаем нашу модель. Модель достигла 91% точности примерно за 50 эпох (точность тестовых данных немного меньше из-за переобучения ).

Давайте прогнозировать сейчас.

Прогноз эмоций

Данные, которые использовались в качестве примера, были удалены из сабреддита /wallstreetbets. Мы взяли 20 самых горячих сообщений, извлекли комментарии с самым высоким рейтингом и передали их через нейронную сеть, чтобы получить предсказанные эмоции. Количество комментариев достигло 2,4 тыс.

Выход:

Наиболее заметными эмоциями являются восхищение, развлечение, любовь и благодарность, сопровождаемые небольшим количеством гнев и разочарование. Если бы кто-нибудь был в этом сообществе, мог бы сказать, что это может быть правильная точка зрения. Люди, восхищающиеся другими людьми за их навыки в торговле и правдивые наклонности.