Привет, Хабр! Этой статьей мы начинаем публикацию серии статей о задачах Data Science, которые мы решаем в Центре развития финансовых технологий Россельхозбанка.
В прошлом году Россельхозбанк объявлено по созданию и развитию экосистемы сельскохозяйственных предприятий.
Для одной из базовых платформ экосистемы - Ваше собственное фермерство Мы решили сделать пару полезных задач, о которых поговорим ниже.
Платформа «Свое Фарминг» — это маркетплейс товаров для сельхозпроизводителей от крупнейших поставщиков со всей России.
На сайте представлена продукция наиболее приоритетных для фермеров категорий: средства защиты растений, удобрения, семена, сельскохозяйственная техника и т.д. Тысячи поставщиков загружают информацию о своей продукции с целью продажи.
И, конечно же, необходимо внедрить процесс проверки качества загружаемого контента.
В связи с этим мы решили создать собственный инструмент для премодерации текстовой и графической информации.
Что они делали?
В этой статье мы поговорим о том, как в рамках сотрудничества с Лабораторией МФТИ, в частности созданный Для реализации задач Банка мы разработали инструмент, позволяющий осуществлять высокоточную предварительную модерацию текстового контента.Наша цель звучала довольно просто — созданный нами инструмент должен автоматически классифицировать текст как приемлемый для размещения на сайте (класс 0) или неприемлемый (класс 1).
Если алгоритм не может четко понять, к какому классу относится текст, то он (текст) отправляется на ручную модерацию.
У нас есть задача по обработке текста: мы хотим отфильтровать «токсичные» во всех смыслах тексты, а именно: ругательства, оскорбления, различный контент, запрещенный законом, и просто текст, недопустимый для размещения на сайте.
Мы ожидаем, что разработанный нами алгоритм примет на вход набор текстов и выведет число от 0 до 1 — степень или вероятность «токсичности» текста.
Чем ближе это число к единице, тем более токсичным является комментарий.
Стоит отметить, что задача обнаружения токсичных текстов вовсе не нова и достаточно популярна в англоязычном сегменте.
Несколько лет назад аналогичная задача решалась в рамках конкурса Проблема классификации токсичных комментариев на Кагле.
Для русского языка решение должно быть получено аналогичным образом, но качество модели может быть ниже из-за того, что русский язык структурно сложнее английского.
В свободном доступе только один помеченный русский язык.
набор данных искать токсичность в тексте.
Также нам удалось найти датасет для поиска оскорблений (частный случай токсичности).
Плюс мы собрали примеры рекламы с агропорталов и отметили их как приемлемые (класс – 0).
Поставленная нами задача оказалась весьма уникальной с точки зрения данной сельскохозяйственной темы.
Его специфика заключается в том, что фразы, являющиеся оскорблениями в обычной жизни, не всегда таковы, когда речь идет о сельском хозяйстве.
Среди тривиальных примеров можно назвать следующие: «Не суй рыло» — текст явно неприемлем, а текст со «свиной рылом» легко разместить на сайте (хотя это зависит от контекста).
То же самое относится и к некоторым подвидам сельскохозяйственных животных и растений.
Если говорить о решении подобных задач классификации текста, то фактически даже самые простые модели (линейные) уже дают хороший результат .
Но, как всегда, для достижения более высокого качества мы будем использовать нейронные сети.
Самая популярная архитектура (на момент написания статьи) для решения подобных задач — BERT. На момент упомянутого выше конкурса Kaggle этой архитектуры не существовало, поэтому использовались другие.
Однако позднее эта задача была успешно решена.
решено используя БЕРТ.
Как ты сделал это?
Перейдем к самому интересному – решению задачи.Немного подумав над «архитектурой» инструмента, мы решили использовать три модели: поиск по словарю (как фильтр нецензурной лексики), логистическую регрессию (как базовое решение) и BERT (как более продвинутое).
Общая схема
Общая схема решения выглядит примерно так: внутри «черного ящика» текст сначала попадает в наивный классификатор, основой которого является словарь нецензурных слов (ругательных выражений), сюда сразу попадают тексты, содержащие «плохие» слова.
отсекаются (их токсичность всегда равна единице ( 1).
Тексты, прошедшие первый этап, попадают в более сложную нейросетевую модель, что указывает на степень их токсичности.
Если нейросетевая модель дает сбой, она заменяется на более простой — логистическая регрессия.
То есть какой-то ненаивный результат мы получим в любом случае.
Теперь давайте рассмотрим каждый компонент более подробно.
Наивный классификатор
Здесь все довольно просто: используя словарь нецензурной лексики, довольно легко понять, есть ли в тексте то или иное «плохое» слово или нет. То есть на этом этапе можно даже обойтись без модели ML как таковой и сразу отсеивать тексты, содержащие «плохие» слова.
А что, если в тексте не используются такие словарные слова, но текст, тем не менее, неприемлем для размещения на портале? Давайте попробуем решить эту проблему, используя логистическую регрессию и BERT.
Логистическая регрессия
Простейшая модель позволяет спрогнозировать значение на основе имеющихся данных.Текстовые векторы для этой модели получены с помощью TF-IDF и TweetTokenizer от nltk. Такая модель, как известно, позволяет оценить вероятность токсичности текста с помощью логистической функции.
В нашей архитектуре логистическая регрессия «страхует» нейронную сеть.
Великий и ужасный БЕРТ
Мы использовали предварительно обученную модель РуБерт от DeepPavlov, дополнительно обученного на размеченных текстах.
Процесс прогнозирования, не вдаваясь в подробности, выглядит следующим образом:
Мы строили, строили и наконец построили!
Мы оценивали качество, используя наши любимые показатели Точность, ROC-AUC и F1-меру.Окончательные показатели качества для отложенной выборки были следующими:
Алгоритм/Метрика | Наивный | БЕРТ | ЛР | Наивный → БЕРТ | Наивный → LR |
Точность | 0.854 | 0.901 | 0.865 | 0.909 | 0.879 |
РПЦ-АУК | 0.782 | 0.960 | 0.921 | 0.963 | 0.939 |
F1-мера | 0.722 | 0.840 | 0.800 | 0.855 | 0.824 |
Как и ожидалось, с BERT метрики оказались немного лучше, хотя и ненамного.
Какие выводы мы сделали?
В заключение хотелось бы отметить несколько важных аспектов, без которых, на наш взгляд, запуск подобных решений в промышленном режиме невозможен.
- Всегда нужно учитывать специфику задачи по разметке текста.
- Необходимо предусмотреть ручную модерацию текста на случай, если модель «сомневается» в своем решении.
Вы не хотите, чтобы нежелательный контент попал в ваш продукт.
- Также необходимо отправить размеченные от руки тексты из предыдущего пункта для дополнительного обучения.
Таким образом, вы сможете улучшать модель небольшими шагами и со временем сокращать объем работы, связанной с ручной модерацией.
- Лучше использовать комплексный подход к решению проблемы.
Иногда даже самые простые «модели» по словарям уже дают хорошие результаты.
- Выбирайте лучшую модель исходя из поставленной задачи.
В нашем случае мы выбрали BERT, потому что он лучше реагирует на контекст, чем логистическая регрессия.
Теги: #Машинное обучение #python #искусственный интеллект #экосистема #nlp (обработка естественного языка) #bert #модерация контента
-
Как Скопировать Текст Из Pdf В Word
19 Oct, 24 -
Бенвенист, Эмиль
19 Oct, 24 -
Ftdi Наносит Ответный Удар
19 Oct, 24 -
Мосдроид В Авито – Анонс
19 Oct, 24 -
Википедия: Закулисные Войны?
19 Oct, 24