Анализ тональности Twitter на Python [закрыто]

87

Я ищу реализацию Textual Sentiment Analysis с открытым исходным кодом, предпочтительно на python ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Кто-нибудь знаком с такой реализацией с открытым исходным кодом, которую я могу использовать?

Я пишу приложение, которое выполняет поиск в твиттере по запросу, например «youtube», и считает «счастливые» твиты и «грустные» твиты. Я использую Google appengine, поэтому он на Python. Я хотел бы иметь возможность классифицировать возвращаемые результаты поиска из твиттера, и я хотел бы сделать это на python. Такого анализатора настроений мне пока найти не удалось, тем более в python. Вы знакомы с такой реализацией с открытым исходным кодом, которую я могу использовать? Желательно, чтобы это уже было на python, но если нет, надеюсь, я смогу перевести его на python.

Обратите внимание, тексты, которые я анализирую, ОЧЕНЬ короткие, это твиты. Так что в идеале этот классификатор оптимизирован для таких коротких текстов.

Кстати, твиттер поддерживает в поиске операторы ":)" и ":(", которые нацелены именно на это, но, к сожалению, предоставленная ими классификация не так хороша, поэтому я решил, что могу попробовать это сам. .

Благодарность!

Кстати, ранняя демонстрация здесь, и код, который у меня есть, здесь, и я хотел бы открыть его исходный код любому заинтересованному разработчику.

Ран
источник

Ответы:

44

В большинстве приложений такого типа вам придется использовать собственный код для выполнения задачи статистической классификации. Как предположил Лука, NLTK - идеальный инструмент для манипуляции естественным языком в Python, если ваша цель не мешает некоммерческому характеру его лицензии. Однако я бы посоветовал другие программные пакеты для моделирования. Я не нашел много сильных продвинутых моделей машинного обучения, доступных для Python, поэтому я собираюсь предложить несколько автономных двоичных файлов, которые легко с ним взаимодействуют.

Возможно, вас заинтересует The Toolkit for Advanced Discriminative Modeling , который можно легко связать с Python. Это использовалось для задач классификации в различных областях обработки естественного языка. У вас также есть выбор из нескольких различных моделей. Я предлагаю начать с классификации максимальной энтропии, если вы уже знакомы с реализацией наивного байесовского классификатора. Если нет, вы можете изучить его и написать код, чтобы действительно получить достойное представление о статистической классификации как о задаче машинного обучения.

Группы компьютерной лингвистики Техасского университета в Остине провели занятия, на которых большинство проектов, вышедших из них, использовали этот замечательный инструмент. Вы можете посмотреть страницу курса по компьютерной лингвистике II, чтобы получить представление о том, как заставить его работать и какие предыдущие приложения он обслуживал.

Еще один отличный инструмент, который работает в том же духе, - это Mallet . Разница между Mallet в том, что там немного больше документации и доступно несколько моделей, таких как деревья решений, и он написан на Java, что, на мой взгляд, делает его немного медленнее. Weka - это целый набор различных моделей машинного обучения в одном большом пакете, который включает некоторые графические элементы, но на самом деле он в основном предназначен для педагогических целей, и я бы не стал его запускать в производство.

Удачи в решении вашей задачи. По-настоящему трудной частью, вероятно, будет объем инженерных знаний, необходимых вам заранее, чтобы классифицировать «исходный набор», на основе которого ваша модель будет учиться. Он должен быть довольно большим, в зависимости от того, проводите ли вы двоичную классификацию (счастливые или грустные) или целый ряд эмоций (что потребует еще большего). Обязательно сохраните некоторые из этих спроектированных данных для тестирования или запустите несколько тестов с десятикратным увеличением или удалением одного, чтобы убедиться, что вы действительно делаете хорошую работу по прогнозированию, прежде чем размещать их там. И, самое главное, получайте удовольствие! На мой взгляд, это лучшая часть НЛП и ИИ.

Роберт Элвелл
источник
Спасибо. Я делаю это только по ночам, так что ... это займет некоторое время, но я опубликую обновление, когда у меня что-то будет готово
Ран
7
NLTK код доступен под Apache License 2.0 согласно nltk.org/faq
Amit
1
Почему вы говорите, что Weka предназначена для педагогических целей? Разве это не часть пакета pentaho BI? И пентахо обслуживает предприятия.
Swapnil
77

Удачи с этим.

Настроения чрезвычайно зависят от контекста, а культура твитов усугубляет проблему, потому что вам не дают контекст для большинства твитов. Вся суть твиттера в том, что вы можете использовать огромное количество общего контекста «реального мира», чтобы упаковать значимое общение в очень короткое сообщение.

Если они говорят, что видео плохое, это значит плохое или плохое ?

Однажды профессор лингвистики читал лекции ее классу. «В английском языке, - сказала она, - двойное отрицание образует положительное. Однако в некоторых языках, например в русском, двойное отрицание все еще является отрицательным. Однако нет языка, в котором двойное отрицание может образовывать отрицательное».

Голос из дальнего конца комнаты раздался: «Да… хорошо».

MarkusQ
источник
4
Я рад, что вы получили полезный ответ, иначе мне пришлось бы проголосовать за вас только за эту цитату. :-)
Бен Бланк
2
Я думаю, это была цитата «да, да» - от Сидни Моргенбессера
Скотта Вайнштейна
19

