Предыстория

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

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

Если вы не читали предыдущую статью, пожалуйста, ознакомьтесь.

Об архитектуре.

Архитектура нейросети CNN + GRU. Почему же выбрано CNN+GRU, а не просто GRU или CNN?

Нейросеть состоит из 3-х основных частей(CNN, GRU, Linear). Давайте рассмотрим каждую часть сети, чтобы понять, для чего они.

Архитектура нейронной сети
Архитектура нейронной сети
Гиперпараметры

(conv1): Conv1d(300, 512, kernel_size=(5,), stride=(1,), padding=(2,))

(conv2): Conv1d(512, 1024, kernel_size=(3,), stride=(1,), padding=(1,))

(conv3): Conv1d(1024, 2048, kernel_size=(5,), stride=(1,), padding=(2,))

(gru): GRU(2048, 512, batch_first=True)        

(fc1): Linear(in_features=512, out_features=256, bias=True)

(fc2): Linear(in_features=256, out_features=2, bias=True)

CNN – Convolution Neural Network

Обычно свёрточные слои используют для классификации изображений. Как и в классификации картинок, свёрточный слой выделяет “признаки”, но в нашем случае векторизированный текст. То-есть данная часть сети учится выделять признаки токсичных и позитивных сообщений.

GRU - Recurrent Neural Network

Текст – это последовательность слов или, в нашем случае, векторов, которую свёрточный слой обработал и выделил признаки. Чтобы обрабатывать последовательности произвольной длины, используют рекуррентные слои. В архитектуре используется рекуррентный слой GRU.

Linear – линейный слой

Данный слой учится делать заключительное решение по определению тональности текста на основе предыдущих слоёв.

Об обучение нейросети и результатов

Подготовка данных

Для обучения нейросети нужен датасет. Датасет был взят с сайта kaggle. Около 14000 комментариев  с разметкой токсичное сообщение или нет. Но данный датасет имеет изъян – орфографические ошибки. Для решения данной проблемы была использована библиотека Yandex Speller, которая исправляет орфографические ошибки.

Дальше надо превратить текст в числа, т.к нейросети только с ними и работают.  Можно было обучить собственный Word2Vec на основе данного набора данных, но лучше взять уже обученный. Например: Navec. Модель обучали на русской литературе (~150gb), что говорит о качественной векторизации текста.

Также надо разделить датасет на тренировочную и тестовую выборки.

Обучение нейросети

Для классификации используется обыкновенная функция потерь – кросс энтропия.

При обучении сети надо обращать внимание на основные параметры такие, как loss, precision и accuracy. Всего сеть пройдёт 5 эпох, т.к начиная с 5-ой эпохи нейронная сеть начинает переобучаться.

Результаты

После обучения сети мы имеем вот такие результаты на тестовой выборке:

loss

accuracy

precision

0.362

0.857

0.92

График точности
График точности
График loss функции
График loss функции

Вывод

Результаты обучения вполне хорошие, но хочется добиться результата получше, т.к на практике модель всё-таки ошибается, но не часто. В ~80% случаев нейросеть классифицирует тональность текста правильно.

Ссылки

Телеграм бот

Репозиторий проекта

Прошлая статья

Комментарии (9)


  1. aamonster
    19.02.2022 00:27
    +7

    Влияние бота на состав сообщества изучали?

    Я имею в виду не прямое влияние (те, кого бот забанит), а уход/приход людей под власть бота. Ну то есть кому нравится общаться на автоматически модерируемой площадке, а кому нет.

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


    1. DenisIndenbom Автор
      19.02.2022 10:39
      +1

      Влияние бота на состав сообществ я не изучал. Но будет интересно провести такой эксперимент.

      P.S: Бот может банить, если администратор чата захочет(пропишет команду /set_ban_mode 1). Но основная функция бота всё-таки предупреждать админов.


  1. Avot_Inet
    19.02.2022 01:10

    Интересная идея, такой бот надо, пожалуй, довольно долго обучать, чтобы он улавливал нюансы. То есть если человека скопом доводит чат шутками, а потом он в ответ огрызается, то вроде самый токсичный он (если прям сильно огрызается), но, с другой стороны, другие над ним подшучивали до этого состояния, просто так, чтобы бот не понял. Фактически можно ведь натренировать даже на такое?


    1. Shaz
      19.02.2022 03:57
      +6

      На такое даже модераторов не всегда натренировать могут.


    1. 631052
      19.02.2022 04:31

      при заданных вами вводных главный герой не токсичный ничуть.

      даже если сильно, даже если матом и с упоминанием родителей.

      при том, что скопом доводят.

      таково мое мнение, а у бота может и другое.


  1. ALiEN175
    19.02.2022 04:08
    +27

    а может вам мою жопу натренировать надо? Чтоб пердела не вонюче, а музыкально?*
    *оцените коммент на токсичность.

    Токсикологи, мать-перемать, повылезали. На ИИ и ардуинке. Y Bac uu c yma couD3t, pre>|<De 4em rasparsit tekct =)


  1. edo1h
    19.02.2022 09:11
    +3

    В ~80% случаев нейросеть классифицирует тональность текста

    то есть если я напишу 100 нейтральных сообщений, то вероятность того, что мои сообщения не сочтут токсичными 0.8¹⁰⁰ ≈ 0.0000000002?


    и интересно насколько результат отличается от простого ранжирования ключевых слов


  1. JTG
    19.02.2022 22:16
    +2

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


  1. ncr
    20.02.2022 02:00
    +1

    Распознавание токсичных пользователей — несомненно, одна из приоритетнейших задач человечества.