Извлечение фраз поддержки для сентиментальных ярлыков

Оглавление:

  1. Бизнес-проблема
  2. Источник данных
  3. Обзор данных
  4. Сопоставление проблемы реального мира с проблемой ML/DL
  5. Показатели эффективности
  6. Исследовательский анализ данных
  7. Предварительная обработка данных
  8. Модели глубокого обучения
  9. Сравнение моделей
  10. Развертывание модели
  11. Будущая работа
  12. Рекомендации

1. Бизнес-проблема

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

2. Источник данных

Это соревнование Kaggle. В этом конкурсе мы извлекли фразы поддержки из Платформы Figure Eight’s Data for Everyone. Данные доступны здесь.

3. Обзор данных

Он состоит из двух файлов данных.train.csvс 27481 строкой иtest.csv с 3534 строками.

Список столбцов в наборе данных:

textID: уникальный идентификатор для каждой строки данных.

text:содержит текстовые данные твита.

настроение: настроение текста (положительное/отрицательное/нейтральное).

selected_text:фразы/слова из текста, которые лучше всего отражают настроение.

4. Сопоставление реальной проблемы с проблемой ML/DL

Входными данными для модели является предложение, а выходными данными будут фраза/слово, являющееся частью самих входных данных. То есть мы должны предсказать слово или фразу из твита, которая иллюстрирует заданное настроение. Например

Предложение: Так грустно, что я буду скучать по тебе здесь, в Сан-Диего.

Настроение: отрицательное

Вывод:так грустно

5. Показатели производительности

Метрикой в ​​этой задаче является оценка Жаккара на уровне слов. Оценка Жаккара или Сходство Жаккара определяется какразмер пересечения, разделенный на размер объединения двух наборов.

Давайте посмотрим на примере, как работает сходство Jaccard?

doc_1 = «Данные — это новая нефть цифровой экономики»

doc_2 = «Данные — это новая нефть»

6. Исследовательский анализ данных

  • Около 40 процентов твитов нейтральны, за ними следуют положительные и отрицательные твиты. (Количество нейтральных твитов: 11117, Количество положительных твитов: 8582, Количество отрицательных твитов: 7781)

  • Гистограмма показывает, что длина очищенного текста колеблется максимально до прибл. 140 символов.
  • Положительные твиты: длина большинства твитов составляет от 30 до 50.
  • Отрицательные твиты: длина большинства твитов составляет от 20 до 40.
  • Нейтральные твиты: длина большинства твитов составляет от 20 до 40.
  • Очень редко твиты длиной более 130 или длиной менее 10 во всех категориях.

  • Большинство твитов имеют количество слов в тексте от 25 до 60 для всех категорий.
  • Очень редко твиты длиной более 140.

  • Гистограмма показывает, что нет. количество слов в тексте колеблется максимально до прибл. 35 символов.
  • Большинство твитов имеют количество слов в тексте от 5 до 15 во всех категориях.
  • Очень редко количество твитов с количеством текстовых слов превышает 30 или количество текстовых слов составляет менее 5 во всех категориях.

  • Большинство твитов имеют количество слов в тексте от 5 до 15 для всех категорий.
  • Очень меньше нет. количества слов в диапазоне от 30 до 35.

  • Облака слов дают представление о словах, которые могут повлиять на полярность твита.

  • На приведенных выше графиках показаны наиболее распространенные слова, встречающиеся в тексте, в столбцах selected_text для разных тональностей.

7. Предварительная обработка данных

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

Некоторые из общих задач предварительной обработки текста:

  • Нижний регистр
  • Удаление гиперссылок
  • Удаление цифр, угловых скобок, квадратных скобок, символа ‘\n’, замена **** словом ‹ПЛОХОЕ›
  • Удаление знаков препинания
  • Правописание
  1. Во-первых, определите неправильное написание в selected_text.

2. Если длина неправильного написания равна 1, то мы можем удалить эти строки. Потому что такие слова не имеют значения и не влияют на моделирование.

