Как мы учили машину распознавать посты противников вакцинации +5



В Тинькофф—журнале вышла статья «Что и зачем пишут в интернете противники вакцинации», в которой мы рассказали о результатах исследования почти трёх миллионов постов и комментариев из ВКонтакте на тему вакцинации. Самая сложная часть работы — определить, как авторы сообщений относятся к прививкам. В этой статье мы хотим рассказать о том, как мы это делали.

Общее количество постов и комментариев со словом "вакцина"
Общее количество постов и комментариев со словом "вакцина"

У трёх миллионов постов почти невозможно вручную определить отношение их авторов к вакцинации. На то, чтобы разметить выборку из 10 тысяч текстов, у нас ушло примерно 50 часов. Такими темпами весь корпус мы бы размечали 15 тысяч часов! Можно было бы отдать разметку на аутсорс, но мы пошли по более дешёвому и быстрому пути — использовали машинное обучение.

Классификация — это один из методов машинного обучения, и одна из стандартных задач обработки естественного языка: она применяется для того, чтобы распознать, например, негативные или позитивные отзывы, популярные темы в соцсетях или спам в почте. 

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

Разбивка постов
Разбивка постов

Полярность мнений по поводу вакцин оказалась велика: существует целая шкала, где на одной стороне находятся те, кто крайне негативно относится к идее «колоть себе эту гадость» , а на другой — те, кто считает, что «вакцинация – один из самых эффективных методов борьбы с эпидемиями, который есть у нашей цивилизации». Между двумя полюсами расположено множество групп: те, кто не против вакцинации, но против посягательства на личную свободу со стороны государства; те, кто согласен привиться, но зарубежной вакциной; те, кто привился, но не хочет вступать в полемику на столь чувствительную тему. 

Однако сообщений, в которых вакцину прямо-таки хвалили, в интернете оказалось немного. Так немного, что мы начали относить к про-вакцинной группе посты тех, кто ничего не написал о самой вакцине, но из контекста было ясно, что человек привился. Мы отнесли к этой группе даже тех, кто упоминает, что вакцины нет в их районной поликлинике или медучреждении — это указывает на то, что человек хотел привиться. Тем не менее, анализа различий в аргументах сторонников и противников вакцинации у нас бы просто не получилось — постов, где ярко выражено позитивное мнение относительно вакцинации, было очень мало. Кроме того, сообщения сторонников вакцин плохо поддавались автоматической классификации.

По итогам ручной разметки обучающей выборки мы получили следующее соотношение записей:

Распределение классов публикаций по итогам ручной разметки
Распределение классов публикаций по итогам ручной разметки

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

Очистка данных

При ручной разметке мы заметили, что в данных содержится существенная доля нерелевантных постов: сообщения о вакцинации животных от различных заболеваний, информация от турагентств. От таких постов нашу выборку точно следовало очистить. 

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

Примеры текста до очистки
Примеры текста до очистки

Первым шагом мы удалили нерелевантные символы, слова и посты. Из исходных данных мы убрали всё, что не несет дополнительной информации — пунктуацию, теги пользователей, числа, латинские слова, ссылки, служебные символы. Также мы убрали посты, которые содержали меньше 40 символов: часто это были неинформативные записи, по которым невозможно было определить мнение автора без полного контекста.

Убираем служебные символы (теги пользователей в квадратных скобках) при помощи регулярных выражений:

Убираем пропуски в столбце [‘text’]:

Убираем слишком короткие неинформативные посты до 40 символов:

Убираем знаки препинания, числа, лишние пробелы, латинские слова. Также подготовим список стоп-слов русского языка для дальнейшей очистки текстов. Стоп-слова – это часто повторяющиеся слова, которые не несут смысла для модели, так как повторяются во всех текстах: предлоги, союзы, междометия. В некоторых библиотеках уже есть есть готовые списки стоп-слов — мы воспользовались списком из библиотеки NLTK:

Мы убрали также посты, которые определили как нерелевантные на этапе ручной разметки. Мы сделали это простым исключением строк, которые содержат ключевые слова «кошка», «собака», «родословная», «передержка» и «турагенство», «все включено».

Очищенные тексты мы сохранили отдельно. Пример такого текста:

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

В русском языке одно и тоже слово может иметь множество форм — число, падеж, род. Такое многообразие мешает поиску самых популярных слов, и, соответственно, изучению контекста массива сообщений. Перед тем, как применять машинное обучение, мы привели все слова к начальному виду. Для этого мы использовали следующие операции:

Исходная строка:

@id197263123, За побочки и смерти людей после этой непроверенной жижи!

Очистили от знаков препинания, латиницы и лишних символов:

