Предыстория
Есть известная проблема с токсичными людьми в чатах. У модераторов чатов не всегда получается отслеживать и банить токсичных людей, хотелось бы автоматизировать процесс.
В прошлой статье было мало уделено архитектуре нейросети. Цель данной статьи рассказать больше об архитектуре сети и её компонентов, которые использует бот для определения токсичных сообщений.
Если вы не читали предыдущую статью, пожалуйста, ознакомьтесь.
Об архитектуре.
Архитектура нейросети 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 |
Вывод
Результаты обучения вполне хорошие, но хочется добиться результата получше, т.к на практике модель всё-таки ошибается, но не часто. В ~80% случаев нейросеть классифицирует тональность текста правильно.
Ссылки
Комментарии (9)
Avot_Inet
19.02.2022 01:10Интересная идея, такой бот надо, пожалуй, довольно долго обучать, чтобы он улавливал нюансы. То есть если человека скопом доводит чат шутками, а потом он в ответ огрызается, то вроде самый токсичный он (если прям сильно огрызается), но, с другой стороны, другие над ним подшучивали до этого состояния, просто так, чтобы бот не понял. Фактически можно ведь натренировать даже на такое?
631052
19.02.2022 04:31при заданных вами вводных главный герой не токсичный ничуть.
даже если сильно, даже если матом и с упоминанием родителей.
при том, что скопом доводят.
таково мое мнение, а у бота может и другое.
ALiEN175
19.02.2022 04:08+27а может вам мою жопу натренировать надо? Чтоб пердела не вонюче, а музыкально?*
*оцените коммент на токсичность.
Токсикологи, мать-перемать, повылезали. На ИИ и ардуинке. Y Bac uu c yma couD3t, pre>|<De 4em rasparsit tekct =)
edo1h
19.02.2022 09:11+3В ~80% случаев нейросеть классифицирует тональность текста
то есть если я напишу 100 нейтральных сообщений, то вероятность того, что мои сообщения не сочтут токсичными 0.8¹⁰⁰ ≈ 0.0000000002?
и интересно насколько результат отличается от простого ранжирования ключевых слов
JTG
19.02.2022 22:16+2Хотелось бы увидеть определение "токсичности", хотя бы в виде выборки из обучающего датасета. А то щас под этим термином подразумевают кучу всего, вплоть до "он точки в конце предложений ставит, люди воспринимают это как пассивную агрессию".
ncr
20.02.2022 02:00+1Распознавание токсичных пользователей — несомненно, одна из приоритетнейших задач человечества.
aamonster
Влияние бота на состав сообщества изучали?
Я имею в виду не прямое влияние (те, кого бот забанит), а уход/приход людей под власть бота. Ну то есть кому нравится общаться на автоматически модерируемой площадке, а кому нет.
Особенно интересен был бы эксперимент с двумя аналогичными площадками, чтобы на одной люди знали, что их модерирует бот, а на другой думали бы, что решения принимает человек.
DenisIndenbom Автор
Влияние бота на состав сообществ я не изучал. Но будет интересно провести такой эксперимент.
P.S: Бот может банить, если администратор чата захочет(пропишет команду /set_ban_mode 1). Но основная функция бота всё-таки предупреждать админов.