Обнаружение саркастических комментариев с помощью глубокого обучения

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

Содержание:

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

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

Нам предоставили 1,3 миллиона комментариев с сайта комментариев в Интернете Reddit. Набор данных был сгенерирован путем очистки комментариев с Reddit, содержащих тег sarcasm. Этот тег часто используется Redditors, чтобы указать, что их комментарий является шутливым и не предназначен для серьезного восприятия, и, как правило, является надежным индикатором саркастичного содержания комментариев.

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

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

Благодарности

Данные были собраны Михаилом Ходаком, Никундж Саунши и Киран Водрахалли для их статьи «Большой самоаннотированный корпус для сарказма». Данные размещены здесь.

Контент

Данные имеют сбалансированную и несбалансированную (т.е. истинное распределение) версии. (Истинное соотношение примерно 1:100). В корпусе 1,3 миллиона саркастических высказываний, а также ответы на них, а также множество несаркастических комментариев из того же источника.

Помеченные комментарии находятся в файле train-balanced-sarcasm.csv.

Вдохновение

Предсказание сарказма и соответствующих особенностей НЛП (например, субъективная детерминанта, расизм, условные выражения, слова с высокой эмоциональной окраской, «интернет-сленг» и определенные фразы).
Сарказм против чувств
Необычные лингвистические особенности, такие как заглавные буквы, курсив или удлиненные слова. например, «Ага, я уверен, что это правильный ответ».
Темы, на которые люди обычно реагируют саркастически.

О файле train-balanced-sarcasm.csv

Сбалансированный (с пониженной дискретизацией по классам) набор данных.

  • ярлык: саркастический или нет
  • comment: ответ на родительский комментарий Reddit.
  • автор: человек, оставивший комментарий
  • subreddit: прокомментировано под каким субреддитом
  • оценка: количество голосов "за" - (минус) количество голосов "против"
  • ups: количество голосов "за"
  • downs: количество голосов против.
  • дата: дата комментария
  • created_utc: время комментария в часовом поясе UTC.
  • parent_comment: комментарий родителей Reddit, на который делаются саркастические ответы.

3. Сопоставление этой бизнес-проблемы с проблемой глубокого обучения

Учитывая помеченные данные, мы должны предсказать, саркастический это комментарий или нет. Целевая переменная, которую мы имеем здесь, является логической. Итак, это проблема бинарной классификации.

В наборе данных присутствуют текстовые функции, поэтому мы можем сказать, что это задача НЛП (обработка естественного языка). Следовательно, мы можем применять различные модели НЛП, такие как CNN, LSTM, Bi-LSTM и т. д., которые можно использовать для обнаружения сарказма в комментарии.

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

4.1 Загрузка данных

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

4.2 Этикетка

Мы видим, что у нас есть идеально сбалансированный набор данных.

4.3 Автор

Из графика и кадра данных комментариев авторов мы видим, что каждый автор прокомментировал равное количество саркастических и несаркастических комментариев.

Подраздел 4.4

Из графика и фрейма данных subreddit-comment видно, что сабреддиты, посвященные политике, мировым новостям и новостям, публикуют больше саркастических комментариев, чем несаркастических, а TumblrInAction публикует больше несаркастических комментариев, чем саркастических.

4,5 балла

Из графика распределения видно, что при низком балле вероятность саркастического комментария меньше, чем несаркастического комментария.

Из диаграммы видно, что некоторые баллы очень высоки, более 6000 в саркастических комментариях.

4,5 раза

Мы можем видеть на графике распределения, что, когда число взлетов низкое, вероятность саркастического комментария меньше, чем несаркастического комментария.

Мы можем видеть на диаграмме, что несаркастических комментариев больше, когда значение ups очень велико, чем саркастических комментариев.

4,7 дауна

Когда минус равен 0, 51% комментариев носят саркастический характер. Однако, когда минус -1, 43% комментариев носят саркастический характер.

4.8 Дата

На графике распределения мы видим, что по мере увеличения даты количество комментариев увеличивается.
Между датами с 2012–05 по 2015–2010 годы количество саркастических комментариев выше, чем не саркастических. количество несаркастических комментариев выше, чем саркастических.

4.9 комментарий

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

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

  • длина комментария и метка

Мы можем видеть в распределении и диаграмме, что большинство саркастических комментариев сделаны с короткими предложениями. Если длина комментария превышает 400, это не саркастический комментарий.

4.10 Родительский_комментарий

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

Мы можем видеть в облаке слов, что верхние слова в несаркастичных родительских комментариях — «думать», «один», «люди» и т. д.

  • Длина родительского_комментария

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

5. Очистка данных, предварительная обработка и разработка функций

5.1 Очистка данных

5.1.1 Функция очистки текста: комментарий

5.1.2 Функция очистки текста: Parent_Comment

5.1.3 Функция очистки текста: автор

5.1.4 Функция очистки текста: Subreddit

5.2 Разработка функций

5.2.1 Анализ тональности

Анализ тональности – это метод анализа текста, который определяет полярность (например, положительное или отрицательное мнение) в тексте, будь то весь документ, абзац, предложение или предложение.

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

  • Комментарий
  • Родительский_комментарий

5.2.2 Длина комментария и Parent_comment

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

5.3.1 Разделение тестового обучения

Разделение набора данных на набор данных поезда, перекрестной проверки и тестирования.

5.3.2 Кодирование категориальных признаков:

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

  • Автор
  • Субреддит

5.3.3 Числовая функция масштабирования:

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

  • Оценка
  • Увеличения
  • Отрицательный_комментарий
  • Новый_комментарий
  • Pos_comment
  • Составной_комментарий
  • Отрицательный_комментарий
  • Новый_комментарий
  • Pos_pcomment
  • Compound_pcomment
  • Comment_len
  • Pcomment_len

5.3.4 Функция кодирования текста:

Класс Tokenizer позволяет векторизовать текстовый корпус, превращая каждый текст либо в последовательность целых чисел (каждое целое число является индексом токена в словаре), либо в вектор, где коэффициент для каждого токена может быть двоичным на основе количества слов. , tf-idf и т. д.

test_to_sequence преобразует каждый текст в texts в последовательность целых чисел.

pad_sequences используется для обеспечения того, чтобы все последовательности в списке имели одинаковую длину. По умолчанию это делается путем заполнения 0 в начале или в конце каждой последовательности, пока каждая последовательность не будет иметь ту же длину, что и самая длинная последовательность.

  • Комментарий

Перед заполнением нам нужно узнать необходимую максимальную длину последовательности.

Если мы оставим maxlen равным 50 для последовательности заполнения, то будет покрыто около 98,96% точек.

  • Родительский_комментарий

Теперь мы сделаем то же самое для Parent_comment.

Если мы сохраним maxlen 500 для последовательности заполнения, то будет покрыто около 99,99% точек.

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

Точность будет использоваться для проверки производительности модели.

Почему точность?

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

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

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

7. Применение моделей глубокого обучения

  • Импорт библиотек и загрузка предварительно обработанных данных
  • Матрица внедрения

Слой внедрения — один из доступных слоев в Keras. Это в основном используется в приложениях, связанных с НЛП, таких как языковое моделирование. Слой внедрения позволяет нам преобразовывать каждое слово в вектор фиксированной длины определенного размера. Результирующий вектор является плотным и имеет реальные значения, а не только 0 и 1. Фиксированная длина векторов слов помогает нам лучше представлять слова вместе с уменьшенными размерами.

При решении задач НЛП мы можем использовать предварительно обученные вложения слов, такие как GloVe или Fasttext.

Встраивание вектора перчаток

Быстрое встраивание текста

Обучил 22 модели архитектуры.

Давайте рассмотрим несколько лучших моделей архитектуры и кодов.

1. CNN1D 2 слоя для текстовых объектов и 5 плотных слоев для числовых объектов (встраивание — это быстрый текст и обучаемость = True)

Получил точность поезда 78,36% и точность теста 67,25%.

2. LSTM для текстовых данных и числовых функций CNN1D (встраивание выполняется в формате fasttext и trainable = True)

Получил точность поезда 71,81% и точность теста 71,58%.

3. CNN1D для текстовых функций и CNN1D для числовых функций (встраивание — это быстрый текст и обучаемость = True)

Получил точность поезда 75,97% и точность теста 72,18%.

4. CNN2D для текстовых функций и CNN2D для числовых функций (встраивание — это быстрый текст и обучаемость = True)

Получил точность поезда 72,6% и точность теста 71,18%.

8. Тестирование лучшей модели

Из всех обученных моделей лучшей моделью является CNN1D для текстовых функций и CNN1D для других функций (встраивание — это быстрый текст, а обучаемость — это True)

9. Анализ ошибок

Теперь мы проведем анализ ошибок на лучшей модели, используя LIME.

Мы видим, что такие слова, как doge, и, the, caow и chikin являются одними из причин предсказания саркастических комментариев. Такие слова, как недостаток, бедный и они одна из причин несаркастичного комментария предсказания.

Эпохи против точности:

Мы видим, что лучшая модель не переоснащена или недооснащена.

  • Матрица путаницы в тестовом наборе данных.

72,18 % от общего числа точек данных классифицированы правильно, а 27,82 % от общего числа точек данных классифицированы неправильно.

Истинно положительные = 32,08 %
Истинно отрицательные = 40,11 %
Ложноположительные = 9,83 %
Ложноотрицательный результат = 17,99%

Ложноотрицательный результат почти в два раза выше, чем ложноположительный.

10. Видео развертывания

Давайте посмотрим на видео запуска экземпляра модели.

11. Ссылки:













12. Будущая работа:

Мы можем применять модели на основе trainsformers, такие как DistilBERT или BERT, для придания характеристик текстовым функциям.

13. КонецПримечание:

В этом тематическом исследовании я узнал следующие моменты:

  • Сопоставление бизнес-проблем с проблемой глубокого обучения.
  • Глубокий анализ данных с использованием библиотек Pandas, Numpy, Matplotlib и Seaborn.
  • Важность предварительно обученных вложений, таких как вектор перчаток и быстрое встраивание текста.
  • Важность методов CNN и LSTM для текста и CNN для числовых данных. CNN может улавливать больше информации, чем плотные слои числовых данных.
  • Узнайте, как использовать LIME для объяснения модели.

Наконец, я хотел бы поблагодарить Прикладной курс ИИ за невероятный курс по науке о данных и за то, что он дал мне возможность решить бизнес-проблему самостоятельно.

Полные коды вы можете найти здесь

Буду рад связаться с вами в LinkedIn