Stimmungsanalyse für Twitter in Python [geschlossen]

87

Ich suche nach einer Open-Source-Implementierung der Textual Sentiment Analysis ( http://en.wikipedia.org/wiki/Sentiment_analysis ) , vorzugsweise in Python . Ist jemand mit einer solchen Open Source-Implementierung vertraut, die ich verwenden kann?

Ich schreibe eine Anwendung, die Twitter nach einem Suchbegriff durchsucht, "youtube" sagt und "fröhliche" Tweets gegen "traurige" Tweets zählt. Ich verwende Googles Appengine, also ist es in Python. Ich möchte in der Lage sein, die von Twitter zurückgegebenen Suchergebnisse zu klassifizieren, und ich möchte dies in Python tun. Ich konnte bisher keinen solchen Stimmungsanalysator finden, insbesondere nicht in Python. Kennen Sie eine solche Open Source-Implementierung, die ich verwenden kann? Am liebsten ist dies bereits in Python, aber wenn nicht, kann ich es hoffentlich in Python übersetzen.

Beachten Sie, dass die Texte, die ich analysiere, SEHR kurz sind, es sind Tweets. Idealerweise ist dieser Klassifikator für solche kurzen Texte optimiert.

Übrigens unterstützt Twitter die Operatoren ":)" und ":(" bei der Suche, die genau dies anstreben, aber leider ist die von ihnen bereitgestellte Klassifizierung nicht so gut, also dachte ich mir, ich könnte es selbst versuchen .

Vielen Dank!

Übrigens, eine frühe Demo ist hier und der Code, den ich bisher habe, ist hier und ich würde ihn gerne mit jedem interessierten Entwickler öffnen.

Ran
quelle

Antworten:

43

Bei den meisten dieser Arten von Anwendungen müssen Sie einen Großteil Ihres eigenen Codes für eine statistische Klassifizierungsaufgabe rollen. Wie Lucka vorgeschlagen hat, ist NLTK das perfekte Tool für die Manipulation natürlicher Sprachen in Python, solange Ihr Ziel den nichtkommerziellen Charakter seiner Lizenz nicht beeinträchtigt. Ich würde jedoch andere Softwarepakete für die Modellierung vorschlagen. Ich habe nicht viele stark fortgeschrittene Modelle für maschinelles Lernen gefunden, die für Python verfügbar sind, daher werde ich einige eigenständige Binärdateien vorschlagen, die problemlos damit zusammenarbeiten können.

Möglicherweise interessieren Sie sich für das Toolkit für erweiterte diskriminierende Modellierung , das problemlos mit Python verbunden werden kann. Dies wurde für Klassifizierungsaufgaben in verschiedenen Bereichen der Verarbeitung natürlicher Sprache verwendet. Sie haben auch eine Auswahl verschiedener Modelle. Ich würde vorschlagen, mit der Klassifizierung der maximalen Entropie zu beginnen, solange Sie bereits mit der Implementierung eines Naive Bayes-Klassifizierers vertraut sind. Wenn nicht, möchten Sie vielleicht einen Blick darauf werfen und einen Code erstellen, um ein gutes Verständnis der statistischen Klassifizierung als maschinelle Lernaufgabe zu erhalten.

Die Computerlinguistik-Gruppen der University of Texas in Austin haben Kurse abgehalten, in denen die meisten Projekte, die aus ihnen hervorgegangen sind, dieses großartige Tool verwendet haben. Auf der Kursseite für Computerlinguistik II können Sie sich ein Bild davon machen, wie es funktioniert und welche früheren Anwendungen es bedient hat.

Ein weiteres großartiges Werkzeug, das auf die gleiche Weise funktioniert, ist Mallet . Der Unterschied zwischen Mallet besteht darin, dass etwas mehr Dokumentation und einige weitere Modelle verfügbar sind, z. B. Entscheidungsbäume, und dass es sich um Java handelt, was es meiner Meinung nach etwas langsamer macht. Weka ist eine ganze Reihe verschiedener Modelle für maschinelles Lernen in einem großen Paket, das einige grafische Elemente enthält, aber eigentlich hauptsächlich für pädagogische Zwecke gedacht ist und nicht wirklich etwas ist, das ich in Produktion bringen würde.

Viel Glück bei Ihrer Aufgabe. Der wirklich schwierige Teil wird wahrscheinlich die Menge an Knowledge Engineering sein, die im Voraus erforderlich ist, damit Sie den „Startwert“ klassifizieren können, von dem Ihr Modell lernen wird. Es muss ziemlich groß sein, je nachdem, ob Sie eine binäre Klassifizierung (glücklich gegen traurig) oder eine ganze Reihe von Emotionen durchführen (was noch mehr erfordert). Stellen Sie sicher, dass Sie einige dieser technischen Daten zum Testen bereithalten, oder führen Sie zehnfache oder entfernte Tests durch, um sicherzustellen, dass Sie tatsächlich gute Vorhersagen treffen, bevor Sie sie veröffentlichen. Und vor allem viel Spaß! Dies ist meiner Meinung nach der beste Teil von NLP und AI.

Robert Elwell
quelle
Vielen Dank. Ich mache das nur nachts, also ... es wird einige Zeit dauern, aber ich werde ein Update veröffentlichen, wenn ich etwas fertig habe
lief
7
NLTK-Code ist unter Apache License 2.0 unter nltk.org/faq verfügbar
amit
1
Warum ist Weka Ihrer Meinung nach für pädagogische Zwecke? Ist es nicht Teil der Pentaho BI Suite? Und Pentaho dient Unternehmen.
Swapnil
77

Viel Glück damit.

Die Stimmung ist enorm kontextabhängig, und die Tweeting-Kultur verschlimmert das Problem, da Sie für die meisten Tweets nicht den Kontext erhalten . Der springende Punkt bei Twitter ist, dass Sie die große Menge an gemeinsam genutzten "realen" Kontexten nutzen können, um eine aussagekräftige Kommunikation in einer sehr kurzen Nachricht zu packen.

Wenn sie sagen, dass das Video schlecht ist, bedeutet das schlecht oder schlecht ?

Eines Tages hielt eine Linguistikprofessorin Vorlesungen in ihrer Klasse. "Auf Englisch", sagte sie, "bildet ein doppeltes Negativ ein positives. In einigen Sprachen wie Russisch ist ein doppeltes Negativ jedoch immer noch ein Negativ. Es gibt jedoch keine Sprache, in der ein doppeltes Positiv ein Negativ bilden kann."

Eine Stimme aus dem hinteren Teil des Raumes sprach: "Ja ... richtig."

MarkusQ
quelle
4
Ich bin froh, dass Sie eine nützliche Antwort hatten, da ich Sie sonst möglicherweise nur für dieses Zitat hätte stimmen müssen. :-)
Ben Blank
2
Ich denke, das Zitat war "yeah yeah" - von Sidney Morgenbesser
Scott Weinstein
19

