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

Анализ тональности в Python с помощью Dostoevsky Статьи

Подпишись на мой канал в Telegram

Сегодня мы рассмотрим библиотеку для обработки естественного языка под названием 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

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

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

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

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

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}

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

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

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

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

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

Заключение

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

close

Бесплатная подписка

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

Вступи в мою группу ВКонтакте

Егор Егоров

C 2017 года сижу на игле Python. Люблю создавать контент, который помогает людям понять сложные вещи. Не представляю жизнь без спорта и чувства юмора.

Если не сложно, напиши комментарий, как тебе статья.

Оцените автора
Егоров Егор
Добавить комментарий

  1. Светлана

    Прочитала до конца. Отличная статья, очень информативная

    Ответить
  2. шура

    прикольна конечно только, » я нейронная сеть» надо в кавычки

    Ответить
  3. Игорь

    Супер

    Ответить