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

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

Я реализовал архитектуру CNN, предложенную Юн Кимом, отклонившись только от встраивания слов, количества фильтров, сгенерированных на сверточном слое, и метрики ошибок. Полученная модель работала так же, если не лучше, чем модель, использованная исследователями Корнелла при сравнении общих оценок F1 на тех же данных (0,91). Это приятно, потому что я не оптимизировал параметры своей модели, не говоря уже о том, чтобы извлекать какие-либо функции.

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

И хотя предыдущие примеры показывают, что аннотаторы не работали с четко определенными категориями, проблемы выходят за рамки этого. Твит о том, что «Лейкерс сейчас мусор», был расценен как разжигание ненависти. Я готов уступить этому человеку, даже если у него сомнительное мнение (давай, «Лейкерс»!). Дело в том, что если я не знаю, о чем думали аннотаторы, я не могу ожидать этого от своей модели.

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

Мой код доступен здесь.

Первоначально опубликовано на zacharykitt.com.