Время прочтения: 2 мин.

Анализ настроений (Sentiment analysis) — это распространенная задача NLP, которая направлена на то, чтобы определить настроение по тексту. Для английского языка существует множество готовых моделей, которые обучены по Твиттеру и КиноПоиску. Однако, для русского языка всё сложнее, так как данных не так много.

Для русского языка есть очень удобная библиотека на языке Python — Dostoevsky, которая показывает достаточно хорошие результаты (модель была обучена на наборе данных RuSentiment).

          Библиотека классифицирует текст на 5 категорий:

  1. Негативное настроение;
  2. Позитивное настроение;
  3. Нейтральное поведение;
  4. речевой акт (формальные поздравления, благодарственные и поздравительные посты);
  5. Класс «пропустить» для неясных случаев.

Хэштеги и смайлики не считаются ярлыками настроения.

Пример использования библиотеки 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)

В результате выполнения кода получаем следующий результат:

титаник - отличный фильм -> {'positive': 0.9679093360900878, 'skip': 0.056662432849407196}
титаник - это фильм -> {'neutral': 0.8439050912857056, 'positive': 0.1294127255678177}
я люблю тебя!! -> {'positive': 0.9886782765388489, 'skip': 0.005394937004894018}
какой ужас, мне страшно -> {'negative': 0.9972950220108032, 'skip': 0.09010298550128937}

Из рисунка результатов видно, что сообщения «Титаник – отличный фильм» и «я люблю тебя!!» библиотека определила, как позитивные. Сообщение «Титаник – это фильм» как нейтральное и «какой ужас, мне страшно», как негативное.

Для классификации текстов мы просто передаём список с нашими фразами в метод predict.

Таким образом, буквально в несколько строчек мы смогли правильно определить настроение.