Как стать автором
Обновить

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

Спасибо за статью, а почему сравнивается с MNB, а не с RNN сетями, которые сильно лучше на данной задаче? было бы интересно посмотреть, как сильно проигрывает CNN (и проигрывает вообще)?
Далее с помощью библиотеки Gensim обучил Word2Vec-модель

А предобученные не пробовали юзать?
Добавил dropout-регуляризацию

после Embedding слоя «обычно» (на соревнованиях) юзают SpatialDropuot

P.S. А вообще, для углубления в тему, сравнительно недавно было соревнование по классификации комментариев на Wiki Toxic Comment Classification Challenge, местные кернелы просто кладезь по SotA текст классификации имхо, там и всякие RNN, и CNN (даже с Attention), и деревья,
и даже вроде капсульная (!) сеть была.
Спасибо за отзыв!
а почему сравнивается с MNB, а не с RNN сетями, которые сильно лучше на данной задаче?

Поскольку статья обзорно-вводная, я старался акцентировать внимание преимущественно на CNN, её архитектуре и обучении, а MNB взял как базовый подход для анализа тональности, хорошо себя зарекомендовавший в прошлом. Про сравнение CNN и RNN полностью согласен, особенно интересно было бы это рассмотреть в разрезе разного формата данных: длинные и короткие тексты, разговорная и литературная речь и т.д. Думаю, это отличная тема для ещё одной статьи.
На Хабре уже был материал по анализу тональности твитов с помощью LSTM, но там качество классификации измеряли только в точности (accuracy), поэтому не стал включать ее в статью для сравнения.

А предобученные не пробовали юзать?

Опять же из-за характера статьи, я хотел показать полную последовательность действий, в том числе построение семантической модели на текстах из предметной области. Если рассматривать более глубокий подход, то да, можно взять предобученную модель (к примеру, из проекта RusVectōrēs) и дообучить на своих данных.

местные кернелы просто кладезь по SotA текст классификации

Спасибо, обязательно ознакомлюсь. В новом SemEval-2019 есть схожие треки: по обнаружению ненависти и оскорблений.

Интересно, а можно ли так определять пассивно-агресивные фразы..

"Добавил в нейронную сеть по 10 свёрточных слоев для каждой высоты фильтра, функция активации — ReLU."


У вас там случайно не по 50 слоёв получилось?

Спасибо, исправил, должно быть по 10. Обучал модель именно с таким количеством слоев для каждой высоты.
Ради интереса попробовал повторить описанные действия (с меньшей предобработкой – только регистр к нижнему регистру привел и числа на токен заменил) для линейного SVM с униграммами, биграммами и триграммами – получил precision 0.784, recall 0.788, f1 0.786. Иногда простой путь далеко не худший.
Проверяли ошибку на неразмеченных твитах, какая она там?
ttype есть еще нейтральные вроде, может если сделать 3 класса и упростить модель (не вижу смысла в такой сложно если последовательная дает примерно ту же ошибку) — ошибка будет меньше?
И наконец самое наверно важное — в русском языке в отличие от английского одно и то же слово может быть токенизировано множеством вектором по вашему коду, так как есть суффиксы и окончания — может стоит сделать препроцессинг таких слов чтобы был один вектор для «велосипедом»,«велосипеде»,«велосипеде»,«велосипед». Возможно смещение это не изменит, но дисперсия снизиться.
Проверяли ошибку на неразмеченных твитах, какая она там?

Какую ошибку имеете в виду? Точность, полноту и F-меру там нельзя посчитать из-за того, что данные не размечены по классам тональности.

ttype есть еще нейтральные вроде, может если сделать 3 класса и упростить модель (не вижу смысла в такой сложно если последовательная дает примерно ту же ошибку) — ошибка будет меньше?

Касательно добавления еще одного класса, скорее всего, качество классификации упадет. Это подтверждется результатами соревнования SemEval-2017 Task 4: Sentiment Analysis in Twitter: при бинарной классификации (Subtask B) удалось достичь показателя точности (accuracy) 0.882, когда при классификации на три класса (Subtask A) максимальная точность составила лишь 0.681. При подведении итогов организаторы отметили, что такая разница преимуществено обусловлена разным количеством классов.
По поводу сложности модели, я хотел рассмотреть именно применение сверточных нейронных сетей. Обоснование выбранной архитектуры описал в разделе «Архитектура».

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

Да, я не рассматривал стемминг и нормализацию для уменьшения размера словаря, но упомянул их в заключении. Эти техники действительно могут увеличить качество работы классификатора.
Не могу полностью согласиться, что такой проблемы нет в английском языке. Все таки там тоже есть суффиксы и окончания, но их гораздо меньше, чем в русском. К примеру, там есть окончание s, указывающее на множественное число.
Крутая статья. Уверен, что в будущем все уважаемые компании будут такое юзать
Зарегистрируйтесь на Хабре, чтобы оставить комментарий