Недавно столкнулся с задачей автоматического обнаружения настроений в финансовых новостях и захотелось поделится своими результатами. http://github.com/rsemenov/SentAnalizer
Небольшое вступление
Если назвать некоторые тексты как положительные, а некоторые как негативные, то возникает вопрос есть ли метод который учится характеристикам каждой из эмоции. В своей работе Pang, Lee and Vaithyanathan используют обзоры к фильмам для обучения алгоритма, который определяет настроение в тексте. Обзоры являются хорошим источником для такого рода работы потому что они четко выражают свое мнение, и сопровождаются цифровым рейтингом, что облегчает обучение алгоритмов на этих данных.
Но мы рассмотрим другую область: финансовые новости. Каждый день инвесторы получают немалый поток новостей о разных компаниях и организациях, на основе которых им приходится принимать те или иные инвестиционные решения. Эти решения влияют на рынки, что приводит к изменениям стоимости компаний и организаций. То есть происходит преобразование вербальной информации в числовую. Гипотеза эффективных рынков (The Efficient Markets Hypothesis) является формализация этого факта: рыночные цены немедленно реагируют на всю имеющуюся информацию, причем негативные новости отрицательно влияют на доходность рынка, положительные наоборот. Это позволяет нам выделить два класса (позитивные, негативные) к которым следует относить данную новость.
Bing Liu в своей работе предложил представление мнения или настроения в тексте как пятерку \( (o_{j}, f_{jk}, so_{ijkl}, h_{i}, t_{l}) \), где \( o_{j}\) - объект, \(f_{jk}\) - свойство объекта, \(so_{ijkl}\) - мнение i-го субъекта \(h_{i} \) про свойство \( f_{jk} \) объекта \( o_{j}\) в момент времени \(t_{l}, h_{i} \) - субъект, \(t_{l}\) - время, когда мнение было выражено. Но в сфере финансов мы имеем дело с фактами, а не с мнениями о свойствах объекта, поэтому нужно построить более подходящую модель.