Analyse de sentiment Twitter Alwine Lambert Gabriel Bellard Guillaume Lorre Karim Kouki Abstract Nous présentons une méthode d’analyse de sentiments à partir de messages issus de l’application Twitter avec la base de données Sentiment140. Nous insistons sur la phase de pré-traitement des messages, nous essayons une méthode de gradient boosting et un réseau de neurones convolutifs. Nous présentons finalement une application permettant de classifier des tweets récents. Introduction L’analyse de sentiment est une tâche de traitement automatique des langues et d’extraction d’information. Pour un texte donné, il faut identifier la polarité du texte comme étant soit positif, soit négatif. Pang et Lee (Pang, Bo, and Lillian Lee, 2008) indiquent plusieurs méthodes, plusieurs références de performance et ressources pour réaliser cette tâche. La polarité d’un sentiment peut être calculée selon plusieurs seuils et peut être vue comme plusieurs différentes classes. Dans notre projet, nous considérons les textes comme pouvant appartenir à seulement deux classes (classification binaire) : soit le texte est positif, soit le texte est négatif. Récemment, l’analyse de sentiments a reçu beaucoup d’attention non seulement de la part de la recherche scientifique mais aussi par les domaines de la publicité et du marketing. Cela peut être attribué aux récentes avancées dans les réseaux sociaux et à la rapidité du relais de l’information. Les grandes masses de données réelles issues des réseaux sociaux sont largement utilisées pour, justement, l’analyse des sentiments. Analyser les messages récents issus des réseaux sociaux pourrait donner l’opinion générale des utilisateurs envers un sujet spécifique. Nous essayons deux différents modèles. L’un est un algorithme de gradient boosting où nous normalisons les textes. Proceedings of the 33 rd International Conference on Machine Learning, New York, NY, USA, 2016. JMLR: W&CP volume 48. Copyright 2016 by the author(s). L’autre modèle est un réseau de neurones convolutifs avec une normalisation indexant les mots dans un vocabulaire. Nous appliquons une phase de pré-traitement de tweets pour réduire le bruit pour les deux modèles. Nous obtenons une précision de 80% et 79% respectivement. Parmi les approches concernant l’analyse de sentiments et d’opinions, plusieurs utilisent des ressources lexicales donnant de l’information sur la polarité des mots. Nous utilisons dans nos méthodes la ressource lexicale SentiWordNet (Esuli A, Sebastiani F, 2006) qui contient de l’information sur la polarité de termes basée sur la base de données WordNet 1 . Nous utilisons des méthodes de sélection de caractéristiques pour réduire l’espace de caractéristiques à un sousespace de caractéristiques pertinentes. Finalement nous présentons une application permettant de récupérer de nouveaux messages sur un thème donné pour évaluer l’opinion des utilisateurs de Twitter sur ce thème. 1. Sentiment140 et données Twitter 1.1. Ensemble de données L’ensemble de données Sentiment140 contient environ 1,6 millions tweets qui ont été récupérés automatiquement avec l’API Twitter. Ces tweets ont été annotés automatiquement en supposant que ceux contenant l’émoticône « :) » étaient positifs et ceux contenant l’émoticône « :( » étaient négatifs. Ceux ne contenant aucun de ces émoticônes, et ceux qui contenaient les deux, n’ont pas été gardés. L’ensemble d’entraînement est annoté en deux classes (positif et négatif) alors que l’ensemble de test est annoté à la main sur trois différentes classes (positif, négatif et neutre). Pour nos expériences, nous n’utilisons que les classes positif et négatif de l’ensemble de test. La table 1 donne les détails de l’ensemble de données. Chaque ligne du fichier contient un seul tweet contenant au maximum 140 caractères et peut contenir plusieurs phrases 1. https://wordnet.princeton.edu/wordnet/ Analyse de sentiment Twitter Table 1. Sentiment140 Ensemble d’entraînement positif négatif total 800,000 800,000 1,600,000 sation de smartphones et à la limitation de caractères. De plus, le registre de langue utilisé peut être familier. 1.3. Exploration des données Figure 1. Nuages de mots Ensemble de test positif négatif neutre total 182 177 139 498 (selon la longueur). Parce que les tweets ont été collectés directement sur l’API twitter, ils peuvent donc contenir des adresses HTML, des hashtags # et des noms d’utilisateurs (précédés d’un @). Finalement la structure de chaque ligne est la suivante : 1. la polarité du tweet (e.g, 0 = négatif, 2 = neutre, 4 = positif) 2. l’id du tweet (e.g, 4510) 3. la date du tweet (e.g, Sat May 16 23 :58 :44 UTC 2009) . Avant prétraitement . Après prétraitement Une représentation classique des données dans le cas du traitement automatique des langues est le nuage de mots. Sous cette forme, on peut visualiser très facilement les mots les plus couramment employés. Outre les couleurs qui ont une fonction uniquement décorative, la fréquence des mots dans la base de données employée est proportionnelle à la taille des mots en question dans l’image. 1.2. Caractéristiques des tweets Ici, nous avons représenté les données brutes avec et sans aucun pré-traitement sur les deux représentations graphiques fournies. Dans le cas des données brutes, les bruits observés sont dus à la structure des en-têtes des tweets principalement. Dans le cas des données (légèrement) prétraitées, nous arrivons à filtrer une bonne partie du bruit et les données deviennent informatives et peuvent commencer à être analyser. Nous présentons rapidement dans cette sous-partie les principales caractéristiques d’un tweet et de Twitter. 2. Matériels et méthodes 4. le nom de l’utilisateur qui a posté le tweet (e.g, robotickilldozr) 5. le texte du tweet (e.g, "I must think about positive..") 1.2.1. L ONGUEUR La longueur maximale d’un message posté sur Twitter est de 140 caractères. D’après Go et al.(Go, Alec and Bhayani, Richa and Huang, Lei, 2009), la longueur moyenne des tweets est de 14 mots ou 78 caractères sur ce corpus. Cette longueur est très courte contrairement à celles utilisées dans d’autres corpus pour la classification de sentiments (comme les critiques de films). 1.2.2. D ISPONIBILITÉ DES DONNÉES ET MODÈLE DU LANGAGE Les sujets abordés sur Twitter sont très divers et l’API twitter permet de récolter des millions de messages. En effet, le nombre de tweets postés chaque jour est immense. Les utilisateurs peuvent poster des messages depuis n’importe quel lieu et avec différents appareils. Il est à noter qu’un tweet peut contenir des fautes d’orthographe liées à l’utili- Nous présentons maintenant toute la méthodologie du prétraitement des données, nous expliquons nos méthodes utilisées pour la vectorisation des textes et présentons l’utilisation de la ressource lexicale SentiWordNet. 2.1. Pré-traitement des données Après avoir observé les données, nous avons vu que les phrases contenaient des balises HTML, des mots-vides et toute la ponctuation. Nous avons donc commencé par éliminer le bruit pour normaliser nos phrases. Nous supprimons les balises HTML avec le module BeautifulSoup 2 . Nous supprimons aussi tous les caractères qui ne sont pas des lettres et donc, supprimons toute la ponctuation des textes. Parce que les mots-vides, par définition, n’apportent pas d’information au texte, nous les éliminons aussi. Toutes les lettres sont également passées en minuscule. 2. https://www.crummy.com/software/ BeautifulSoup/ Analyse de sentiment Twitter Finalement, nous racinisons tous les mots pour traiter chaque flexion d’un mot en un seul et même mot. Nous détaillons ci-dessous quelques étapes importantes du prétraitement. Pseudos : Les pseudos (e.g., @username) étant inutiles pour l’analyse de sentiments, nous remplaçons tous les @usernames par le texte AT_USER afin de pouvoir les supprimer par la suite. Lettres répétées : Le langage utilisé sur Twitter est pour la plupart du temps familier. Il n’est donc pas rare que des mots soient écrits avec une lettre (ou plusieurs) qui se répète alors qu’elle ne le devrait pas. Par exemple le mot ”dog” peut se trouver de la forme ”dooooooog” sur Twitter. Dès qu’un mot contient des lettres identiques qui se répètent plus de deux fois, elles sont remplacées par seulement deux occurrences de cette même lettre (”dooooooog” devient ”doog”). Hashtags : Les hashtags sur Twitter sont utilisés pour créer une connexion instantanée avec d’autres utilisateurs. Le mot qui suit le # est généralement un mot qui fournit beaucoup d’informations sur le sentiment de la phrase. Nous conservons donc ce mot, mais le caractère hashtag est supprimé. Racinisation : Nous transformons toutes les flexions en leur racine. L’objectif est de réduire les formes dérivées d’un mot à une forme de base commune afin de pouvoir faciliter la correspondance entre les différents termes. 2.1.1. E FFET DU PRÉTRAITEMENT La Table 2 montre l’effet de ces prétraitements sur le nombre de mots utiles dans le texte. Réduction None Username URLs Lettres répétées All Nombre de caractéristiques % de l’original 1 578 617 64 982 708 571 199 784 973 337 100% 95.88% 55.11% 87.34% 38.34% Table 2. Effet de la réduction du bruit Toutes ces suppressions de bruit du texte mènent à une réduction de l’ensemble de corpus jusqu’à 38.34% de la taille du corpus original. 2.2. Sac de mots et Hashing Trick Le sac de mots (Bag of Words) est un modèle utilisé en traitement automatique des langues. Un sac de mots classique garde en mémoire un vecteur de la taille du vocabulaire pour chaque document (tweet). Si la taille du vocabulaire est grande, le dictionnaire le sera aussi. Une méthode, appelée Hashing Trick, devient plus efficace quand la taille du vocabulaire augmente. En hashant les mots, nous obtenons un index de dimension n déterminé à l’avance. Si nous choisissons une dimension trop faible, il y aura des collisions (lorsque plusieurs mots sont indexés à la même clé), si nous choisissons une dimension trop grande, nous gaspillons de la mémoire car la majorité des caractéristiques auront une valeur égale à 0. Nous pouvons noter qu’avec cette méthode, malheureusement, il n’existe aucun moyen de calculer la transformée inverse pour retrouver les mots pertinents au modèle. Nous utilisons les implémentations de scikit-learn et nous comparons les résultats en termes de performance et de prédiction. 2.3. Sentiwordnet SentiWordNet est une ressource lexicale contenant de l’information sur la polarité des termes extraits de la base de données WordNet. Sentiwordnet a été construit par une méthode non supervisée et est très utilisée dans les tâches d’analyse de sentiments, cette ressource contient une base de données de termes anglais facilement utilisable. Avant de raciniser les mots de chaque texte, nous utilisons SentiWordNet pour ajouter de nouvelles caractéristiques à nos modèles. Dans la base de données, chaque mot contient un score de positivité et un score de négativité. Pour chaque mot qui n’est ni un mot vide ni une marque de ponctuation, nous cherchons le mot dans la base de données en utilisant son étiquetage morpho-syntaxique (PoS tagging) pour trouver le mot le plus proche du sens de mot recherché. Nous calculons deux scores différents pour la polarité de la phrase. Un score contient l’addition du score des mots trouvés positifs (noté scorep ), l’autre contient l’addition du score des mots trouvés négatifs (noté scoren ). Nous avons essayé deux méthodes pour la bonne utilisation de ces scores : 2.3.1. U N SCORE GLOBAL Dans ce cas là, nous calculons un score global sur la phrase en additionnant le score positif et en soustrayant le score négatif : score = score − score g p n score[polarite] = scoreg Ainsi, si la phrase est plutôt négative elle aura un score global négatif et, inversement, un score global positif si la phrase est positive. Nous sauvegardons le score dans un dictionnaire. Analyse de sentiment Twitter 2.3.2. D EUX SCORES Dans ce cas là, nous gardons les scores positifs et négatifs tels quels et nous créons deux dictionnaires distincts. Ainsi chaque phrase contient deux scores positifs dans le sens mathématiques matérialisant un score d’opinion positif et un score d’opinion négatif. Le classifieur utilisera les deux valeurs pour la prédiction : score[positif ] = +scorep score[negatif ] = +scoren Nous avons comparé nos résultats avec et sans l’ajout de ces nouvelles caractéristiques. 2.4. Amélioration des formes négatives Das et Chen (Das S. and Chen M, 2001) ont implémenté une méthode dans leurs recherches pour l’extraction de sentiments de messages provenant de forums sur les actions en bourse. Ils ont déterminé que la négation dans une phrase inverse le sens de la phrase. Ils ont discuté sur comment les mots tels que not, never ou no sont utilisés pour inverser le sens d’une phrase. Pour mettre en valeur la négation de la phrase, ils commencent par détecter les mots des phrases et les marquent d’un tag négatif. Pang et Lee (Pang, B., Lee, L. and Vaithyanathan, S, 2002) utilisent la même technique en ajoutant le mot de négation à chaque mot jusqu’à la première marque de ponctuation suivant le mot de négation trouvé. Voici un exemple illustrant leur méthode : « I do not NOT like NOT this NOT movie , but I like this one . » Nous avons essayé cette méthode mais cela n’a pas amélioré notre modèle. Par ailleurs, nous avons constaté qu’en modifiant la méthode de la façon suivante : « I do not NOT_like NOT_this NOT_movie , but I like this one . » , nous obtenons une meilleure précision couplée à SentiWordNet. Cependant, il est à noter que la méthode est limitée par la liste de mots impliquant une négation (nous utilisons seulement "not", "n’t" et "no") et la liste est forcément incomplète. 2.5. Sélection de caractéristiques Dans la classification de texte, la sélection de caractéristiques (feature selection) est une méthode qui permet de sélectionner une sous-partie spécifique de termes de l’ensemble d’entraînement et seulement utiliser cette sous-partie pour la tâche de classification. Les principaux avantages de cette méthode sont la réduction de la dimension des données et, par conséquent, cela permet un entraînement plus rapide mais aussi elle peut améliorer la précision du système en supprimant des caractéristiques pouvant être vues comme du bruit. Nous utilisons la méthode SelectKBest implémentée dans Scikit-learn avec la méthode χ-Square (chi2 ou χ2 ) pour une première sélection de caractéristiques. Cette méthode est principalement utilisée en statistiques pour tester l’indépendance de deux événements. Dans la sélection de caractéristiques, chi2 calcule si l’occurrence d’un terme spécifique et l’occurrence d’une classe spécifique sont indépendantes. Ainsi chaque terme est évalué et tous les termes finissent ordonnés par leur score. Un score élevé indique que l’hypothèse nulle d’indépendance doit être rejeté et, que, l’occurrence du terme et de la classe sont dépendantes. Si la classe et le terme sont dépendants l’un de l’autre, la caractéristique est sélectionnée pour la classification (les k premières caractéristiques). Une autre technique que nous utilisons, seulement lorsque nous n’utilisons pas le hashing trick, est la suppression des mots rares et trop fréquents du vocabulaire. Nous ne gardons que les mots qui apparaissent au moins 2 fois et supprimons les mots qui apparaissent dans plus de 95% des tweets. 3. Modèles Nous comparons deux types de modèles différents avec leur pré-traitement respectif. Tout d’abord, nous essayons la méthode d’eXtreme Gradient Boosting (Tianqi Chen, Carlos Guestrin, 2016) où nous pouvons mettre en œuvre le sac de mots avec le hashing trick. Ensuite, nous utilisons et comparons les résultats avec un réseau de neurones convolutifs. 3.1. eXtreme Gradient Boosting Nous commençons par définir le boosting et introduisons l’eXtreme Gradient Boosting pour la tâche de classification. 3.1.1. B OOSTING La principale idée derrière le boosting est de combiner plusieurs simples et modérément imprécis apprenants en un seul et très précis apprenant. Les apprenants faibles sont entraînés séquentiellement de la sorte que chaque apprenant est entraîné sur les exemples qui étaient les plus difficiles à classifier par les apprenants précédents. Donc à chaque itération, un nouvel apprenant faible est entraîné en fonction Analyse de sentiment Twitter de l’erreur faite par tous les apprenants. 3.1.2. G RADIENT BOOSTING M ACHINES - GBM Pour faire le lien avec le cadre statistique, une méthode de boosting basée sur la descente de gradient a été formulée (Freund Y., Schapire R., 1997), (Friedman J., Hastie T., Tibshirani R. , 2000), (Friedman J. , 2001). Cette formulation du boosting a été appelée les gradient boosting machines (GBMs). Dans l’apprentissage avec GBM, des nouveaux modèles sont entraînés pour donner une estimation plus précise de la réponse. L’idée principale derrière cette nouvelle méthode est de construire de nouveaux apprenants pour qu’ils soient corrélés de façon maximale avec le gradient négatif de la fonction de perte, associée à l’ensemble des apprenants. Notons que la plupart des compétitions en data science sont remportée par des méthodes de gradient boosting. convolutions sont créées sur la couche d’entrée et sont utilisées pour calculer la sortie. Cela résulte en des connexions locales où chaque région de l’entrée est connectée à un neurone dans la sortie. Chaque couche applique différents filtres et agrège les résultats de chaque filtre. Chaque filtre crée un segment de l’image contenant des caractéristiques de bas niveau pour le rendre dans une représentation de plus haut niveau (principe de compositionnalité). De plus, les convolutions rendent le problème invariant à la position (rotation, translation, changement de taille). C’est pourquoi les CNN sont grandement utilisés dans le traitement d’images. 3.2.2. CNN POUR L’ ANALYSE DE SENTIMENTS À la place des pixels d’une image, nous utilisons une matrice représentant les phrases et les mots de notre corpus. Chaque ligne de la matrice correspond à un mot (plus précisément à son « plongement de mots » (word embedding)). La figure 4 montre un réseau de neurones convolutifs appliqué à une tâche de classification de textes. 3.1.3. GBM POUR LA CLASSIFICATION DE TEXTE Une des propriétés importantes des GBMs est la possibilité de construire des modèles creux très utilisés dans la classification de textes et, plus précisément, dans l’analyse de sentiments. 3.1.4. XG BOOST XGboost est une implémentation avancée des GBM. Ils diffèrent sur plusieurs points : — Les GBM n’ont pas de régularisation qui prévient le sur-apprentissage alors que XGboost en a une automatiquement intégrée. — Les GBM arrêtent de séparer les nœuds lorsqu’ils trouvent une perte négative dans la branche (c’est un algorithme glouton). Xgboost, quant à cette méthode, sépare jusqu’à une certaine profondeur (donnée en paramètre) et commence à tailler dans le chemin inverse et supprime les branches qui n’ont pas de gain positif. 3.2. Réseaux de neurones - CNN Un réseau de neurones convolutifs (Convolutional Neural Networks) est un type particulier de réseau de neurones. Ce type de réseaux est généralement utilisé pour le traitement d’images mais nous l’appliquons sur une tâche de classification de textes. 3.2.1. D ÉFINITION D ’ UN CNN Une architecture CNN est formée par plusieurs couches alternant entre couches de convolution et couches d’agrégation (pooling). Dans un réseau de neurones convolutifs, les 3.2.3. P OOLING La particularité des réseaux de neurones se trouve aussi dans les couches d’agrégations qui sont utilisées après les couches de convolutions. Plusieurs méthodes existent pour faire cette tâche et nous utilisons celle qui applique l’opération max au résultat de chaque filtre. L’agrégation a plusieurs avantages dont l’assurance que la matrice en sortie sera d’une taille fixe égale au nombre de filtres utilisés (une agrégation par filtre). Ainsi, cela permet d’utiliser des phrases de tailles différentes et des tailles de filtres différents pour obtenir toujours les mêmes dimensions en sortie. En plus de cela, cette méthode fait elle aussi de la sélection de caractéristiques car chaque filtre essaiera de détecter une caractéristique spécifique (comme l’utilisation des marques négatives). Figure 4. Illustration d’un CNN pour une classification de texte Analyse de sentiment Twitter 3.2.4. A RCHITECTURE Nous utilisons le prétraitement expliqué dans la section précédente, segmentons nos phrases et les transformons en matrice de phrases, chaque ligne est une représentation vectoriel de chaque token. Nous utilisons un modèle préentraîné de GloVe (Jeffrey Pennington, Richard Socher, and Christopher D Manning., 2014) (Global Vectors for Word Representation), un modèle indexant les mots dans un vocabulaire. Nous notons la dimension d’un vecteur mot par d et si la taille d’une phrase est notée s, alors la dimension de la matrice de la phrase sera s × d. De plus, nous utilisons la méthode du zero-padding pour rendre la taille de chaque vecteur mot fixe et égale à d. Ainsi, nous pouvons traiter chaque phrase comme étant une image et appliquer des filtres comme définis plus haut. Il est conseillé d’utiliser des filtres de largeur équivalente à la dimension des vecteurs (i.e., d). Après l’étape de convolution, nous utilisons la méthode du max pooling que nous donnons à une fonction d’activation de type softmax pour générer la classification finale. Finalement, l’optimisation de notre réseau est fait par la méthode Adam (Kingma, D. P., & Ba, J. L., 2015) qui calcule un taux d’apprentissage pour chaque paramètre. SentiWordNet hashing 0 0 1 1 2 2 4.1. XGboost Nous comparons les résultats avec et sans l’utilisation de la méthode du hashing trick, nous regardons les résultats avec l’utilisation de SentiWordNet. De plus, nous ajoutons une méthode de sélection de caractéristiques. Finalement, nous comparons les résultats lorsque nous normalisons les textes avec un tf-idf. 4.1.1. H ASHING TRICK Nous commençons par présenter, dans le tableau 3, les résultats que nous avons obtenus lors de l’utilisation du hashing trick. Nous montrons que la force de la méthode réside essentiellement dans la réduction du temps de vectorisation. v. entraînement v. test 0.7966 0.782 0.7994 0.7855 0.7984 0.7838 17.95 11.3 16.72 12.9 16.91 12.4 0.02 0.02 0.01 0.02 0.01 0.01 X X X Table 3. Temps de vectorisation (v.) en secondes avec et sans Hashing trick 4.1.2. A MÉLIORATION DES NÉGATIONS Nous avons tester trois modèles (pour chaque calcul de scores de SentiWordNet et sans) avec simultanément le paramètre négation. Les scores obtenus sont écrits dans la table 4. Nous pouvons remarquer que l’amélioration des formes négatives seule fait baisser la précision du modèle mais en ajoutant les scores de polarité de SentiWordNet, la précision augmente jusqu’à 79,94%. SentiWordNet précision-score 0 1 2 0.7827 0.7994 0.7939 4. Résultats Nous comparons les résultats obtenus entre la méthode de gradient boosting et le réseau de neurones convolutifs avec différents pré-traitements. Nous utilisons une sous-partie des données, soient 500000 données aléatoirement tirées sur les 1600000 disponibles, pour que les analyses soient plus rapides (et nous avons vu que les résultats sont peu différents avec plus de données). précision-score Table 4. Negation avec SentiWordNet 4.1.3. S ÉLECTION DE CARACTÉRISTIQUES Nous montrons maintenant l’efficacité de la sélection de caractéristiques. Nous améliorons le meilleur score obtenu dans la sous-partie précédente en ajoutant la sélection de caractéristiques avec SelectKBest (k = 500000) et nous comparons avec le hashing trick (Figure 5). SentiWordNet hashing 1 1 X S.C précision-score X 0.781 0.802 Table 5. Sélection de caractéristiques (S.C) vs hashing trick (avec négation) 4.1.4. TF-IDF Nous essayons d’ajouter la normalisation des textes avec le tf-idf. C’est une méthode très souvent utilisée dans la classification de textes qui donne de l’information par rapport à l’occurrence des mots. Nous utilisons le meilleur modèle obtenu aux étapes précédentes et normalisons en tf-idf (Figure 6). Analyse de sentiment Twitter tf-idf précision-score X 0.802 0.7883 Table 6. TF-IDF Un problème rencontré lors de l’utilisation du tf-idf sur des tweets vient de la longueur des tweets. Cela crée une borne supérieure au TF (fréquence des termes) qui réduit l’importance des poids. De plus, le vocabulaire utilisé sur Twitter est immense, de nouveaux mots sont souvent créés et cela rend la représentation vectorielle des tweets problématique. 4.1.5. U N MOT SUR LE H ASHING TRICK La méthode du hashing trick offre un gain de temps pour la vectorisation non négligeable. Nous voyons surtout la différence sur les corpus contenant beaucoup de de données à vectoriser. Plus le vocabulaire est grand, plus la matrice contenant le sac de mots sera grande. En effet, chaque ligne aura la taille du vocabulaire alors que chaque ligne dans le hashing trick ne contient que les mots du vocabulaire qui constituent la phrase. Néanmoins, la performance est souvent réduite. La Table 7 donne le temps de vectorisation avec et sans la méthode du hashing trick sur le corpus entier (1600000 tweets). Nous voyons la différence énorme qu’apporte cette méthode (plus de 21 minutes contre seulement 24 secondes pour un taux de différence de performance d’environ 2% en moyenne). modèle, les résultats sont meilleurs lorsqu’un seul score est utilisé. L’amélioration des formes négatives permet également d’augmenter le score de précision. Ces deux paramètres sont nécessaires pour obtenir un modèle adéquat. Finalement, le meilleur score obtenu pour xgboost est de 0.802% avec la sélection de caractéristiques, la négation et un seul score pour SentiWordNet sur la base de données Sentiment140. 4.2. CNN Nous transformons les phrases en séquences et essayons l’amélioration des négations. Nous comparons aussi les résultats avec et sans GloVe. Nous n’utilisons ni SentiWordNet ni la sélection de caractéristiques car les CNN ne prennent que des séquences. Nous utilisons une taille de lots de 500 et 250 filtres de longueur 3. 4.2.1. A MÉLIORATION DES NÉGATIONS Nous essayons l’amélioration des négations appliquée aux réseaux de neurones convolutifs. Nous voyons une très légère augmentation (10−3 ) de la précision du modèle (Figure 8). négation précision-score X 0.771 0.777 Table 8. négation sur les CNN 4.2.2. U TILISATION DE G LOV E hashing trick v. train time v. test time X 1284s 24s 33s 1.36s Table 7. Hashing trick - temps de vectorisation 4.1.6. I NTERPRÉTATIONS A chaque fois que la technique du hashing trick est utilisée, le modèle perd en précision. Nous avons expliqué, dans la sous-section sélection de caractéristiques, l’utilisation d’une technique qui consiste à supprimer les mots trop ou pas assez fréquents dans le vocabulaire. Cette technique n’est utilisée que lorsque la méthode de hashing trick n’est pas utilisée. La suppression de mots pourrait donc être une explication quant à la différence de performance du modèle. Utiliser ou non le hashing trick afin de gagner du temps lors de la vectorisation est une question de choix entre vitesse et performance. L’utilisation de SentiWordNet produit une amélioration du GloVe est un modèle pré-entraîné sur les phrases et mots de Wikipédia pour le plongement de mots (word embeddings). Chaque mot est représenté par un vecteur de longueur d = 100 et représente la corrélation entre les mots. Dans notre réseau de neurones, GloVe nous permet d’initialiser nos vecteurs aux poids correspondant à ceux de GloVe. Nous comparons donc l’utilisation de ce modèle avec une initialisation des poids uniforme par la racine carrée du nombre d’entrée (Lecun initialisation) dans la figure 9. Glove permet encore une légère amélioration de notre modèle. GloVe précision-score X 0.7883 0.7904 Table 9. GloVe Analyse de sentiment Twitter 4.3. Précision, rappel et F1-score 5.2. Méthode La précision seule ne permet généralement pas de garantir que le modèle fonctionne correctement. C’est pourquoi la table 10 montre les résultats en précision, rappel et f1-score qui rendent la cohérence du modèle plus précise. 5.2.1. P RINCIPE XGBoost précision rappel f1-score support positif negatif 0.83 0.78 0.75 0.85 0.79 0.81 177 182 0.80 0.80 0.80 359 CNN précision rappel f1-score support positif negatif 0.77 0.81 0.81 0.76 0.79 0.79 177 182 0.79 0.79 0.79 359 Table 10. Précision, rappel et F1-score Les résultats des deux modèles sont très proches mais le CNN a besoin de moins de pré-traitement pour atteindre un très bon score. De plus, le CNN entraîne le modèle beaucoup plus rapidement (3 époques sont suffisantes et prennent environ 3 minutes) que xgboost (environ 35 minutes). Après la phase d’apprentissage de nos meilleurs modèles sur le corpus entier de 1600000 tweets, nous sauvegardons les modèles pour pouvoir les utiliser pour prédire de futures données. Les données à prédire sont des données en temps réels prises de Twitter grâce à son API (et le module Tweepy 3 ). L’API Twitter donne certaines limites qui nous contraignent à récupérer seulement 1000 tweets. 5.2.2. T HÈME ET MODÈLES À CHOISIR Nous demandons à l’utilisateur de rentrer un thème sur lequel il souhaite avoir l’opinion des utilisateurs de Twitter. Le thème étant simplement une suite de mot (un seul mot au minimum) qui sera en commun à tous les tweets téléchargés. L’utilisateur choisi ensuite le modèle à utiliser puis peut choisir d’utiliser la ressource lexicale SentiWordNet pour enregistrer la polarité des mots qui servira à l’affichage. Cette description correspond à la Figure 5. Figure 5. Thème à rechercher 5. Application Dans cette section, nous présentons application permettant de donner l’avis des utilisateurs de Twitter sur un sujet donné. Nous expliquons nos motivations à la création de cette application et nous détaillons son fonctionnement. 5.2.3. P RÉ - TRAITEMENT Lorsque les tweets sont téléchargés, ils passent par la phase de pré-traitement qui correspond au modèle utilisé. 5.1. Introduction Les utilisateurs de Twitter postent des messages de leurs opinions en temps réel sur des sujets variés, parlent de leurs problèmes courants, se plaignent ou expriment leurs sentiments sur des produits qu’ils utilisent tous les jours. Plusieurs grandes entreprises utilisent les réseaux sociaux pour demander l’avis de leurs utilisateurs et avoir un sentiment général sur leurs produits. Ces mêmes compagnies peuvent améliorer leurs productions grâce aux avis postés sur ce genre de plate-formes. Nous créons donc une technologie permettant de détecter et rendre l’opinion général d’un thème (un produit, un film ou même une personnalité). — Si le modèle de gradient boosting est sélectionné, les phrases auront l’amélioration des négations, SentiWordnet, la sélection de caractéristiques et la transformation en sac de mots. — Si le modèle du réseau de neurones convolutifs est sélectionné, les phrases auront l’amélioration des négations, la transformation des phrases en séquences, le zero-padding et utilisera le plongement de mots avec GloVe. Même si nous ne téléchargeons que 1000 tweets, le pré-traitement est long pour une application (environ 40 secondes). Pour un déploiement en production de l’application, nous réduirions le nombre de tweets téléchargés (une centaine). 3. http ://www.tweepy.org/ Analyse de sentiment Twitter Figure 6. Love 5.3. Affichage Pour montrer le bon fonctionnement de l’application, nous montrons d’abord deux thèmes qui affichent un sentiment distingué des utilisateurs de la plate-forme puis nous affichons des thèmes qui pourraient être utiles aux entreprises concernées. Chaque image contient trois éléments à prendre en compte et deux couleurs. La couleur verte correspond à un sentiment positive alors que la couleur rouge correspond à un sentiment négatif. Les trois éléments sont quant à eux dénotés par les numéros 1, 2 et 3 sur la Figure 6 et nous allons maintenant les décrire. 1. Le premier élément donne le pourcentage de polarité des au plus 1000 tweets téléchargés (un thème peu commun n’aura pas forcément 1000 tweets). 2. Le deuxième élément donne le nombre de tweets positif et négatif téléchargés. 3. Le troisième et dernier élément affiche les 50 tweets les plus récents sur les 1000 téléchargés. Thème négatif : HATE Nous voyons que le thème est à 88% négatif et, donc, quasiment 900 tweets ont été prédits comme étant de sentiment négatif. C’est à quoi nous nous attendions. Figure 7. Hate Nous pouvons remarquer deux choses sur le dernier élément. Tout d’abord, nous voyons la date correspondant aux tweets téléchargés pour chaque ligne. Ensuite, nous pouvons voir en gras quelques mots (essentiellement le mot love). Ces mots correspondent au calcul de polarité effectué par SentiWordNet. Pour chaque mot des tweets, nous sauvegardons ses scores de polarité positif et négatif puis pour un sentiment d’un tweet prédit, nous affichons en gras, avec une échelle de valeur, le mot seulement pour le sentiment donné. Par exemple, dans une phrase positive, le mot love sera en gras avec une échelle de gras plus grande qu’un mot ayant un score positif plus faible et, dans une phrase négative, love ne sera pas mis en gras. 5.3.1. T HÈMES EXHIBÉS Nous montrons le bon fonctionnement de notre application pour les deux images suivantes Figures 6 et 7. Nos meilleurs modèles ont 80% de précision et ne sont pas parfaits, c’est pourquoi nous pouvons trouver de mauvaises prédictions. Thème positif : LOVE Nous voyons que le thème est à 80% positif et, donc, plus de 800 tweets ont été prédits comme étant de sentiment positif. C’est à quoi nous nous attendions. 5.3.2. T HÈMES UTILES Dans les images suivantes (Figure 8 et 9), nous prédisons deux entités pouvant être utiles aux concernés. Le premier thème choisi est celui des Oscars téléchargés au lendemain de la soirée. Le second thème est l’entreprise Comcast étant connue pour être l’entreprise la plus détestée des États-Unis 4 (c’est un fournisseur d’accès à internet). 4. http://finance.yahoo.com/news/ america-most-hated-companies-110032495.html Analyse de sentiment Twitter Au lendemain de la soirée des Oscars 2017 La soirée s’étant dans l’ensemble bien déroulée, il pourrait être essentiel que les organisateurs de l’événement s’intéressent au sentiment ressenti par les utilisateurs de Twitter. Nous obtenons un score à 72% positif. Un score donc plutôt positif (rappelons qu’il y a eu une erreur lors de l’annonce de l’oscar pour le meilleur film). Figure 8. Oscars 6. Conclusion Nous avons implémenté deux méthodes liées à l’analyse de sentiments avec des données provenant de la plate-forme Twitter. Nous avons constaté que les deux algorithmes donnent des résultats similaires. Avec le gradient boosting, nous pouvons modifier de nombreux paramètres et ajouter des caractéristiques que le réseau de neurones convolutifs ne peut pas prendre en compte. Les deux méthodes sont rapides mais le réseau de neurones l’est beaucoup plus. L’ajout de nouvelles caractéristiques et la sélection de caractéristiques permettent d’améliorer nos résultats et d’autres pré-traitements pourraient être appliqués pour capter plus précisément le sentiment d’une phrase. Sur les réseaux sociaux, les utilisateurs donnent très souvent leur opinion sur différents thèmes. C’est pourquoi nous avons développé une application permettant d’analyser les sentiments des utilisateurs de Twitter sur des messages récents. Références Das S. and Chen M. Yahoo ! for Amazon : Extracting market sentiment from stock message boards. 2001. Esuli A, Sebastiani F. SentiWordNet : A Publicly Available Lexical Resource for Opinion Mining. 2006. Sentiment vis à vis de Comcast Comcast obtient dans la plupart des sondages américain, l’oscar de la pire entreprise états-unienne. Il peut être intéressant d’analyser les résultats de l’analyseur de sentiment sur ce thème pour voir ce que les utilisateurs des réseaux sociaux en pensent. Nous obtenons un score à 67% négatif. Figure 9. Comcast Freund Y., Schapire R. A decision-theoretic generalization of on-line learning and an application to boosting. 1997. Friedman J. . Greedy boosting approximation : a gradient boosting machine. 2001. Friedman J., Hastie T., Tibshirani R. . Additive logistic regression : a statistical view of boosting. 2000. Go, Alec and Bhayani, Richa and Huang, Lei. Twitter Sentiment Classification using Distant Supervision. Processing, pp. 1–6, 2009. Jeffrey Pennington, Richard Socher, and Christopher D Manning. Glove : Global vectors for word representation. Proceedings of the Empiricial Methods in Natural Language Processing. 2014. Kingma, D. P., & Ba, J. L. Adam : a Method for Stochastic Optimization. 2015. Pang, B., Lee, L. and Vaithyanathan, S. Thumbs up ? : sentiment classification using machine learning techniques. 2002. Pang, Bo, and Lillian Lee. Opinion mining and sentiment analysis. 2008. Tianqi Chen, Carlos Guestrin. XGBoost : A Scalable Tree Boosting System. 2016.