Заявление о проблеме

Движение «Я тоже» или (#MeToo) - это общественное движение против сексуального насилия и сексуальных домогательств, в рамках которого люди публикуют обвинения в сексуальных преступлениях. Целью движения «Я тоже» является расширение прав и возможностей людей, подвергшихся сексуальному насилию, через сочувствие и солидарность за счет численной силы.

За последние несколько лет социальные сети стали широко использоваться в социальных движениях. Движение «Я тоже» стало вирусным в социальных сетях в виде хэштега.

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

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

Как можно использовать машинное обучение для решения этой проблемы?

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

Обзор данных

Данные собираются из -



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

Нам предоставили три CSV-файла - Train, Dev и Test.

Train.csv - в этом файле содержится около 7201 обучающей выборки и четыре столбца.

Dev.csv - для разработки / проверки у нас есть 990 образцов.

Test.csv - для тестирования у нас есть 1701 образец.

У нас есть три класса - Комментирование, Взгляд / Выражение лица / Взгляд и прикосновение / Нащупывание.

Существующие решения

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



Улучшения существующих подходов

В исследовательской работе они использовали только текстовые данные. С помощью разработки функций мы создадим некоторые новые функции, такие как -

  1. Оценка настроения
  2. Количество существительных
  3. Количество глаголов
  4. Количество прилагательных
  5. Счетчик наречий
  6. Количество местоимений

Мы будем экспериментировать со всеми классическими алгоритмами машинного обучения, такими как логистическая регрессия, KNN, машина опорных векторов, случайный лес, дерево решений и градиентное усиление, XG Boost и Cat Boost.

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

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

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

Точность. В терминологии непрофессионала точность может быть определена как "нет". всех точек, которые наша модель предсказала как класс m, и которые на самом деле были классом m, разделенным на все точки, которые наша модель предсказала как принадлежащие классу m.

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

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

Из приведенного выше графика мы обнаружили, что большинство наших образцов принадлежит классу Commenting, и у нас меньше всего образцов для класса Ogling / Facial Expression / Staring.

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

Из приведенного выше графика мы видим, что наиболее часто употребляемые слова - это человек, автобус, тронулся, попробовал, дотронуться, когда один из классов - «Трогать / нащупывать».

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

Еще одна гистограмма из наиболее употребительных слов, относящихся к классу Commenting.

Здесь можно увидеть, что группа мальчиков, состоялась, попробовала прикоснуться, сбежала и т. Д. Были наиболее распространенными биграммами в нашем корпусе.

Чаще всего триграммы имели место происшествия, проводился опрос безопасного города и основания красной точки.

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

Выводы из анализа данных

  1. Наш набор данных сильно несбалансирован, поскольку большинство выборок относятся к классу Commenting.
  2. ЦНЭ не умеет различать наши образцы в 2-х измерениях.

Предварительная обработка данных и разработка функций

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

  1. Деконкатенация слов
  2. Удаление всех стоп-слов
  3. Преобразование каждого слова в нижний регистр.

Следующим шагом будет сопоставление нашей проблемы с несколькими метками с несколькими классами. У нас есть 3 класса, и всего возможно 8 комбинаций.

  • Только комментирование
  • Только оглинг
  • Только трогательно
  • Комментирование и оглинг
  • Комментируя и трогая
  • Прикосновение и взгляд
  • Комментируя, трогая и пристально глядя
  • Не принадлежит ни к какому классу

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

Мы преобразуем наши текстовые данные в векторы с помощью tfidf-W2V. Будут использоваться предварительно обученные вставки перчаток. Также будут созданы некоторые дополнительные функции, например:

  • Оценка тональности нашего текста
  • Считаем количество существительных, местоимений, наречий, прилагательных и глаголов в нашем тексте.

Всего у нас будет 305 функций.

Эксперименты с разными моделями

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

Логистическая регрессия

Из потери журнала мы видим, что наша модель переоснащается набору данных поезда. Матрица точности показывает нам, что наша модель отдает предпочтение доминирующим классам (1,3 и 0) и не может предсказать класс 6, то есть прикосновение и взгляд.

XG Boost

Мы провели поиск по сетке на классификаторе XG Boost и точно настроили гиперпараметры, такие как - n_estimators, max_depth, min_child_weight и reg_alpha.

Потеря журнала снизилась до 1,4 с 1,66 при использовании XG Boost, но наша модель по-прежнему не может предсказать класс 6 вообще.

Результаты по всем нашим моделям -

Из приведенной выше таблицы видно, что XG Boost была нашей лучшей моделью.

Пользовательский классификатор стека

Мы создали настраиваемый классификатор стека, который принимает k и список классификаторов в качестве гиперпараметра. Предположим, что k = 20, тогда он 20 раз будет повторять наш список классификаторов, и на каждой итерации он будет случайным образом выбирать модель, и наши обучающие образцы будут обучаться на ней. Для базовых моделей мы обучили наш настраиваемый классификатор стекирования на [Логистическая регрессия, SVM, Случайный лес, Cat Boost, LightGBM, Decision Tree, XG Boost] с k = 20, а для нашего метаклассификатора наша модель случайным образом выбрала один классификатор из [LightGBM, XG Boost, Cat Boost].

Вы можете увидеть приведенный выше код для создания настраиваемого классификатора стекирования. Наш метод инициализации похож на конструкторы в C ++ и Java. Он используется для инициализации значений объекта класса. Он запускается, как только создается экземпляр объекта класса. Наша train_base будет использоваться для обучения нашей базовой модели путем повторения k раз в нашем списке классификаторов, и аналогично train_meta будет использоваться для обучения нашего метаклассификатора. Здесь мы случайным образом выберем индексный номер от 0 до длины списка мета-классификаторов. Возвращенный номер индекса поможет решить, какой классификатор нужно обучить. Функция оценки используется для тестирования и распечатывает наш журнал потерь, матрицу путаницы, матрицу точности и матрицу отзыва.

Результаты

Наша модель переоснащается и отдает предпочтение доминирующим классам, таким как 0,1 и 3. Но, учитывая, что у нас было только 7201 обучающая выборка, этого достаточно в качестве первого решения.

Сквозной конвейер и развертывание

Наша модель развернута на героку -



Все файлы для развертывания можно найти в моем репозитории на github. Вы можете пойти и проверить это !!

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

  • Известь можно использовать для повышения интерпретируемости и проверки того, на каком основании наша модель предсказывает определенный класс.
  • Мы можем пойти на шаг впереди и использовать архитектуры глубокого обучения, такие как RNN и гибридный CNN-RNN.
  • Извлечение еще нескольких обучающих образцов с форума safecity.

использованная литература

Для любого файла, связанного с кодом, вы можете перейти в мой репозиторий github -



Свяжитесь со мной в Linkedin -



Спасибо за чтение !!!