Практические руководства

Как вы думаете, насколько злобны ваши комментарии в социальных сетях? 😈

Предварительная обработка, встраивание слов, разработка и оценка модели, классификация текста с несколькими метками

Этот проект направлен на создание модели Multi-label Classification, способной обнаруживать различные классы токсичности: токсичный, очень токсичный, опасный, непристойный, оскорбление и ненависть к идентичности для каждого комментария. . Комментарий может принадлежать более чем к одной или ни одной из вышеперечисленных категорий. Я создал конвейер предварительной обработки данных NLP, используя Regex (регулярные выражения), NLTK lib, Bag-of-Words и TF-IDF, а затем использовал контролируемые модели машинного обучения, такие как логистическая регрессия и наивный байесовский метод, для классификации комментариев.

Фон

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

Набор данных

Набор данных, используемый в этом проекте, представляет собой набор данных Jigsaw / Conversation AI, предоставленный для задачи классификации токсичных комментариев Kaggle. Он содержит комментарии Википедии, которые были помечены экспертами по шести типам токсичности.

Снимок набора данных выглядит так:

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

  • Всего комментариев: 159,571
  • Достойные комментарии (отрицательный класс): 143 346
  • Неприличные комментарии (положительный класс): 16,225

Эти 16 225 неприличных комментариев помечены шестью разными типами токсичных ярлыков, которые можно увидеть на рисунке 2.

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

Этот набор данных сильно несбалансирован, так как отношение отрицательного класса к положительному составляет 89,8: 10,2. С таким искаженным набором данных модель будет давать точность по умолчанию 90% при классификации комментария как приличного комментария, ничего не изучая. По той же причине точность не должна быть мерой производительности модели в этом случае. Нам нужны более описательные метрики производительности. Кроме того, проблемы многокомпонентной классификации должны оцениваться с использованием иных показателей эффективности, чем проблемы однокомпонентной классификации. Некоторые примеры метрик классификации с несколькими метками: точность при k, средняя точность при k, оценка сходства Жаккара, потеря Хэмминга, выборочная оценка F1 и т. Д. Я использовал показатель сходства Жаккара, а также проверил оценку F1 и оценку ROC (AUC ), чтобы лучше оценить и выбрать модель.

На этом этапе моего исследования я выяснил природу проблемы, статистику набора данных и метрики оценки, которые будут использоваться для оценки модели. Тогда возникает вопрос - каковы корреляции между этими категориями? Я предположил, что любой комментарий «сильно токсичный», «непристойный», «угроза», «оскорбление» или «ненависть к личности» автоматически попадает в категорию «токсичных». Чтобы убедиться в этом, я сравнил «токсичные» категориальные комментарии с пятью другими категориями попарно. Рисунок 4 показывает, что все 1595 серьезных токсичных комментариев также помечены как токсичные комментарии, что подтверждает мое предположение.

Но сравнивая категории «токсичных» и «непристойных» на рисунке 5, интересно отметить, что из 8449 нецензурных комментариев 523 не являются токсичными. Изучив несколько комментариев, я пришел к выводу, что люди-оценщики пометили комментарий как непристойный, когда комментарий в целом вызывает негативную атмосферу, но не содержит вульгарных слов. Однако я вижу комментарии, которые также отмечены как токсичные и непристойные. Какое этому объяснение?

Далее, рисунок 6 показывает, что всего 478 комментариев с «угрозами», из которых 29 нетоксичны. Имеет смысл, если этот комментарий «Вы будете заблокированы» помечен как «угроза», но не как «токсичный». Но комментарий «Забавно. Вас лично обидели? Итак, писатель плохих вещей сообщил вам, ваше имя и т. Д., Верно? И если кто-то оскорбляется комментарием или эпитетами на веб-сайте, то этот же человек должен духовно расти как минимум еще каких-то 5 веков. И если предыдущий комментарий обидел кого-то еще, то этот же человек должен убить его / ее. Береги себя! »обозначен как« угроза », но не« токсичен », что не имеет для меня особого смысла.