За побочки смерти людей после этой непроверенной жижи

Привели к нижнему регистру:

за побочки смерти людей после этой непроверенной жижи

Разбили предложение на слова (это называется токенизация):

за, побочки, смерти, людей, после, этой, непроверенной, жижи

Привели все слова к начальной форме (лемматизация):

за, побочки, смерть, люди, после, это, непроверенный, жижа

Каждое сообщение из столбца ‘text_prep’ мы разбили на слова (токенизировали) при помощи функции word_tokenize из библиотеки NLTK, отфильтровали по списку стоп-слов и собрали заново в строки в столбце ‘text_sw’:

Вот пример текста из столбца ‘text_sw’:

Для лемматизации мы использовали русскоязычную библиотеку PyMystem3 от Яндекса. Лемматизированные тексты сохранили в новый столбец [‘text-lemm’].

Сравните написание слов в столбцах [‘text_sw’] и [‘text_lemm’]:

Обучение модели

После первых двух этапов мы получили набор токенов для каждого сообщения, а также результаты ручной классификации 10 тысяч постов. Все сообщения получили один из следующих классов:

0

антивакцинационный

1

провакцинационный

2

нейтральный

3

нерелевантный

Для оптимального результата мы тестировали работу нескольких алгоритмов классификации. Подробнее рассмотрим два из них — Naive Bayes Classifier и Logistic Regression.

Вместе с каждым из алгоритмов мы использовали CountVectorizer и TfidfTransformer из библиотеки scikit-learn для того, чтобы представить текст в понятном для алгоритмов виде, а также тестировали два сценария классификации: с выделением трех классов сообщений (против вакцин, за вакцины и остальные) и двух классов сообщений (против вакцин и остальные). Ни один из результатов разбиения на три класса не оказался приемлемым, поэтому мы рассмотрим только результаты разбиения на два класса.

Перед началом обучения модели мы выделили в отдельные переменные признаки — X — и целевую переменную — Y. Признаки — это данные, которые нужны модели для того, чтобы научиться предсказывать значения. В нашем случае это столбец [‘text_lemm’], в котором хранятся приведенные к начальной форме тексты. Целевая переменная — это то, что мы хотим получить в результате работы модели, то есть, класс поста: написан он противником вакцинации или нет.

Сообщения, которые мы разметили вручную, мы разделили на обучающую и тестовую выборки. Обучающая выборка нужна для того, чтобы научить модель угадывать отношение автора поста к вакцинации, а тестовая — для того, чтобы проверить, насколько адекватно модель её угадывает.

Далее рассмотрим несколько алгоритмов машинного обучения и несколько вариантов подготовки данных для них. 

  1. Naive Bayes Classifier (Наивный Байесовский Классификатор)

Задали алгоритм для модели (по умолчанию векторизатор CountVectorizer работает с униграммами — отдельными словами):

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

Посчитали метрики качества модели:

Видим, что модель плохо себя показывает на «анти»-постах: показатель recall равен 0,37. Это значит, что из всех постов, которые были вручную размечены как «антивакцинационные», она смогла определить правильно всего 37%.

Эту же модель мы протестировали и для биграмм — сочетаний из двух слов. Такие сочетания позволяют сохранить связь между словами. Например, из текста «никто не может заставить человек делать прививки», можно получить следующие биграммы: «никто не», «не может», «может заставить», «заставить человек», «человек делать», «делать прививки».

Видим, что качество модели даже ухудшилось по сравнению с первым вариантом, показатель recall опустился до 20%.

2. Logistic Regression (Логистическая регрессия).

Посмотрим на результаты модели Logistic Regression (Логистической регрессии).

Униграммы:

Видим, что логистическая регрессия показала себя гораздо лучше Наивного Баейсовского классификатора на униграммах. Посмотрим, каких результатов нам удалось добиться при тестировании с точностью до биграмм.

При тестировании модели Логистической Регрессии с точностью до биграмм мы получили показатель Accuracy (Точность) = 0.75 — это означает, что в 75% случаев модель смогла верно распределить посты на группы в сравнении с ручной разметкой.

Параметр Precision отвечает на вопрос: какая часть текстов, которые были классифицированы в определенную группу, действительно принадлежит этой группе. В нашем случае 67% текстов, которые модель определила как антивакционные действительно являются антивакцинационными, и 81% «остальных» (не антивакционных) текстов действительно являются не антивакцинационными. 

По параметру Recall можно оценить сколько постов из тех, которые действительно являются антивакцинационными, наша модель смогла определить как таковые. В целом и здесь мы получили достаточно хорошие результаты — модель определила 71% антивакцинационных и 78% не антивакционных постов.

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

