Время прочтения: 2 мин.
Анализ настроений (Sentiment analysis) — это распространенная задача NLP, которая направлена на то, чтобы определить настроение по тексту. Для английского языка существует множество готовых моделей, которые обучены по Твиттеру и КиноПоиску. Однако, для русского языка всё сложнее, так как данных не так много.
Для русского языка есть очень удобная библиотека на языке Python — Dostoevsky, которая показывает достаточно хорошие результаты (модель была обучена на наборе данных RuSentiment).
Библиотека классифицирует текст на 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.
Таким образом, буквально в несколько строчек мы смогли правильно определить настроение.