Analisi del sentiment per Twitter in Python [chiuso]


87

Sto cercando un'implementazione open source, preferibilmente in python, di Textual Sentiment Analysis ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Qualcuno ha familiarità con tale implementazione open source che posso usare?

Sto scrivendo un'applicazione che cerca su Twitter un termine di ricerca, ad esempio "youtube" e conta i tweet "felici" rispetto a quelli "tristi". Sto usando l'appengine di Google, quindi è in Python. Mi piacerebbe essere in grado di classificare i risultati della ricerca restituiti da Twitter e mi piacerebbe farlo in Python. Finora non sono stato in grado di trovare un analizzatore di sentimenti di questo tipo, in particolare non in Python. Hai familiarità con tale implementazione open source che posso usare? Preferibilmente questo è già in python, ma se no, spero di poterlo tradurre in python.

Nota, i testi che sto analizzando sono MOLTO brevi, sono tweet. Quindi, idealmente, questo classificatore è ottimizzato per testi così brevi.

A proposito, Twitter supporta gli operatori ":)" e ":(" nella ricerca, che mirano a fare proprio questo, ma sfortunatamente, la classificazione fornita da loro non è eccezionale, quindi ho pensato di provarlo io stesso .

Grazie!

A proposito, una demo iniziale è qui e il codice che ho finora è qui e mi piacerebbe aprirlo con qualsiasi sviluppatore interessato.

Risposte:


44

Con la maggior parte di questi tipi di applicazioni, dovrai eseguire il rollio di gran parte del tuo codice per un'attività di classificazione statistica. Come suggerito da Lucka, NLTK è lo strumento perfetto per la manipolazione del linguaggio naturale in Python, purché il tuo obiettivo non interferisca con la natura non commerciale della sua licenza. Tuttavia, suggerirei altri pacchetti software per la modellazione. Non ho trovato molti modelli avanzati di machine learning disponibili per Python, quindi suggerirò alcuni binari autonomi che cooperano facilmente con esso.

Potresti essere interessato a The Toolkit for Advanced Discriminative Modeling , che può essere facilmente interfacciato con Python. Questo è stato utilizzato per attività di classificazione in varie aree dell'elaborazione del linguaggio naturale. Puoi anche scegliere tra una serie di modelli diversi. Suggerirei di iniziare con la classificazione della massima entropia purché tu abbia già familiarità con l'implementazione di un classificatore Naive Bayes. In caso contrario, potresti esaminarlo e codificarne uno per ottenere una comprensione decente della classificazione statistica come attività di apprendimento automatico.

I gruppi di linguistica computazionale dell'Università del Texas ad Austin hanno tenuto lezioni in cui la maggior parte dei progetti che ne derivavano hanno utilizzato questo fantastico strumento. Puoi guardare la pagina del corso per Computational Linguistics II per avere un'idea di come farlo funzionare e quali applicazioni precedenti ha servito.

Un altro ottimo strumento che funziona allo stesso modo è Mallet . La differenza tra Mallet è che c'è un po 'più di documentazione e alcuni modelli disponibili, come gli alberi decisionali, ed è in Java, il che, a mio parere, lo rende un po' più lento. Weka è un'intera suite di diversi modelli di apprendimento automatico in un unico grande pacchetto che include alcune cose grafiche, ma in realtà è pensato principalmente per scopi pedagogici e non è davvero qualcosa che avrei messo in produzione.

Buona fortuna con il tuo compito. La parte veramente difficile sarà probabilmente la quantità di ingegneria della conoscenza richiesta in anticipo per classificare il "set di base" da cui imparerà il tuo modello. Deve essere abbastanza grande, a seconda che tu stia facendo una classificazione binaria (felice vs triste) o un'intera gamma di emozioni (che richiederà ancora di più). Assicurati di fornire alcuni di questi dati ingegnerizzati per i test, oppure esegui alcuni test di dieci volte o rimuovi uno per assicurarti di fare effettivamente un buon lavoro di previsione prima di pubblicarlo. E soprattutto, buon divertimento! Questa è la parte migliore della PNL e dell'intelligenza artificiale, secondo me.


Grazie. Lo faccio solo di notte, quindi ... ci vorrà un po 'di tempo, ma posterò un aggiornamento quando avrò qualcosa di pronto
Ran

7
Codice NLTK è disponibile sotto licenza Apache 2.0 come da nltk.org/faq
Amit

1
Perché dici che Weka è per scopi pedagogici? Non fa parte della suite pentaho BI? E pentaho serve le imprese.
Swapnil

77

Buona fortuna.

Il sentimento è enormemente contestuale e la cultura del tweet peggiora il problema perché non ti viene fornito il contesto per la maggior parte dei tweet. Il punto centrale di Twitter è che puoi sfruttare l'enorme quantità di contesto condiviso del "mondo reale" per racchiudere una comunicazione significativa in un messaggio molto breve.

Se dicono che il video è brutto, significa cattivo o cattivo ?

Un giorno un professore di linguistica stava tenendo una lezione alla sua classe. "In inglese", ha detto, "Un doppio negativo forma un positivo. In alcune lingue, tuttavia, come il russo, un doppio negativo è ancora un negativo. Tuttavia, non esiste una lingua in cui un doppio positivo possa formare un negativo".

Una voce dal fondo della stanza gridò: "Sì ... giusto."


4
Sono contento che tu abbia avuto una risposta utile, altrimenti avrei dovuto votarti positivamente solo per quella citazione. :-)
Ben Blank

