Как при помощи NLP мы научили нейросеть понимать токсичные комментарии

Кейс TeamIdea

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

Ключевые цели проекта:

1. Автоматически отклонять или одобрять отзывы.

2. Одобрять отзывы как с плохими оценками, так и с хорошими.

3. Отклонять сообщения, содержащие ненормативную лексику, оскорбления, завуалированную токсичность.

Текст каждого отзыва должен проходить через фильтр стоп-слов 
Текст каждого отзыва должен проходить через фильтр стоп-слов 

Этап 1: Создать фильтр ненормативной лексики.

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

Такие системы автомодерации работают в интернете уже лет 20, и пользователи научились их обходить. Например, заменив некоторые буквы в слове на латиницу.

Поэтому мы добавили еще одну предобработку – транслитерацию всех символов в кириллицу. Но и это не работало. Ведь можно написать @VtomoBiLь, a в т о мо б ил ь, а-вт-омо-б_ил* – все равно слово читаемо.

Поэтому мы разработали сложные правила транслитерации и сравнения с исходным словом.

Из одного слова мы на выходе получали несколько масок сравнения и уже эти маски сопоставляли со списком стоп-слов.

Например:

· (*) – соответствует любому количеству любых букв

· (‘) – это мягкий знак или твердый знак

Латинская (B) – может стать русской «Б», русской «В» или мягким знаком «Ь» (если в нижнем регистре – b) .

После этих доработок фильтр ненормативной лексики заработал на отлично.

Этап 2: распознать и отфильтровать скрытые, «токсичные» отзывы.

Отзыв, не содержащий ненормативной лексики, все равно может быть оскорбительным.
Отзыв, не содержащий ненормативной лексики, все равно может быть оскорбительным.

Одного списка стоп-слов было недостаточно.

В некоторых отзывах все слова – приличные, а вот общий смысл несет в себе оскорбление.

Возьмем пример для отзывов о товарах из раздела «Электроника и Бытовая Техника».

«Отличный девайс, разработчики достойны быть уложенными на рельсы».

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

Как понять взаимодействие слов? Как распознать токсичность смысла? На помощь приходят нейросети и NLU–Natural Language Understanding.

Этап 3: Обучить нейросеть, используя векторизацию текста.

Векторизация позволяет оцифровать смысл слов и текстов 
Векторизация позволяет оцифровать смысл слов и текстов 

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

Как это работает?

Составляется словарь всех слов языка. Создается виртуальное многомерное пространство (300, 600 или даже 1000 измерений). Обучающей системе подается на вход множество текстов.

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

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

Как при помощи NLP мы научили нейросеть понимать токсичные комментарии

Например:

Сладко и вкусно – очень близко

Горько – чуть подальше

Индукция – совсем далеко.

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

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

Мы выбрали модель BERT. Это одна из доступных моделей, векторизующих текст на русском языке. Поверх модели мы использовали голову (Head) классификатора, которую нужно было обучить.

Этап 4: Найти в сети 50.000 токсичных отзывов

Как при помощи NLP мы научили нейросеть понимать токсичные комментарии

У клиента было около 10 000 отзывов, как одобренных, так и отклоненных. Этого оказалось недостаточно. Чтобы обучить классификатор, нужно как минимум 30, а лучше 50 тысяч обучающих примеров.

Более того, в этих примерах распределение классов (хорошие/плохие) должно быть равномерным.

В нашем случае лишь 5% отзывов являлись плохими, оскорбительными или содержали угрозы. Обучать на таком наборе данных – нельзя. Модели было бы недостаточно «плохих» примеров.

Давайте попробуем разобраться почему. Например, модель плохо обучится и начнет считать все отзывы хорошими. В этом случае точность работы модели составит 95% – казалось бы неплохая цифра, но нас модель, одобряющая все отзывы не устроит.

Мы смогли найти решение проблемы с дефицитом обучающих данных. Сообщество уже успело собрать различные наборы. В интернете доступны dva4-toxic-commentsodnoklassniki-toxic-comments и подобные датасеты.

Эти наборы данных качественно классифицированы, в них приблизительно равномерное распределение примеров по классам, они достаточно объемны.

Более того, эти комментарии просто изобилируют угрозами, оскорблениями, непристойностями и прочим токсичным контентом. Как раз то, что нам нужно.

Обучали модель в несколько этапов. обучили модель на наборе данных toxic-comments.

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

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

Как при помощи NLP мы научили нейросеть понимать токсичные комментарии

Чтобы повысить точность модели мы сделали более 2х классов, благо размеченные данные позволяли это сделать:

· Нейтрально

· Положительно

· Отрицательно

· Угроза

· Оскорбление

· Непристойность

· Опасность

Собственные данные мы разметили моделью, обученной на первом этапе.

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

Этап 5: Разворачивание

Как при помощи NLP мы научили нейросеть понимать токсичные комментарии

Точность (вернее F1-мера) определения «одобряемости» отзыва на итоговых тестах модели составила 98.372% – что абсолютно устроило и нас, и заказчика.

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

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

Этап 6: Сопровождение

Следующая задача – обучать модель в процессе эксплуатации.

Если «плохой» отзыв одобряется вручную, мы отправляем его на дообучение.

Здесь снова встает вопрос аугментации данных.

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

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

На этих примерах мы дообучаем модель, тестируем и приносим новую версию в продакшн после успешных тестов.

Подводя итоги

Бизнес-выгоды:

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

После запуска акции количество отзывов увеличилось в 8 раз.

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

IT – проблемы и решения:

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

Данные в наше время можно найти и доработать.

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

Автор: Максим Антонов, Системный архитектор TeamIdea

33
3 комментария

Может это конечно и полезный маркетинговый интрумент , НО тратить на него кучу времени сил и средств врядли кто либо захочет… ибо в 2023 выхлоп минимален , а тонких троллей все меньше и меньше …. Если вы уж решили таки заняться Фило—лингвистической темой напишите лучше нейросетку для перевода электронных документов хотя бы с английского на русский язык … вчера окинул зорким взглядом площадки и приложения позиционирующийся себя чуть ли не вершинной ИИ…. по факту половину из них протестировать оказалось не возможно , вторая половина оказалась недоведена до ума … кто сделает что либо стоящие получит много много денежак а может и Нобелевскую премию

Ответить

Евгений, спасибо за комментарий.

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

Теперь про перевод электронных документов. Это только на поверхности кажется, что тема простая. Документы могут быть юридические, медицинские, политические, бухгалтерские, технические и т.д.

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

Но мы готовы взяться за разработку подобного решения. Приходите, обсудим :)

1
Ответить

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

После запуска акции количество отзывов увеличилось в 8 раз.

Евгений, а мне бизнес-выгоды кажутся весьма понятными )

Ответить