3. Если длина неправильного написания больше 1. В этом случае можно использовать нечеткую библиотеку wuzzy, где мы можем получить оценку из 100, что означает, что две строки равны, задавая индекс сходства.

8. Модели глубокого обучения

8.1. РНН

Рекуррентная нейронная сеть (RNN) — это тип нейронной сети, в котором выходные данные предыдущего шага передаются в качестве входных данных для текущего шага. В традиционных нейронных сетях все входы и выходы независимы друг от друга, но в случаях, например, когда требуется предсказать следующее слово предложения, требуются предыдущие слова и, следовательно, необходимо запомнить предыдущие слова. Так появилась RNN, которая решила эту проблему с помощью скрытого слоя, помогающего запоминать информацию о последовательности.

Проблема исчезающего градиента:

Когда мы возвращаемся к градиентам, возможно, что значения становятся слишком маленькими, что затрудняет изучение некоторых зависимостей с большим периодом. Эта проблема называется исчезающим градиентом.

Решение проблемы исчезающего градиента:Инициализация веса, выбор правильной функции активации, LSTM

8.2. LSTM (сети с долговременной кратковременной памятью)

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

Забыть ворота: решает, какую информацию удалить, если это не важно из предыдущего временного шага.

Входные ворота: определяет, какую информацию пропускать, исходя из ее значимости на текущем временном шаге.

Выходной шлюз: позволяет переданной информации влиять на выходные данные на текущем временном шаге.

Каждый твит в столбце «текст» будет разной длины. Вот почему лучше преобразовать «текстовые» данные в числа и заполнить все твиты, чтобы все входные данные были одинаковой длины.

Подготовка слоя внедрения:

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

Мы можем использовать наш словарь embeddings_index и наши word_index_text, word_index_sentiment для вычисления нашей матрицы встраивания соответственно. Мы загружаем эту матрицу внедрения в слой внедрения.

Обратите внимание, что мы установили trainable=False в Embedding Layer, чтобы предотвратить обновление весов во время обучения.

8.3. Двунаправленный LSTM

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

Например: в предложении «мальчики идут в …..» мы не можем заполнить пробел, если не знаем будущее предложение «мальчики выходят из школы». То же самое мы хотим выполнить с помощью нашей модели, и двунаправленный LSTM позволяет нейронной сети выполнять это.

Здесь вывод представляет собой вектор длины max_length_text (максимальная длина ввода). Словам, которые являются частью предсказанного_текста, присвоено значение 1, а другим — значение 0. Позже, используя этот выходной вектор, мы можем извлечь текст из столбца «текст».

Например:
Ввод (текст): Сегодня замечательный день, когда все идет гладко и слаженно.

Исходные данные (настроение):положительно

Выходной вектор: 0,0,0,1,0,0,0,0,1,0,1

Predicted_text:замечательно, плавно, гармонично

9. Сравнение моделей

Оценка Жаккара LSTM: 0,57

Оценка Жаккара по Bi-LSTM: 0,63

Можно заметить, что с двунаправленным потоком производительность лучше. Таким образом, мы сохраним модель Bi-LSTM для использования в будущем.

10. Развертывание модели

После обучения Bi-LSTM (лучшая модель) я сохранил модель в файле pickle и развернул модель в своей локальной системе вместе с Flask API, построенным вокруг окончательного конвейера. , который принимает твит, настроение в качестве входных данных и возвращает фразы/слова из текста, которые лучше всего поддерживают настроение.

Разработана HTML-страница (home.html) с двумя входными данными: твит, тональность и возвратом твит, тональность, извлеченная фраза/слова в качестве вывода.

11. Будущая работа

  • Можно попробовать GRU, что снизит вычислительные затраты и процесс станет более быстрым по сравнению с LSTM.
  • В приведенном выше моделировании я использовал моделирование на уровне слов, которое можно попробовать для моделирования на уровне символов.
  • Использование преобразователей и BERT повысит производительность.

12. Ссылки

Полный проект доступен на Github. По любым вопросам относительно проекта обращайтесь ко мне в Linkedin.