Vielen Dank an alle für Ihre Vorschläge, sie waren in der Tat sehr nützlich! Am Ende habe ich einen naiven Bayes'schen Klassifikator verwendet, den ich hier ausgeliehen habe . Ich begann damit, es mit einer Liste von guten / schlechten Schlüsselwörtern zu füttern und fügte dann eine "Lern" -Funktion hinzu, indem ich Benutzer-Feedback verwendete. Es stellte sich heraus, dass es ziemlich gut funktionierte.

Die vollständigen Details meiner Arbeit wie in einem Blogbeitrag .

Auch hier war Ihre Hilfe sehr nützlich, also danke!

Ran
quelle
1
Der Link zum Blog-Beitrag funktioniert nicht mehr. Könnten Sie ihn aktualisieren?
Petrutiu Mihai
Hallo @PetrutiuMihai, tatsächlich wurde dieser Blog entfernt. Aber es ist ziemlich altes Zeug, das bis heute nicht an der Spitze der Forschung steht, so dass Sie nicht viel vermissen werden; (
Ran
14

Ich habe eine Wortliste mit Sentiment erstellt. Sie können von hier aus darauf zugreifen:

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

Ein kurzes Python-Programm finden Sie in meinem Blog:

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

Dieser Beitrag zeigt, wie die Wortliste sowohl mit einzelnen Sätzen als auch mit Twitter verwendet wird.

Word-Listen-Ansätze haben ihre Grenzen. Eine Untersuchung der Einschränkungen meiner Wortliste finden Sie im Artikel "Eine neue ANEW: Auswertung einer Wortliste für die Stimmungsanalyse in Microblogs". Dieser Artikel ist auf meiner Homepage verfügbar.

Bitte beachten Sie, dass unicode(s, 'utf-8')im Code ein fehlt (aus pädagogischen Gründen).

Finn Årup Nielsen
quelle
"Posterous Spaces ist nicht mehr verfügbar" Könnten Sie irgendwo Python-Code posten?
Andilabs
1
Danke, dass du es bemerkt hast. Ich habe jetzt den Poster-Link in einen Wordpress-Link geändert, über den ich mein Blog verschoben habe.
Finn Årup Nielsen
Könnten Sie etwas über Experimente mit Ihrem Stimmungslicht sagen? Ich meine, was war Präzision, Rückruf der Klassifizierung.
Andilabs
1
Ich habe hier Links zu einigen Bewertungen: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Ich habe die Leistung nicht selbst in Bezug auf Präzision, Rückruf und Klassifizierung bewertet. Was ich getan habe, war eine Rangkorrelation mit Misloves Amazon Mechanical Turk-Kennzeichnung von Tweets.
Finn Årup Nielsen
10

Viele Forschungsarbeiten weisen darauf hin, dass ein guter Ausgangspunkt für die Stimmungsanalyse die Betrachtung von Adjektiven ist, z. B. positive oder negative Adjektive. Für einen kurzen Textblock ist dies so ziemlich Ihre einzige Option ... Es gibt Artikel, die ganze Dokumente oder eine Analyse auf Satzebene betrachten, aber wie Sie sagen, Tweets sind ziemlich kurz ... Es gibt keinen wirklich magischen Ansatz, um das zu verstehen Ich denke, Ihre beste Wahl wäre es, eine dieser Forschungsarbeiten aufzuspüren und zu versuchen, ihren Datensatz positiv / negativ orientierter Adjektive zu erhalten.

Nachdem dies gesagt wurde, ist die Stimmung domänenspezifisch, und es könnte schwierig sein, mit einem Allzweckdatensatz ein hohes Maß an Genauigkeit zu erzielen.

Viel Glück.


quelle
Verdammt, ich wollte dich vorwegnehmen.
Dana the Sane
4

Ich denke, es fällt Ihnen möglicherweise schwer, das zu finden, wonach Sie suchen. Das nächste, was ich kenne, ist LingPipe , das über einige Funktionen zur Stimmungsanalyse verfügt und unter einer begrenzten Art von Open-Source-Lizenz verfügbar ist, jedoch in Java geschrieben ist.

Außerdem werden Stimmungsanalysesysteme normalerweise entwickelt, indem ein System auf Produkt- / Filmüberprüfungsdaten trainiert wird, das sich erheblich vom durchschnittlichen Tweet unterscheidet. Sie werden für Text mit mehreren Sätzen zum gleichen Thema optimiert. Ich vermute, Sie sollten besser selbst ein regelbasiertes System entwickeln, das möglicherweise auf einem Lexikon von Stimmungsbegriffen basiert, wie es die Universität von Pittsburgh bietet .

Schauen Sie sich We Feel Fine an, um eine ähnliche Idee mit einer wirklich schönen Oberfläche (und Twitrratr ) umzusetzen .

Stompchicken
quelle
1

Vielleicht ist TextBlob (basierend auf NLTK und Muster) das richtige Stimmungsanalyse-Tool für Sie.

Sonson123
quelle
1

Ich bin vor einiger Zeit auf das Natural Language Toolkit gestoßen. Sie könnten es wahrscheinlich als Ausgangspunkt verwenden. Es hat auch viele Module und Addons, also haben sie vielleicht schon etwas Ähnliches.

Luka Marinko
quelle
0

Etwas verrückter Gedanke: Sie könnten versuchen, mithilfe der Twitter-API eine große Menge von Tweets herunterzuladen und dann eine Teilmenge dieser Menge mithilfe von Emoticons zu klassifizieren: eine positive Gruppe für ":)", ":]", ": D" usw. und eine andere negative Gruppe mit ":(" usw.

Sobald Sie diese grobe Klassifizierung haben, können Sie nach weiteren Hinweisen mit Frequenz- oder Grammanalyse oder etwas in dieser Richtung suchen.

Es mag albern erscheinen, aber diesbezüglich wurden ernsthafte Untersuchungen durchgeführt (Suche nach "Stimmungsanalyse" und Emoticon). Einen Blick wert.


quelle
0

Für diejenigen, die Twitter Sentiment Analyis von Grund auf neu codieren möchten, gibt es einen Coursera-Kurs " Data Science " mit Python-Code auf GitHub (als Teil von Aufgabe 1 - Link ). Die Gefühle sind Teil des AFINN-111 .

Sie können Arbeitslösungen, zum Beispiel finden sich hier . Zusätzlich zur AFINN-111-Stimmungsliste gibt es eine einfache Implementierung zum Erstellen einer dynamischen Begriffsliste basierend auf der Häufigkeit von Begriffen in Tweets mit einem Pos / Neg-Score (siehe hier ).

Philshem
quelle