Когда я проверил все 7 877 оскорбительных комментариев, я обнаружил, что 533 оскорбительных комментария не были токсичными (рис. 7). В ходе дальнейшего расследования я обнаружил, что «оскорбительные» комментарии не являются «токсичными», если они не содержат резких или вульгарных слов.

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

Теперь давайте посмотрим на необработанный комментарий.

df.comment_text [0]

«Объяснение \ nПочему изменения, внесенные под моим именем пользователя Hardcore Metallica Fan, были отменены? Это не были вандализмы, а просто закрытие некоторых общих собраний после того, как я проголосовал в FAC New York Dolls. И, пожалуйста, не удаляйте шаблон со страницы обсуждения, поскольку я уже на пенсии. 89.205.38.27 "

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

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

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

Вот те закономерности, которые я заметил в комментариях:

Давайте воспользуемся этими заменами, чтобы написать функцию, которая очищает текст

  • Лемматизация, стемминг, токенизация и удаление стоп-слов с помощью NLTK

С помощью этих двух шагов мы получаем чистые комментарии. Теперь необработанные комментарии выглядят так:

«Объяснение правок внесено имя пользователя, хардкор-фанат Metallica отказался от вандализма закрытие газ проголосовал за New York Doll Fac, пожалуйста, удалите шаблон страницы обсуждения после выхода на пенсию»

Лучше правильно !!!

Модель на основе правил

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

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

Базовая точность модели для прогнозирования классов токсичный, тяжелый_отоксичный, непристойный, угроза, оскорбление и ненависть к идентичности:

  • токсичный: 89,4%
  • серьезный_отоксичный: 88,2%
  • непристойное: 96,3%
  • угроза: 87,8%
  • оскорбление: 95,8%
  • identity_hate: 98,3%

Основываясь на реализованных здесь правилах, базовый классификатор классифицирует достойные и не достойные комментарии с точностью 76,6%. Теперь нам нужно посмотреть, дают ли модели на основе ИИ лучшую производительность, чем эта.

Преобразование комментариев в векторы с помощью пакета слов или TF-IDF

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

  1. На основе частоты. Наиболее популярные методы: Пакет слов, TF-IDF.
  2. На основе прогнозов. Самые популярные методы - Word2vec и Перчатка.

Здесь я буду использовать вложения слов на основе частоты.

Результирующие вложения находятся в формате массива NumPy, и если мы наблюдаем вложения, мы увидим разреженные данные большой размерности.

Модели машинного обучения

Для решения проблемы классификации с несколькими метками OneVsRestClassifier используется с такими оценщиками, как логистическая регрессия и наивный байесовский анализ.

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

Код, используемый для обучения OneVsRestClassifier:

В функции train_model я использовал j_score и print_score, они определены как:

Результаты обучения различных моделей

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

Из результатов обучения ясно, что логистическая регрессия хорошо работает с непрерывными данными (когда функции вычислялись с помощью «TF-IDF»), а Наивный байесовский метод хорошо работает, когда данные находятся в дискретной форме (когда функции вычислялись с помощью « Мешок слов »). Я отметил, что наивный байесовский метод показывает хорошие результаты, сравнивая показатель Жаккарда, показатель F1 и показатель ROC_AUC этих двух моделей. Я уверен, что при дальнейшей тонкой настройке гиперпараметров логистической регрессии мы сможем получить хорошую модель, но это довольно дорого с точки зрения вычислений и времени обучения, чтобы получить результат, сопоставимый с наивным байесовским методом. Итак, я предпочитаю использовать Наивный байесовский метод встраивания «Мешок слов» с max_features, который считается 2000.

Здесь также следует отметить, что модель учится связывать часто используемые слова в соответствующей категории с соответствующими токсичными классами. Например, модель предсказывает этот комментарий Я красивая чернокожая гей-женщина как токсичный и ненависть к идентичности, поскольку слова черный и гей часто используются в словах токсичные и ненависть к идентичности в наборе данных. Чтобы избежать таких непреднамеренных предубеждений, Jigsaw / Conversational AI придумал еще один набор данных, в котором они пометили подмножество нетоксичных комментариев атрибутами идентичности.

Заключение

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

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

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