====== Analyse de sentiments - prédire la polarité d'un tweet ====== L'analyse de sentiments est un problème qui intéresse beaucoup d'entreprises et de personnalités. Il s'agit de découvrir automatiquement, à partir de contenus textuels, quel sentiment dégage un produit, un article de journal, un postage sur un réseau social, etc. Ces informations peuvent être utilisées, par exemple, par une entreprise qui cherche à savoir ce que les clients pensent de son nouveau produit, ou par une personnalité politique qui souhaite connaître l'avis de la population sur un discours ou un projet. Il existe plusieurs variantes du problème. Dans sa version la plus simple, on peut tout simplement s'intéresser à la **polarité** du texte, c'est-à-dire : est-il positif, négatif ou neutre par rapport au sujet en question ? Il existe aussi des versions plus sophistiquées, où l'on cherche à savoir quel sentiment est dégagé par le texte (haine, tristesse, joie, peur...) ou alors à trouver quels sont les aspects sur lesquels le texte est positif/négatif, et à quel point (par exemple, les clients d'un hôtel apprécient beaucoup la localisation mais critiquent la propreté). Dans ce projet, nous nous concentrerons sur la version simple, c'est-à-dire, étant donné un texte, il faut prédire s'il est positif (+), négatif (-) ou neutre ( = ). Cependant, les textes à traiter ne sont pas faciles à analyser, car il s'agit de tweets collectés en ligne à propos du sujet de l'écologie. Cette tâche a été proposée dans le défit [[https://deft.limsi.fr/2015/|DEFT 2015 (T1)]]. L'[[http://talnarchives.atala.org/ateliers/2015/DEFT/deft-2015-long-001.pdf|article qui décrit la campagne d'évaluation]] peut être un bon point de départ pour avoir plus d'informations. ==== Techniques existants ==== * Vocabulaire de mots positifs et négatifs: beaucoup de systèmes existants sont fondés sur des vocabulaires de mots positifs (aimer, super, top, sympa, etc) et négatifs (nul, déteste, dangereux, etc). Il existe des lexiques gratuits pour l'anglais, tels que [[http://sentiwordnet.isti.cnr.it/|SentiWordnet]]. Pour le français, le nombre de ressources est plus limité mais certains dictionnaires tel que [[http://polarimots.lif.univ-mrs.fr/|Polarimots]] peuvent être utilisés. * Mots/n-grammes fréquents dans les textes d'entraînement: Vous pouvez aussi utiliser le corpus d'entraînement pour obtenir des listes de mots et n-grammes caractéristiques des textes positifs, négatifs et neutres. Ensuite, vous pouvez définir une stratégie (p. ex. algorithme k-NN) pour classifier un tweet selon les mots ou n-grammes qu'il contient. * Classifieurs: souvent, dans les tâches de classification de textes, des classifieurs automatiques (p. ex. SVM, arbre de décision, kNN, Bayes, réseau de neurones) peuvent être utilisés pour apprendre un modèle qui maximise l'utilité des informations disponibles. Par exemple, un tel modèle est capable d'apprendre qu'un mot est très prototypique d'un texte positif, et dès que ce mot est présent le texte sera classifié comme positif. Pas besoin de ré-implémenter des classifieurs : vous pouvez utiliser des suites logicielles telles que scikit-learn, Weka, SVMLib etc. ==== Logiciels à tester ==== Sur internet, vous trouverez un bon nombre de sites web, souvent payants, qui vous proposent de faire de l'analyse de sentiments sur le web. Vous pouvez essayer de les tester (pour ceux qui ont une version gratuite) et étudier leurs points forts et leurs points faibles. De plus, il existe de nombreuses boîtes à outils pour la classification de textes. Certaines sont spécialisées dans l'identification de la langue, d'autres peuvent être adaptées pour la classification de polarité, comme [[http://odur.let.rug.nl/~vannoord/TextCat/|TextCat]]. N'hésitez pas à les essayer. Finalement, vous trouverez en ligne les [[http://talnarchives.atala.org/ateliers/2015/DEFT/|actes de DEFT 2015]]. Vérifiez si certains systèmes soumis à la campagne d'évaluation sont disponibles gratuitement. Si ce n'est pas le cas, vous pouvez essayer d'écrire aux auteurs pour leur demander. ==== Développement à faire ==== Vous devez écrire un logiciel qui prédit, pour un tweet en français donné en entrée, quelle est sa polarité. Les valeurs possibles sont "+" pour un tweet positif, "-" pour un tweet négatif et "=" pour un tweet neutre. Tous les tweets parlent d'écologie. Par exemple, le tweet ci-dessous doit être classifié comme positif : ''Lutter contre le réchauffement climatique et réduire la facture énergétique'' Alors que celui-ci sera classifié comme négatif : ''c'est dommage d'avoir tellement freiné les énergies alternatives ...'' ==== Format des données ==== Ce projet fonctionne sur le modèle d'une **campagne d'évaluation**. Nous vous fournissons des textes sur lesquels la polarité est connue (train) et des textes sur lesquels nous connaissons la polarité, mais nous la gardon sécrète (test). Nous fournissons aussi un échantillon de données de développement pour lesquelles nous vous fournissons les bonnes réponses (dev). Ce dernier sert à évaluer votre système pendant le développement et à apporter des améliorations de manière incrémentale. **Données d'entraînement** : nous fournissons un ensemble de tweets pour lesquels nous connaissons déjà la polarité. C'est le corpus d'entraînement. Vous pourrez apprendre un modèle à partir de ces données. **Données de développement** : Pendant le développement du système, vous pouvez l'évaluer sur un petit échantillon de données de développement pour lesquelles nous vous fournissons les bonnes réponses. Attention, cet échantillon ne doit pas être utilisé pour apprendre votre système. Avec ces données, vous pouvez vérifier, par exemple, si la dernière modification effectuée améliore effectivement la performance du système. **Données de test** : Vous devez ensuite évaluer votre système sur une base de tweets pour laquelle vous ne connaissez pas la polarité. Votre système doit donner une sortie contenant deux colonnes : la polarité suivie du tweet. Nous allons ensuite évaluer votre système automatiquement, en comparant votre sortie avec la vraie polarité du tweet, que nous gardons secrète pour le moment. Votre système sera évalué automatiquement par rapport à ces données, comme dans une vraie campagne d'évaluation. Nous vous fournissons trois fichiers textuels (train, dev et test) encodés en UTF-8, avec LF en fin de ligne. Ces tweets sont dans un fichier TSV (colonnes séparées par TAB) avec deux colonnes. Le premier champs contient le texte du tweet. Le deuxième champs contient la polarité du tweet (+,- ou .). Dans les données de test, le deuxième champs contient "??" pour toutes les lignes. ==== Evaluation ==== Pour faciliter le développement incrémental, nous proposons un système //baseline//. Il s'agit d'un script Python qui attribue une polarité aléatoirement pour chaque tweet donné en entrée. Bien entendu, c'est un système complètement artificiel sans grand intérêt conceptuel, mais qui permet d'avoir un point de départ pour se familiariser avec la tâche et le format des données. Ce système peut être évalué sur un petit échantillon de données de développement pour lesquelles nous vous fournissons les bonnes réponses. Ainsi, vous pouvez vérifier que votre système a une précision supérieure à celle de la baseline ou que la dernière modification améliore la précision globale du système. Pour exécuter le système baseline, exécutez le script ''sent-dummy.py'' de la façon suivante : ''$ ./sent-dummy.py sent-dev.txt > monsysteme.txt'' L'entrée est le fichier de développement ou celui de test. La sortie sera un fichier identique à l'entrée, mais où la dernière colonne aura été remplacée par une polarité devinée aléatoirement. Le script ''eval.sh'' calcule la précision d'un systèmepar rapport à un fichier de référence. Ce script prend en paramètre le nom du fichier contenant la sortie de votre système et le nom du fichier contenant la référence. Par exemple, pour connaître la précision du système baseline sur l'ensemble de développement, vous pouvez exécuter : ''$ ./eval.sh sent-dev.txt monsysteme.txt'' L'archive ci-dessous contient le script d'évaluation et le système baseline. * {{:projets-l3:sent-data.tar.gz|sent-data.tar.gz}} Les données de référence de test sont disponibles ici. * {{:projets-l3:sent-test-gold.txt.gz|}} ==== Extensions ou alternatives ==== La tâche DEFT 2015 proposait 2 autres défis, vous pouvez essayer de les résoudre comme une alternative ou extension de votre projet. De plus, d'autres campagnes d'évaluation proposent régulièrement des tâches liées à l'analyse de sentiments, souvent pour la langue anglaise. Nous vous conseillons de regarder les [[https://en.wikipedia.org/wiki/SemEval|campagnes SemEval]] des dernières années si vous cherchez une inspiration pour une variante, extension ou alternative au sujet type proposé ci-dessus.