{"id":14274,"url":"\/distributions\/14274\/click?bit=1&hash=fadd1ae2f2e07e0dfe00a9cff0f1f56eecf48fb8ab0df0b0bfa4004b70b3f9e6","title":"\u0427\u0435\u043c \u043c\u0443\u0440\u0430\u0432\u044c\u0438\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0436\u043a\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c?","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"6fbf3884-3bcf-55d2-978b-295966d75ee2"}

Dostoevsky: библиотека анализа настроений для русского языка

Анализ настроений (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.

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

0
1 комментарий
Кинес Кизиитов

"Однако, для русского языка всё сложнее, так как данных не так много." 
- нет, данных как раз более, чем достаточно. А вот четкой семантической методики нет, несмотря на то, что уже 20 лет крупнейшие отечественные игроки на этом рынке пытаются ее изобрести. В русском языке слишком много подтекстов, интонирования и пр. + строение языка и его грамматика сильно отличаются от "логического" инглиша с его короткими словами и предложениями, понятной ИИ логикой построения и считывания смыслов. 

Ответить
Развернуть ветку
-2 комментариев
Раскрывать всегда