Обновить

Комментарии 6

@Tumbao, извиняюсь мисскликнул и отклонил комментарий.

Спасибо за отличный и очень правильный вопрос. Вы абсолютно правы, исторически RNN/LSTM — это "золотой стандарт" для работы с последовательностями, и это был первый подход, который я рассматривал.

Однако для задачи классификации целого текста (а не, скажем, sequence-to-sequence перевода) архитектуры на базе CNN (в частности, 1D-сверток) показывают себя на удивление хорошо, и у них есть несколько ключевых преимуществ, которые для меня были решающими:

  1. Параллелизм и скорость: В отличие от рекуррентных сетей, которые должны обрабатывать текст последовательно, слово за словом, свертки могут обрабатывать все n-граммы в тексте параллельно. Это делает и обучение, и инференс значительно быстрее.

  2. Извлечение ключевых признаков: Идея в том, что свертка работает как "детектор n-грамм". Она "скользит" по тексту и ищет ключевые комбинации слов ("ты ведешь себя как", "полный дурак"), которые являются сильными сигналами токсичности, независимо от их положения в предложении. Для задачи классификации этого часто бывает более чем достаточно.

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

Этот подход — не моя выдумка, а хорошо известный метод, который был популяризирован, например, в статье Yoon Kim "Convolutional Neural Networks for Sentence Classification".

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

Надеюсь, я смог прояснить ход своих мыслей! Еще раз спасибо за интересный вопрос.

Я, к сожалению, мало что понял в этой статье ввиду своей неопытности, однако читать её было очень интересно.

Надеюсь, через год я смогу понять всё, что здесь написано...

А почему не Transformer или вообще экзотика в виде семейства NEAT?

Спасибо за вопрос! Все дело в целях проекта. Главной задачей было создание сверхлегкой (<10 МБ) и быстрой модели для CPU. CNN — это проверенный и самый эффективный инструмент именно для этого. Трансформеры были бы слишком тяжелыми, а нейроэволюция (NEAT) — избыточно сложной для такой классической задачи.

Тема очень интересная. Я не настоящий сварщик, но что-то результаты вообще не впечатляют :

Модель находит только 54% всего токсичного контента. Она "бдительна" лишь наполовину.

Precision: 0.66 (Точность): Когда модель бьет тревогу, она права в 66% случаев. Примерно в 1 из 3 случаев это будет ложная тревога.

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

С одной стороны да, регулярках и прочем написать. Но в лоб это будет ловить прямые токсичные, а комментарии "Не могли бы вы альтернативно одарённый сударь, пройти в то место, где у африканца не светит Солнце?" не поймает, для таких проще NLP.

А в целом, статья от/на вдохновении. Пришла идея - сделал - получилось - поделился, может быть кому-нибудь в чём-нибудь поможет

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации