Analyse des sentiments pour Twitter en Python [fermé]

87

Je recherche une implémentation open source, de préférence en python, de Textual Sentiment Analysis ( http://en.wikipedia.org/wiki/Sentiment_analysis ). Quelqu'un est-il familier avec une telle implémentation open source que je peux utiliser?

J'écris une application qui recherche sur Twitter un terme de recherche, par exemple "youtube", et qui compte les tweets "heureux" par rapport aux tweets "tristes". J'utilise l'appengine de Google, donc c'est en python. J'aimerais pouvoir classer les résultats de recherche renvoyés par Twitter et j'aimerais le faire en python. Je n'ai pas pu trouver un tel analyseur de sentiment jusqu'à présent, en particulier pas en python. Connaissez-vous une telle implémentation open source que je peux utiliser? De préférence, c'est déjà en python, mais sinon, j'espère pouvoir le traduire en python.

Attention, les textes que j'analyse sont TRÈS courts, ce sont des tweets. Donc, idéalement, ce classificateur est optimisé pour des textes aussi courts.

BTW, Twitter prend en charge les opérateurs ":)" et ":(" dans la recherche, qui visent à faire exactement cela, mais malheureusement, la classification fournie par eux n'est pas terrible, alors j'ai pensé que je pourrais essayer cela moi-même .

Merci!

BTW, une première démo est ici et le code que j'ai jusqu'à présent est ici et j'aimerais l'ouvrir à tout développeur intéressé.

Ran
la source

Réponses:

44

Avec la plupart de ces types d'applications, vous devrez générer une grande partie de votre propre code pour une tâche de classification statistique. Comme Lucka l'a suggéré, NLTK est l'outil parfait pour la manipulation du langage naturel en Python, à condition que votre objectif n'interfère pas avec la nature non commerciale de sa licence. Cependant, je suggérerais d'autres logiciels pour la modélisation. Je n'ai pas trouvé beaucoup de modèles d'apprentissage machine avancés puissants disponibles pour Python, je vais donc suggérer des binaires autonomes qui coopèrent facilement avec lui.

Vous pourriez être intéressé par le Toolkit for Advanced Discriminative Modeling , qui peut être facilement interfacé avec Python. Cela a été utilisé pour les tâches de classification dans divers domaines du traitement du langage naturel. Vous avez également un choix d'un certain nombre de modèles différents. Je suggère de commencer par la classification d'entropie maximale tant que vous êtes déjà familiarisé avec la mise en œuvre d'un classificateur Naive Bayes. Sinon, vous voudrez peut-être l'examiner et en coder un pour vraiment comprendre correctement la classification statistique en tant que tâche d'apprentissage automatique.

Les groupes de linguistique computationnelle de l'Université du Texas à Austin ont organisé des cours où la plupart des projets qui en sont issus ont utilisé ce formidable outil. Vous pouvez consulter la page du cours de Computational Linguistics II pour avoir une idée de la façon de le faire fonctionner et des applications précédentes qu'il a servies.

Un autre excellent outil qui fonctionne dans la même veine est Mallet . La différence entre Mallet est qu'il y a un peu plus de documentation et d'autres modèles disponibles, tels que les arbres de décision, et c'est en Java, ce qui, à mon avis, le rend un peu plus lent. Weka est une suite complète de différents modèles d'apprentissage automatique dans un gros package qui comprend des éléments graphiques, mais c'est vraiment principalement destiné à des fins pédagogiques, et ce n'est pas vraiment quelque chose que je mettrais en production.

Bonne chance dans votre tâche. La partie la plus difficile sera probablement la quantité d'ingénierie des connaissances requise au départ pour que vous puissiez classer le «groupe de départ» dont votre modèle apprendra. Cela doit être assez important, selon que vous faites une classification binaire (heureux vs triste) ou toute une gamme d'émotions (ce qui en demandera encore plus). Assurez-vous de conserver certaines de ces données d'ingénierie pour les tests, ou exécutez des tests décuplés ou supprimés-un pour vous assurer que vous faites du bon travail de prédiction avant de les publier. Et le plus important, amusez-vous! C'est la meilleure partie de la PNL et de l'IA, à mon avis.

Robert Elwell
la source
Merci. Je ne fais cela que la nuit, donc ... cela prendra un certain temps, mais je posterai une mise à jour quand j'aurai quelque chose de prêt
Ran
7
Le code NLTK est disponible sous Apache License 2.0 selon nltk.org/faq
amit
1
Pourquoi dites-vous que Weka est à des fins pédagogiques? Ne fait-il pas partie de la suite Pentaho BI? Et le pentaho est au service des entreprises.
Swapnil le
77

Bonne chance avec ça.

Le sentiment est extrêmement contextuel, et la culture des tweets aggrave le problème car on ne vous donne pas le contexte de la plupart des tweets. Tout l'intérêt de Twitter est que vous pouvez tirer parti de l'énorme quantité de contexte partagé "du monde réel" pour emballer une communication significative dans un message très court.

S'ils disent que la vidéo est mauvaise, est-ce que cela veut dire mauvaise ou mauvaise ?

Un professeur de linguistique donnait une conférence à sa classe un jour. «En anglais», dit-elle, «un double négatif forme un positif. Dans certaines langues, cependant, comme le russe, un double négatif est toujours un négatif. Cependant, il n'y a pas de langue dans laquelle un double positif peut former un négatif.

Une voix venant du fond de la pièce se fit entendre, "Ouais ... d'accord."

MarkusQ
la source
4
Je suis heureux que vous ayez eu une réponse utile, car sinon, j'aurais peut-être dû vous voter pour cette citation. :-)
Ben Blank
2
Je pense que la citation était "ouais ouais" - de Sidney Morgenbesser
Scott Weinstein
19

Merci à tous pour vos suggestions, elles ont en effet été très utiles! J'ai fini par utiliser un classifieur bayésien naïf, que j'ai emprunté ici . J'ai commencé par l'alimenter avec une liste de bons / mauvais mots-clés, puis j'ai ajouté une fonction «apprendre» en utilisant les commentaires des utilisateurs. Cela s'est avéré assez agréable.

Les détails complets de mon travail dans un article de blog .

Encore une fois, votre aide a été très utile, alors merci!

Ran
la source
1
Le lien de l'article de blog ne fonctionne plus, pourriez-vous le mettre à jour?
Petrutiu Mihai
Salut @PetrutiuMihai en effet, ce blog a été supprimé. Mais ce sont des trucs assez vieux, pas à l'avant-garde de la recherche à ce jour, donc vous ne manquerez pas beaucoup; (
Ran
14

J'ai construit une liste de mots étiquetés avec sentiment. Vous pouvez y accéder à partir d'ici:

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

Vous trouverez un petit programme Python sur mon blog:

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

Cet article montre comment utiliser la liste de mots avec des phrases simples ainsi qu'avec Twitter.

Les approches de listes de mots ont leurs limites. Vous trouverez une enquête sur les limites de ma liste de mots dans l'article "A new ANEW: Evaluation d'une liste de mots pour l'analyse des sentiments dans les microblogs". Cet article est disponible sur ma page d'accueil.

Veuillez noter qu'il unicode(s, 'utf-8')manque un dans le code (pour des raisons pédagogiques).

Finn Årup Nielsen
la source
"Posters Spaces n'est plus disponible" Pourriez-vous publier du code python quelque part?
andilabs
1
Merci de l'avoir noté. J'ai maintenant changé le lien postérieur en lien Wordpress où j'ai déplacé mon blog.
Finn Årup Nielsen
Pourriez-vous dire quelque chose sur les expériences avec vos mots sentimentaux éclairés? Je veux dire ce qu'était la précision, le rappel de la classification.
andilabs
1
J'ai des liens vers quelques évaluations ici: neuro.compute.dtu.dk/wiki/AFINN#Evaluation Je n'ai pas moi-même évalué ses performances en termes de précision, de rappel et de classification. Ce que j'ai fait, c'est une corrélation de rang avec l'étiquetage des tweets d'Amazon Mechanical Turk de Mislove.
Finn Årup Nielsen
10

De nombreux articles de recherche indiquent qu'un bon point de départ pour l'analyse des sentiments est d'examiner les adjectifs, par exemple, sont-ils des adjectifs positifs ou des adjectifs négatifs. Pour un court bloc de texte, c'est à peu près votre seule option ... Il existe des articles qui examinent des documents entiers, ou une analyse au niveau des phrases, mais comme vous le dites, les tweets sont assez courts ... Il n'y a pas de véritable approche magique pour comprendre le sentiment d'une phrase, donc je pense que votre meilleur pari serait de traquer l'un de ces documents de recherche et d'essayer d'obtenir leur ensemble de données d'adjectifs orientés positivement / négativement.

Maintenant, cela étant dit, le sentiment est spécifique au domaine et vous pourriez avoir du mal à obtenir un haut niveau de précision avec un ensemble de données à usage général.

Bonne chance.


la source
Bon sang, j'allais te devancer.
Dana the Sane
4

Je pense que vous aurez peut-être du mal à trouver ce que vous recherchez. La chose la plus proche que je connaisse est LingPipe , qui dispose d'une fonctionnalité d'analyse des sentiments et est disponible sous un type limité de licence open source, mais est écrit en Java.

En outre, les systèmes d'analyse des sentiments sont généralement développés en formant un système sur des données de critique de produit / film qui sont très différentes du tweet moyen. Ils vont être optimisés pour le texte avec plusieurs phrases, tous sur le même sujet. Je pense que vous feriez mieux de créer vous-même un système fondé sur des règles, peut-être basé sur un lexique de termes sentimentaux comme celui fourni par l'Université de Pittsburgh .

Consultez We Feel Fine pour une implémentation d'une idée similaire avec une très belle interface (et twitrratr ).

Stompchicken
la source
1

Peut-être que TextBlob (basé sur NLTK et modèle) est le bon outil d'analyse des sentiments pour vous.

Sonson123
la source
1

Je suis tombé sur Natural Language Toolkit il y a quelque temps. Vous pourriez probablement l'utiliser comme point de départ. Il a également beaucoup de modules et d'addons, alors peut-être qu'ils ont déjà quelque chose de similaire.

Luka Marinko
la source
0

Une pensée un peu farfelue: vous pouvez essayer d'utiliser l'API Twitter pour télécharger un grand ensemble de tweets, puis classer un sous-ensemble de cet ensemble à l'aide d'émoticônes: un groupe positif pour ":)", ":]", ": D", etc. , et un autre groupe négatif avec ":(", etc.

Une fois que vous avez cette classification grossière, vous pouvez rechercher plus d'indices avec une analyse de fréquence ou de ngram ou quelque chose du genre.

Cela peut paraître idiot, mais des recherches sérieuses ont été faites à ce sujet (recherche «analyse des sentiments» et émoticônes). Vaut le détour.


la source
0

Pour ceux qui s'intéressent au codage de Twitter Sentiment Analyis à partir de zéro, il existe un cours Coursera " Data Science " avec code python sur GitHub (dans le cadre du devoir 1 - lien ). Les sentiments font partie de l' AFINN-111 .

Vous pouvez trouver des solutions de travail, par exemple ici . En plus de la liste de sentiments AFINN-111, il existe une implémentation simple de la création d'une liste de termes dynamique basée sur la fréquence des termes dans les tweets qui ont un score positif / négatif (voir ici ).

Philshem
la source