Аналіз настрою для Twitter у Python [закрито]


87

Я шукаю реалізацію з відкритим кодом, бажано в python, для аналізу текстових настроїв ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Хтось знайомий з такою реалізацією з відкритим кодом, яку я можу використовувати?

Я пишу програму, яка шукає в Twitter якийсь пошуковий термін, скажімо "youtube", і враховує "щасливі" твіти та "сумні" твіти. Я використовую аппенгін Google, тому він на python. Я хотів би мати можливість класифікувати повернені результати пошуку з твіттера, і я хотів би зробити це в python. Дотепер мені не вдалося знайти такий аналізатор настрою, зокрема не в python. Чи знайомі ви з такою реалізацією з відкритим кодом, яку я можу використовувати? Переважно це вже є в python, але якщо ні, то, сподіваюся, я можу перекласти його на python.

Зауважте, тексти, які я аналізую, ДУЖЕ короткі, це твіти. Тож в ідеалі цей класифікатор оптимізований для таких коротких текстів.

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

Дякую!

До речі, ранні демо тут і код , який я до сих пір тут , і я хотів би OpenSource його з будь-якою зацікавленою розробником.

Відповіді:


44

У більшості подібних програм вам доведеться розгортати більшу частину власного коду для завдання статистичної класифікації. Як припустила Лучка, NLTK є ідеальним інструментом для маніпулювання природною мовою в Python, якщо ваша мета не заважає некомерційному характеру її ліцензії. Однак я б запропонував інші програмні пакети для моделювання. Я не знайшов багато сильних вдосконалених моделей машинного навчання, доступних для Python, тому я пропоную кілька автономних двійкових файлів, які легко співпрацюють з ним.

Вас може зацікавити Набір інструментів для вдосконаленого дискримінаційного моделювання , який можна легко пов’язати з Python. Це було використано для класифікаційних завдань у різних сферах обробки природної мови. Ви також можете вибрати кілька різних моделей. Я б запропонував розпочати з класифікації "Максимальна ентропія", якщо ви вже знайомі з реалізацією класифікатора Naive Bayes. Якщо ні, можливо, ви захочете розглянути її та закодувати, щоб справді глибоко зрозуміти статистичну класифікацію як завдання машинного навчання.

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

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

Удачі вам у виконанні завдання. Справжньою складною частиною, мабуть, буде обсяг інженерії знань, необхідний для того, щоб ви класифікували "набір насіння", з якого вивчить ваша модель. Він повинен бути досить значним, залежно від того, чи робите ви двійкові класифікації (щасливі проти сумні) або цілий спектр емоцій (що вимагатиме ще більше). Не забудьте витримати деякі з цих інженерних даних для тестування, або запустіть десять разів або видаліть один тест, щоб переконатися, що ви насправді добре виконуєте прогнозування, перш ніж викласти їх там. А найбільше - весело! На мою думку, це найкраща частина НЛП та ШІ.


Дякую. Я роблю це лише вночі, тому ... це займе деякий час, але я опублікую оновлення, коли буду щось готове
пробіг

7
NLTK код доступний під Apache License 2.0 згідно nltk.org/faq
Amit

1
Чому ви кажете, що Века призначена для педагогічних цілей? Хіба це не частина pentaho BI Suite? А пентахо справді обслуговує підприємства.
Swapnil 02

77

Удачі вам у цьому.

Сентимент надзвичайно контекстуальний, а культура твітування погіршує проблему, оскільки вам не дають контексту для більшості твітів. Вся суть твіттера в тому, що ви можете використовувати величезну кількість спільного контексту "реального світу", щоб упакувати значущі комунікації у дуже короткі повідомлення.

Якщо вони кажуть, що відео погане, це означає погане чи погане ?

Одного разу професор лінгвістики читала лекції для свого класу. "В англійській мові, - сказала вона, - подвійний негатив утворює позитив. Однак у деяких мовах, наприклад, у російській, подвійний негатив все ще є негативом. Однак немає мови, в якій подвійний позитив може утворювати негатив".

З задньої частини кімнати пролунав голос: "Так ... добре".


4
Я радий, що ви отримали корисну відповідь, оскільки в іншому випадку мені, можливо, довелося б підтримати вас лише за цю цитату. :-)
Бен Бланк

2
Я думаю, що цитата була "так так" - від Сідні Моргенбессера
Скотта Вайнштейна

19

Дякую всім за ваші пропозиції, вони справді були дуже корисними! У підсумку я використав наївний байєсівський класифікатор, який я запозичив тут . Я почав із того, що подав його зі списком хороших / поганих ключових слів, а потім додав функцію "вивчити", використовуючи відгуки користувачів. Виявилось, це працює досить приємно.

Повна інформація про мою роботу, як у дописі в блозі .

Знову ж таки, ваша допомога була дуже корисною, тож спасибі!


1
посилання на допис у блозі вже не працює, чи можете ви його оновити?
Petrutiu Mihai,

Привіт @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')коді відсутнє a (з педагогічних причин).


"Posterous Spaces більше недоступний" Чи можете ви розмістити десь код python?
andilabs

1
Дякуємо, що зауважили. Зараз я змінив позитивне посилання на посилання на Wordpress, куди я переніс свій блог.
Finn Årup Nielsen

Не могли б ви сказати щось про будь-які експерименти з вашими сентиментальними словами? Я маю на увазі те, що було точністю, згадуванням класифікації.
andilabs

1
У мене є посилання на кілька оцінок тут: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Я сам не оцінював його ефективність з точки зору точності, відкликання та класифікації. Те, що я зробив, це кореляція рейтингу з маркуванням твітів Amazon Amazon Mechanical Turk.
Finn Årup Nielsen

10

Багато дослідницьких робіт вказують на те, що гарною відправною точкою для аналізу настроїв є розгляд прикметників, наприклад, це позитивні прикметники чи негативні прикметники. Для короткого блоку тексту це майже ваш єдиний варіант ... Є статті, які розглядають цілі документи або аналіз рівня речень, але, як ви говорите, твіти досить короткі ... Немає справжнього магічного підходу до розуміння почуття речення, тому я думаю, що найкращим варіантом було б виявити одну з цих дослідницьких робіт та спробувати отримати їхній набір позитивно / негативно орієнтованих прикметників.

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

Удачі.


Проклятий, я збирався випередити тебе.
Dana The Sane

4

Я думаю, вам може бути важко знайти те, що ви шукаєте. Найближче, що мені відомо, - це LingPipe , який має певну функціональність аналізу настроїв і доступний під обмеженим видом ліцензії з відкритим кодом, але написаний на Java.

Крім того, системи аналізу настроїв, як правило, розробляються шляхом навчання системи даних про огляд продуктів / фільмів, яка значно відрізняється від середнього твіту. Вони будуть оптимізовані для тексту з кількома реченнями, все про одну і ту ж тему. Я підозрюю, що вам краще було б самостійно розробити систему, засновану на правилах, можливо, засновану на лексиці таких термінів, як той, який надає Пітсбурзький університет .

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



1

Можливо, TextBlob (на основі NLTK та шаблону) є правильним інструментом аналізу настроїв для вас.



0

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

Отримавши цю грубу класифікацію, ви можете шукати більше підказок за допомогою частотного аналізу, аналізу ngram або чогось подібного.

Це може здатися безглуздим, але з цим було проведено серйозні дослідження (пошук "аналізу настроїв" та смайликів). Варто подивитися.



0

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.