Dostoevsky — анализ тональности в Python за 5 минут

Сегодня мы рассмотрим библиотеку для обработки естественного языка под названием Dostoevsky.

Введение

Для начала, давайте разберемся с терминологией. Определение тональности — это метод анализа речи в компьютерной лингвистике.

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

Позитивные: «Сегодня хорошая погода», «Я счастлив проводить с тобою время», «Мне нравится эта музыкальная композиция».

Негативные: «В больнице была ужасная очередь», «Сосед с верхнего этажа мешает спать», «Маленькая девочка потерялась в торговом центре».

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

Плюсы библиотеки

Причин на самом деле немного, опишу основные

  • Команда разработчиков является носителем русского языка, что соответственно гарантирует его лучшую поддержку.
  • Библиотека проста и внедрить ее в свои проекты не составит большого труда.
  • Отсутствие документации на русском языке. Мне хотелось бы тоже внести небольшой вклад в популяризацию обработки естественного языка.

Преследуемые цели

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

  • Фильтрация информационного потока. Я как и все потребляю очень много информации и 90% получаемой мной информации это — текст. Я стараюсь его агрегировать в один источник на электронную почту. Углубляться в методы получения информации в рамках этой статьи я не буду, но было бы хорошо сортировать эту информацию на позитивную, негативную и нейтральную. Такой метод фильтрации позволяет ограничивать мое психологическое состояние от получения неприятных новостей одним-двумя днями в неделю или вовсе избавление от него целиком.
  • Создание чат ботов. Большинство крупных компаний используют ботов для оптимизации расходов на клиентский сервис. Будь то это боты в социальных сетях или голосовые ассистенты в колл-центрах. Обработав негативную информацию ботом ее можно систематизировать и анализировать, выявляя узкие места в обслуживание, качестве и например логистики, кейсы для каждой компании сугубо индивидуальны и мест для внедрения очень много.
  • Фильтрация сообществ от токсичных участников. Наверняка каждый из нас состоит в чатах или быть может вы являетесь владельцем группы в социальных сетях, публичной страницы или же у вас свой блог с активной аудиторией в комментариях. Можно агрегировать информацию поступающую от участников и вести аналитику. Складывать все сообщения в базу, устанавливать пороговые значения для негативных высказываний и выводить средние значения. Далее вы можете на выбор автоматизировать действия с этими участниками, предупреждать их о том, что они создают негативный фон и это может плохо повлиять на активность сообщества, либо же принимать более радикальные меры — отключать пользователям возможность публикации или блокировать насовсем.

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

Установка

Официальная страница библиотеки находится в GitHub репозитории так же библиотеки представлена в репозитории PyPi и благодаря этому мы можем установить ее через пакетный менеджер pip

pip install dostoevsky
Сегодня мы рассмотрим библиотеку для обработки естественного языка под названием Dostoevsky.
процесс установки библиотеки Dostoevsky с помощью pip

В процессе устанавливаются все необходимые зависимости для работы библиотеки.

Установка RuSentiment

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

python3 -m dostoevsky download fasttext-social-network-model
Установка набора данных RuSentiment в библиотеку dostaevsky
Установка набора данных RuSentiment в библиотеку dostaevsky

Сегодня мы рассмотрим библиотеку для обработки естественного языка под названием Dostoevsky.

Поздравляю, теперь у нас установлена нейронная сеть с предобученным набором данных.

Использование

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

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

from dostoevsky.tokenization import RegexTokenizer
from dostoevsky.models import FastTextSocialNetworkModel

tokenizer = RegexTokenizer()
model = FastTextSocialNetworkModel(tokenizer=tokenizer)

messages = [
    'Сегодня хорошая погода',
    'Я счастлив проводить с тобою время',
    'Мне нравится эта музыкальная композиция',
    'В больнице была ужасная очередь',
    'Сосед с верхнего этажа мешает спать',
    'Маленькая девочка потерялась в торговом центре',
]

results = model.predict(messages, k=2)
for message, sentiment in zip(messages, results):
    print(message, '->', sentiment)

Запишем это в файл и давайте назовем его app.py

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

python3 app.py
dostoevsky run
Запуск нейронной сети

Результат работы приложения

  1. Сегодня хорошая погода -> {‘positive’: 0.9879562258720398, ‘negative’: 0.01323282066732645}
  2. Я счастлив проводить с тобою время -> {‘positive’: 0.5000100135803223, ‘skip’: 0.38492217659950256}
  3. Мне нравится эта музыкальная композиция -> {‘positive’: 0.9637899398803711, ‘neutral’: 0.21734751760959625}
  4. В больнице была ужасная очередь -> {‘negative’: 0.9903015494346619, ‘skip’: 0.1520422399044037}
  5. Сосед с верхнего этажа мешает спать -> {‘neutral’: 0.839743971824646, ‘negative’: 0.18714269995689392}
  6. Маленькая девочка потерялась в торговом центре -> {‘neutral’: 0.23935934901237488, ‘skip’: 0.1778208613395691}

Так же у меня есть группа ВКонтакте @yegorovegor. Обязательно подпишись!

Давайте разбираться по пунктам, что же у нас произошло.

Во первых, я угадал с позитивной интонацией, но вот с негативной ошибся))

Во вторых, значения ключей обозначают степень уверенности нейронной сети в правильности предсказания, максимально — 1.

В третьи — появился новый маркер речевых фраз «skip«. Он означает что нейронная сеть не смогла разобрать эту фразу и скорее всего там отсутствует эмоциональный контекст.

Еще существует маркер «speech» означающий разговорные фразы без эмоций. К примеру поздравления, приветствия и благодарности.

Заключение

Для тех кому понравилась статья и хочется что-то сделать самому — попробуйте сменить модель распознавания, в библиотеке есть обученая на проверку токсичности фраз, пройдите по тем же фразам, а результат опубликуйте в комментариях посмотрим что там получится.

close

Изучаешь Python?

Оформи подписку и получи моментальный доступ к новым публикациям

Обязательно прочитайте другие статьи посвященные языку программирования Python


GeekUniversity - обучение до уровня Middle с гарантированным трудоустройством


Добавить комментарий

Ваш адрес email не будет опубликован