Задать вопрос

Как улучшить анализ тональности текста на русском языке?

Требуется произвести анализ тональности текста на множестве пользовательских комментариев определенной тематики. На данный момент принято решение проводить классификацию по трем классам — негативной, нейтральной и позитивной тональности. Для исследования алгоритмов вручную размечено 1500 комментариев. Размеры классов в тестовой выборке отличаются не более, чем в два раза. По примеру зарубежных коллег был применен метод опорных векторов в пространстве бинарных признаков, обозначающих наличие слов в комментариях. Правильность классификации составляет менее 60%. Анализ тональности английских текстов показывал эффективность в 80%.


Одна из предположительно значимых проблем — многочисленные ошибки в комментариях, как орфографические, так и грамматические. Существнна также бОльшая сложность русского языка. И малое количество открытых инструментов для анализа русского языка. Код пишу на Python, удалось найти только реализацию стеммера Портера, а также библиотеку анализа морфологии pymorphy.


Буду признателен советам любого рода. Есть ли другие удобные и проверенные инструменты для анализа русского языка желательно с реализацией на Python? Правилен ли выбор SVM, как алгоритма классификации, может есть более эффективные классификаторы? Известны ли более эффективные пространства признаков?
  • Вопрос задан
  • 8808 просмотров
Подписаться 14 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
@lightcaster
Занимался этим по работе. Попробуйте:
— svm с линейным ядром
— (1,2,3)-граммы как фичи
— нормализуйте текст, но попробуйте оставить некоторые знаки препинания — !?
— работал с английским, там стеммер не улучшал качество. На русском нужно пробовать, но не удивлюсь, если не сработает.

Кроме этого можете поиграться с различными преобразованиями на векторах. Мне не помогло, хотя теоретически должно было бы. Может, что-то неверно сделал. Попробуйте LSA (pLSA если словарь большой).

Замечания:
— хороший корпус очень важен
— выбор фич важен
— орфография не имеет сильного эффекта
— исключение стоп-слов также не улучшало качества
— действительно, иронию, двусмысленность выловить таким методом очень тяжело; при попытки поймать длинные связи снижается качество

Если захотите экстрима — можно попробовать какой-нибудь классификатор со строковым ядром. Я пробовал, не пошло. Но теоретически может получится.
Ответ написан
Комментировать
Irokez
@Irokez
Про классификатор:
SVM часто используется для анализа тональности текста, так что выбор правильный. Точного ответа, какой алгоритм классификации будет работать лучше — нет, поэкспериментируйте с разными алгоритмами и выберите тот, который даст лучшие результаты. Навскидку, предложу Naive Bayes и MaxEnt.

Про признаки:
Как вам правильно предложили выше — попробуйте биграммы, а также попробуйте 2-3-4 буквенные граммы, это может помочь с проблемой орфографии. По поводу построения вектора, есть более эффективные функции простановки веса для признаков чем бинарная. Я использую обычно delta tf-idf. В качестве дополнительных признаков можете попробовать морфологические теги (part-of-speech tag), бывает, что помогают. Также иногда помогают комбинация слов с тегами (напр: я-местоимения, люблю-глагол, чай-сущ.)

Про данные:
1500 комментариев — это тестовая выборка или данные для обучения модели? Или же все вместе? Для обучения вам понадобится гораздо больше данных. В зависимости от тематики их можно собрать с определенных сайтов (если фильмы, то, например, кинопоиск).

Также можете составить тональный словарь, список слов с их значением тональности (affective lexicons). Либо вручную, либо перевести с других языков (напр. с английского) — вручную либо автоматически, либо одним из методов автоматического составления словаря тональности. В целом, задача классификации на три класса достаточно сложная. Попробуйте сперва сделать для двух классов, а затем уже либо добавить доп. классификатор либо расширить модель для трех классов. Тут много вариантов. Удачи!
Ответ написан
@kmike
Предупреждаю: опыта практического у меня тут нет.

Можно лекции посмотреть вот тут: class.coursera.org/nlp/lecture/preview (Sentiment Analyzis). Критичной штукой во всем этом деле, насколько понимаю, является определение отрицания (нравится vs не нравится), что с подходом «bag of words» сделать нельзя. Для английского языка работают достаточно простые подходы («ко всем словам, стоящим после отрицательного слова ('не', например), приписывать „-“, пока не встретится знак препинания — и уже к обработанным таким образом словам применить классификацию через bag of words»).

Наибольшее влияние на результат должен оказывать выбор фич для классификации (классификатор SVM vs что-то другое — +- несколько процентов максимум будет).

Вот еще бумага по теме, может быть полезной: www.dialog-21.ru/digests/dialog2011/materials/ru/pdf/50.pdf
Ответ написан
@ilya_volodin
Интересная головоломка. Я вот в Скайпе с женой переписывался. И она обиделась. Фразу которую я написал я бы произнес очень позитивно (и когда ее писал так и думал), а вот она прочитала ее очень негативно, я потом и сам перечитал, и действительно можно и так и так понять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы