Analyse de sentiment Twitter

publicité
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.
Téléchargement