2
Penso che la citazione fosse "yeah yeah" - da Sidney Morgenbesser
Scott Weinstein

19

Grazie a tutti per i vostri suggerimenti, sono stati davvero molto utili! Ho finito per usare un classificatore bayesiano ingenuo, che ho preso in prestito da qui . Ho iniziato alimentandolo con un elenco di parole chiave buone / cattive e poi ho aggiunto una funzione di "apprendimento" utilizzando il feedback degli utenti. Si è rivelato funzionare abbastanza bene.

Tutti i dettagli del mio lavoro come in un post sul blog .

Ancora una volta, il tuo aiuto è stato molto utile, quindi grazie!


1
il link al post del blog non funziona più, potresti aggiornarlo?
Petrutiu Mihai

Ciao @PetrutiuMihai, davvero quel blog è stato rimosso. Ma è roba piuttosto vecchia, non all'inizio della ricerca di oggi, quindi non ti mancherà molto; (
Ran

14

Ho costruito un elenco di parole etichettato con sentimento. Puoi accedervi da qui:

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

Troverai un breve programma Python sul mio blog:

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

Questo post mostra come utilizzare l'elenco di parole con singole frasi e con Twitter.

Gli approcci degli elenchi di parole hanno i loro limiti. Troverete un'indagine sui limiti del mio elenco di parole nell'articolo "Un nuovo ANEW: valutazione di un elenco di parole per l'analisi del sentiment nei microblog". Questo articolo è disponibile dalla mia home page.

Si prega di notare che unicode(s, 'utf-8')nel codice manca un (per motivi pedagogici).


"Posterous Spaces non è più disponibile" Potresti pubblicare codice Python da qualche parte?
andilabs

1
Grazie per averlo notato. Ora ho cambiato il collegamento posterous in un collegamento Wordpress in cui ho spostato il mio blog.
Finn Årup Nielsen

Potresti dire qualcosa su eventuali esperimenti con le parole del tuo sentimento? Intendo quello che era precetto, richiamo di classificazione.
andilabs

1
Ho link ad alcune valutazioni qui: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Non ho valutato personalmente le sue prestazioni in termini di precisione, richiamo e classificazione. Quello che ho fatto è stata la correlazione del grado con l'etichettatura dei tweet di Amazon Mechanical Turk di Mislove.
Finn Årup Nielsen

10

Molti articoli di ricerca indicano che un buon punto di partenza per l'analisi del sentiment è guardare gli aggettivi, ad esempio, sono aggettivi positivi o aggettivi negativi. Per un breve blocco di testo questa è praticamente la tua unica opzione ... Ci sono documenti che esaminano interi documenti o analisi a livello di frase, ma come dici tu i tweet sono piuttosto brevi ... Non esiste un vero approccio magico per comprendere il sentimento di una frase, quindi penso che la soluzione migliore sarebbe dare la caccia a uno di questi documenti di ricerca e cercare di ottenere il loro set di dati di aggettivi orientati positivamente / negativamente.

Detto questo, il sentiment è specifico del dominio e potresti trovare difficile ottenere un alto livello di precisione con un set di dati generico.

In bocca al lupo.


Accidenti, stavo per anticiparti.
Dana the Sane,

4

Penso che potresti trovare difficile trovare quello che stai cercando. La cosa più vicina che io sappia è LingPipe , che ha alcune funzionalità di analisi del sentiment ed è disponibile con un tipo limitato di licenza open source, ma è scritto in Java.

Inoltre, i sistemi di analisi del sentiment vengono solitamente sviluppati addestrando un sistema sui dati di revisione di prodotti / film che è significativamente diverso dal tweet medio. Saranno ottimizzati per il testo con più frasi, tutte sullo stesso argomento. Sospetto che faresti meglio a inventare un sistema basato su regole, magari basato su un lessico di termini sentimentali come quello fornito dall'Università di Pittsburgh .

Dai un'occhiata a We Feel Fine per un'implementazione di un'idea simile con un'interfaccia davvero bella (e twitrratr ).



1

Forse TextBlob (basato su NLTK e pattern) è lo strumento di analisi del sentiment giusto per te.


1

Mi sono imbattuto in Natural Language Toolkit qualche tempo fa. Probabilmente potresti usarlo come punto di partenza. Ha anche molti moduli e componenti aggiuntivi, quindi forse hanno già qualcosa di simile.


0

Pensiero un po 'stravagante: potresti provare a utilizzare l'API di Twitter per scaricare un ampio set di tweet, quindi classificare un sottoinsieme di quel set utilizzando le emoticon: un gruppo positivo per ":)", ":]", ": D", ecc. e un altro gruppo escluso con ":(" e così via.

Una volta ottenuta quella classificazione grezza, potresti cercare più indizi con l'analisi della frequenza o del ngram o qualcosa del genere.

Può sembrare sciocco, ma sono state fatte ricerche serie su questo (ricerca di "analisi del sentimento" ed emoticon). Vale la pena dare un'occhiata.



0

Per coloro che sono interessati a codificare da zero Twitter Sentiment Analyis, c'è un corso Coursera " Data Science " con codice Python su GitHub (come parte dell'assegnazione 1 - link ). I sentimenti fanno parte dell'AFINN-111 .

Puoi trovare soluzioni di lavoro, ad esempio qui . Oltre all'elenco dei sentimenti AFINN-111, esiste una semplice implementazione per creare un elenco di termini dinamico basato sulla frequenza dei termini nei tweet che hanno un punteggio pos / neg (vedi qui ).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.