Выводы

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

Примеры правильно размеченных постов:

text

class

Он поймал коронавирус? Ну всё, теперь мы в безопасности, уносите вакцины????

OTHER

Мда! До многих так и не дошло что всё это бизнес. На людях зарабатывают миллиарды. Прививают и тестируют вакцину на людях как на лабораторных мышах. Типа вакцина спасёт! Капец! Жертвы рекламной проплаченой пропаганды. А теперь ещё и принуждают.

ANTI

Источник:

https://vk.com/yaminecifra

ГМО вакцина это отсроченная смерть через 6-12 месяцев.

ANTI

Кто там хочет ширнуться легендарной вакциной,бегите на площадь. Там вас уже ждут????????????анон

ANTI

Это вещество не является вакциной ,т.к. не имеет на нее государственной лицензии

ANTI

[id112739683|Елена], все вакцины «сырые», не только наша. Но все работают. Вся информация в открытом допуске. Берите, читайте, сравнивайте.

Прививают весь мир. Только в России недовольны. И от всех вакцин есть побочки. Всё индивидуально. Как и на все лекарства, например. Сравнивается риск. У меня, например, астма с детства. Практически во всех аннотациях пишут или противопоказания или с осторожностью. Сложно подобрать и сердечные препараты, сейчас ещё и спондилит… Ну что же мне теперь делать? Пью. На свой страх и риск.

OTHER

Однако не стоит забывать, что хотя этот метод и очень эффективен, в выборке так или иначе останется доля неправильно размеченных постов. В нашем примере согласно параметрам точности, модель ошибалась в четверти случаев. Субъективно этот параметр казался нам гораздо ниже, когда мы просматривали размеченный моделью датасет (в случайной выборке из 100 постов 85 размечено правильно). Тем не менее, важно помнить, что эти случаи существуют.

Примеры неправильно размеченных постов:

text

class

название, как и спутника, относит к иной реальности - социализму, но это ладно. а что в самой-то вакцине, нам поведают? антитела, и она стоит двенадцать тыс.? или лохмотья с пяти видов вирусов и бесплатно? надеюсь, оповестят.

OTHER

[id1356767|Алексей], я доверяю здравому смыслу, а не "подарочной" вакцине. И да, Вам тоже не хворать!

OTHER

[id617933105|Егор], вакцина -> большой риск заразиться - плохо

Заболеть -> заразиться 100% - хорошо

Ппц логика

ANTI

Московские правоохранители открыли настоящую охоту на продавцов поддельных справок и вакцинных сертификатов. Одно из таких мероприятий сотрудники МВД засняли и выложили в открытый доступ - тут полицейский в ходе контрольной закупки приобретает поддельную справку, освобождающую от прививки, якобы выданную врачом-аллергологом.

МВД предупреждает, что продажа и даже приобретение поддельных медицинских документов чревато уголовным преследованием и суровым наказанием вплоть до 2 лет лишения свободы.

ANTI

Как вакцина вообще влияет на репродуктивную функцию женщины?????‍♀А если уж сомневаетесь, то проконсультируйтесь с опытным гинекологом.

ANTI

Задача, которая перед нами стояла, оказалась сложной. Прежде всего, из-за того, что все сообщения трудно было разделить на два или три лагеря: мнений о вакцинах оказалось гораздо больше, и не все из них можно классифицировать однозначно. Однако даже с таким «разношёрстным» датасетом логистическая регрессия справилась неплохо.

Наш подход применим не только к сообщениям о вакцинации — при помощи машинного обучения можно искать домашнее насилие в судебных решениях, нелегальную добычу янтаря на картах и даже вычислять шпионские самолёты по их характеристикам. Для разных данных алгоритмы классификации могут давать различные результаты — стоит тестировать несколько из них, а не полагаться только на один. Улучшить результат модели также может дополнительная очистка и другие сочетания параметров классификаторов — например, в случае с текстом, можно передавать алгоритму как отдельные слова, так и сочетания слов.

Над статьей работали

Авторы: Елена Зубова, Яна Орлова.

Редакторы: Алексей Смагин.