Спасибо всем за ваши предложения, они действительно были очень полезны! В итоге я использовал наивный байесовский классификатор, который позаимствовал отсюда . Я начал с того, что снабдил его списком хороших / плохих ключевых слов, а затем добавил функцию «обучения», используя отзывы пользователей. Получилось неплохо работать.

Полная информация о моей работе как в сообщении в блоге .

Опять же, ваша помощь была очень полезной, так что спасибо!

Ран
источник
1
Ссылка на сообщение в блоге больше не работает, не могли бы вы ее обновить?
Петрутиу Михай
Привет, @PetrutiuMihai, действительно, этот блог был закрыт. Но это довольно старый материал, и на сегодняшний день он не является предметом исследований, так что вы мало что потеряете; (
Ран
14

Я составил список слов, помеченных сантиментами. Вы можете получить к нему доступ отсюда:

http://www2.compute.dtu.dk/pubdb/views/edoc_download.php/6010/zip/imm6010.zip

В моем блоге вы найдете короткую программу на Python:

http://finnaarupnielsen.wordpress.com/2011/06/20/simplest-sentiment-analysis-in-python-with-af/

В этом посте показано, как использовать список слов с отдельными предложениями, а также с Twitter.

Списки слов имеют свои ограничения. Вы найдете исследование ограничений моего списка слов в статье «Новый ANEW: оценка списка слов для анализа тональности в микроблогах». Эта статья доступна на моей домашней странице.

Обратите внимание, что unicode(s, 'utf-8')в коде отсутствует символ (по педагогическим причинам).

Финн Оруп Нильсен
источник
"Posterous Spaces больше не доступны" Не могли бы вы разместить где-нибудь код Python?
andilabs
1
Спасибо, что заметили это. Теперь я изменил постовую ссылку на ссылку Wordpress, куда я переместил свой блог.
Финн Оруп Нильсен
Не могли бы вы сказать что-нибудь о каких-либо экспериментах с освещением слов? Я имею в виду то, что было прецизионным, отзывом классификации.
andilabs 07
1
У меня есть ссылки на несколько оценок здесь: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Я сам не оценивал его работу с точки зрения точности, отзыва и классификации. Я сделал ранговую корреляцию с маркировкой твитов Amazon Mechanical Turk от Mislove.
Финн Оруп Нильсен
10

Многие исследования показывают, что хорошей отправной точкой для анализа настроений являются прилагательные, например, являются ли они положительными или отрицательными. Для короткого блока текста это в значительной степени ваш единственный вариант ... Есть статьи, в которых рассматриваются документы целиком или анализ на уровне предложений, но, как вы говорите, твиты довольно короткие ... Нет настоящего волшебного подхода к пониманию тональность предложения, поэтому я думаю, что вам лучше всего будет выследить одну из этих исследовательских работ и попытаться получить их набор данных положительно / отрицательно ориентированных прилагательных.

Как уже было сказано, тональность зависит от предметной области, и вам может быть трудно получить высокий уровень точности с набором данных общего назначения.

Удачи.


источник
Черт, я собирался тебя упредить.
Dana the Sane
4

Я думаю, вам будет сложно найти то, что вам нужно. Ближайшая вещь, о которой я знаю, - это LingPipe , который имеет некоторые функции анализа настроений и доступен по ограниченной лицензии с открытым исходным кодом, но написан на Java.

Кроме того, системы анализа настроений обычно разрабатываются путем обучения системы на данных обзора продукта / фильма, которые значительно отличаются от среднего твита. Они будут оптимизированы для текста с несколькими предложениями на одну и ту же тему. Я подозреваю, что вам лучше самому придумать систему, основанную на правилах, возможно, основанную на лексиконе эмоциональных терминов, подобных тому, который предоставляет Университет Питтсбурга .

Посмотрите We Feel Fine для реализации подобной идеи с действительно красивым интерфейсом (и twitrratr ).

Stompchicken
источник
1

Возможно, TextBlob (основанный на NLTK и шаблоне) - подходящий инструмент для анализа настроений.

Сонсон123
источник
0

Довольно дурацкая мысль: вы можете попробовать использовать Twitter API, чтобы загрузить большой набор твитов, а затем классифицировать подмножество этого набора с помощью смайлов: одна положительная группа для «:)», «:]», «: D» и т. Д. , и еще одна отрицательная группа с ":(" и т. д.

Как только у вас будет такая грубая классификация, вы сможете искать больше подсказок с помощью частотного анализа, анализа диаграмм или чего-то подобного.

Это может показаться глупым, но на этот счет были проведены серьезные исследования (поиск по запросу «анализ настроений» и смайлик). Стоит посмотреть.


источник
0

Существует API Twitter Sentiment от TweetFeel, который выполняет расширенный лингвистический анализ твитов и может извлекать положительные / отрицательные твиты. См. Http://www.webservius.com/corp/docs/tweetfeel_sentiment.htm

Евгений Осовецкий
источник
0

Для тех, кто интересуется написанием кода Twitter Sentiment Analyis с нуля, на GitHub есть курс Coursera « Наука о данных » с кодом Python (как часть задания 1 - ссылка ). Настроения являются частью AFINN-111 .

Вы можете найти рабочие решения, например, здесь . В дополнение к списку тональности AFINN-111 существует простая реализация построения динамического списка терминов на основе частоты терминов в твитах, имеющих оценку pos / neg (см. Здесь ).

Филшем
источник