Комментарии (43):

  1. nick1612
    /#23785577 / +30

    Пока мы вручную классифицировали десять тысяч постов и комментариев, выяснилось, что чёткого разделения на противников и сторонников вакцинации не существует.

    Если не секрет, после скольких тысяч прочитанных постов и комментариев на вас нашло столь гениальное озарение?

  2. AcidVenom
    /#23785603 / +15

    Как мы учили машину распознавать посты противников вакцинации

    А какую задачу вы этим решали?

    • iamFirst
      /#23785617 / +15

      Присоединяюсь к вопросу: а кто заказчик и спонсор исследования?)

      • iat
        /#23786261 / +23

        Недавно на одном СМИ, выполняющем функции иностранного агента была новость:

        Росздравнадзор начал вычислять антипрививочников в соцсетях и передавать их данные в прокуратуру и СК

        (дословно, заголовок)

        Жаль кармы не хватает оценить ваш труд по достоинству, ребят.

        • akhkmed
          /#23790719

          Примерно понятно, к чему Вы призываете аудиторию. Но автор проделал полезную работу. По тому семантическому ядру, которое он построил, можно не только сливать данные силовикам, но и проводить банальную модерацию на форумах или на том же Хабре.

          Мне, например, было интересно к какми образам и страхам аппелируют антипрививочники в дискуссиях, и пост даёт ответ на этот вопрос.

          Очень жду от автора больше статей о семантических ядрах.

      • BasiC2k
        /#23789127

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

    • novoselov
      /#23785719 / +7

      Видимо задача автоматической цензуры :)

    • amarao
      /#23785761 / +5

      Сделать ИИ-антиваксера. Чатбот, который изо всех сил отказывается вакцинироваться вакциной против жиро-кислотных размножающихся шариков, угрожающих здоровью кожанных мешков.

  3. OGR_kha
    /#23785693 / +4

    А теперь мы должны распознавать код на скринах.

  4. micbal
    /#23785703 / +1

    Авторы не уточнили, под вакциной имеется ввиду препарат прошедший все стадии предписанной проверки, чтоб получить название "вакцина"?

    • kAIST
      /#23786277 / +3

      Вы это, методичку что-ли обновите...

    • Djeux
      /#23786609 / +9

      В мире неожиданно появились миллионы специалистов по сертификации и тестированию фармакологической продукции. Такие кадры дома не диване пропадают!

      • micbal
        /#23786991 / +2

        Похоже, что не появились специалисты по сертификации, а исчезли. Я вопрос задал, а ответа нет. Ну кроме подобных ответов конечно, мимо темы вопроса.

  5. amarao
    /#23785747 / +6

    Я пытался вспомнить с чем всё это ассоциируется. С выставкой достижения санитарной техники. Как бы красиво, здорово, интересно, инновационно; но иногда накрывает осознание, что в центре каждой трубы by design будет находиться ... - и ты всё это с интересом разглядываешь.

    Вот примерно и тут такое же ощущение. Технологии прикольно, транспортируемое содержимое...

    • tark-tech
      /#23785811 / +24

      Скорее так - конструктор газовых камер и печей для концлагеря увлеченно рассказывает о своей работе и интересных решениях которые он применяет.

      Тут иногда спрашивают 'кто ж работает на власть' - так собственно вот он...

      • oq0po
        /#23786077 / +2

        Вот интересно: если человек хочет, но не может (нет нигде) вакцинироваться Ковиваком и не хочет Спутником, он кто в этой аналитике - ваксер, антиваксер или недоваксер?

        • Moskus
          /#23786109 / +5

          А это как разработчики решат.

          • oq0po
            /#23792795

            Скорее постановщики.

            Но меня интересовал ответ авторов статьи.

            • Moskus
              /#23792961

              По опыту подобных проектов, заказчики практически никогда не ставят задачу, описывая "как" - критерии вырабатывают сами разработчики. Заказчик обычно определяет только конечные категории (при том, достаточно расплывчато). Так что даже если бы у авторов статьи было желание и возможность ответить, на ваш вопрос у них всё равно конкретного ответа нет.

      • furtaev
        /#23786387 / +7

        Погодите, он же разрабатывает душевую. Приедут люди, много людей. Им после долгой дороги надо ведь будет помыться, сами понимаете.

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

        Ну нет так нет, странно конечно, но раз уж такое техзадание у заказчика, что поделаешь.

        • AcidVenom
          /#23786425 / -2

          Только вот никто им крестики на асфальте не нарисует в знак памяти, скорби и уважения. Не принято у нас.

    • Moskus
      /#23785991 / +1

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

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

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

      Занятно вписалось упоминание распознавания незаконной добычи янтаря и шпионских самолётов - в этих случаях, машинное обучение позволяет принять во внимание больше деталей, которые могут образовывать паттерн, чем это может сделать человек. А в случае анализа ключевых слов, большая часть критической для понимания тона информации оказывается, наоборот, выброшена.

      • Angeld
        /#23786071

        ну так компьютер и есть идиот

        не надо считать его разумным

        • Moskus
          /#23786105 / +2

          Компьютер - не разумен, потому к ним нельзя применять понятие "идиот", которое всё же относится к уровню развития человеческого интеллекта. Но многие формы того, что называют "искусственным интеллектом" чисто методологически эмулируют именно низшие формы интеллектуальной деятельности, напоминая этим мышление тех, кого люди называют идиотами.

    • apapacy
      /#23786079 / +4

      Скорее с выстоавкой орудий средневековой инквизщиции, там всякие испанский сапожок, железная дева.
      Подумываю написать манифест "разработчик не будь шакалом". Впрочем на Хабре уже не имеетсмысла.
      Хочу обратиться не ко всем а к умным разработчикам Тинков-банка. Не будьте шакалами. Если Вы грамотные и умные разраотики то без работы не останетесь. Пусть эту работу выполняют дураки. Будут долго ее выполнять.


      Кстати полное название статьи в журнале банка "Что и зачем пишут в интернете противники вакцинации. И насколько они успешны в своих попытках убедить других людей" Полнейшая чушь. Никого убеждать не нужно. Кроме проплаченных ботов никто не топит за вакцинацию. Да многие вынуждены были вакцинироватся по принуждению. И в этом особый цинизм, когда с эеранов телевизоров с ехидлной улыьочкной политки вещают что мы никого не заставляем вакцинироваться и тут же вводят QR-коды и запреты на профессию.


      Закончить коммент хочу актуальным уже много веков стихом Александра "Солнце Русской Поэзии" Пушкина
      Стыдить лжеца, шутить над дураком
      И спорить с женщиной — все то же,
      Что черпать воду решетом.
      От сих троих, избавь нас, Боже!


      Про женщин он конечно загнул. Сексисит штоле?

      • artschedrov
        /#23787421 / +1

        Поэтому каждый разработчик должен осознать что он несет ответственность за то что он создает, в разработке каких проектов и продуктов участвует. Каждый такой неэтичный проект это дополнительный кирпичек в цифровой концлагерь.

  6. Elsajalee
    /#23786075 / +7

    Интересно не столько "как", а "зачем" и за чей счёт банкет.

  7. Rive
    /#23786257 / +11

    Через три дня сбора биг даты выяснилось, что нейросети не выкупают иронию.

  8. AlexTroshkin
    /#23786433 / +3

    А сможете распознать статьи которые пишутся с целью манипулирования сознанием населения?

    • mentin
      /#23786613 / +5

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

      https://medium.com/dfrlab

  9. bak
    /#23786579 / +2

    Так как вы не смогли отличить противников от сторонников и сравнивали противников с нейтральными - получившиеся выводы вполне себе капитанские.

    Логично что те кто пытаются что-то доказать будут вести себя примерно так как ведут. Было бы интересно сравнить именно ярых противников и ярых сторонников.

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

    • Moskus
      /#23786653 / +1

      Какие еще "аргументы" - тут одни ключевые слова анализируются.

  10. gus26
    /#23786733 / +5

    Стоило бы уточнить, собственно, есть антипрививочники, которые против ЛЮБЫХ прививок. А есть те, кто сомневается в эффективности именно "скрепных" вакцин против ковида...

    Так кого сдавать СК будет ИИ в итоге???

  11. ibrin
    /#23786803 / -3

    Шикарно! По результатам надо делать кросспостинг среди единомышленников и приглашать в одну из трех групп. Время объединяться!

  12. hp6812er
    /#23787611 / -4

    ВОЗ упорно не признает самую лучшую и первую на планете вакцину.

    И теперь тех, у кого есть прививки от кори, полиомелита, пневмококовой инфекции, гриппа, наконец, будут как крыс искать по соц сетям навешивая ярлыки - звезды "антиваксер"!

    Первый раз захотелось минусануть в карму...

  13. vis_inet
    /#23788135

    Похоже, что у авторов нет желания отвечать на комментарии.

    • Moskus
      /#23788883

      Это стандартная ситуация. Многие, публикующие здесь статьи не от себя, а от организации, не только не хотят, но и не могут этого делать.

  14. kinzoid
    /#23789313

    "одно и тоже слово".
    проверку орфографии это машинное обучение не пройдет.

  15. loderunner84
    /#23789447 / +5

    Скоро на хабре: "Как мы учили нейросеть лица недовольных в толпе определять".

    • propulsive
      /#23790457

      "Если беспорядки уже начались, искусственный интеллект будет анализировать поведение толпы и рекомендовать силовикам порядок действий." Источник: https://www.kommersant.ru/doc/5099759

  16. transcengopher
    /#23793911

    А если я за вакцинацию, но против принуждения к вакцинации государством, то вашу модель в бублик завернёт? Или я буду гордым носителем обеих меток сразу?