Analyse de sentiment Twitter
Alwine Lambert
Gabriel Bellard
Guillaume Lorre
Karim Kouki
Abstract
Nous présentons une méthode d’analyse de senti-
ments à 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 gra-
dient boosting et un réseau de neurones convolu-
tifs. Nous présentons finalement une application
permettant de classifier des tweets récents.
Introduction
L’analyse de sentiment est une tâche de traitement auto-
matique 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’at-
tention non seulement de la part de la recherche scientifique
mais aussi par les domaines de la publicité et du marke-
ting. 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 utili-
sateurs envers un sujet spécifique.
Nous essayons deux différents modèles. L’un est un algo-
rithme 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 Senti-
WordNet (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éris-
tiques pour réduire l’espace de caractéristiques à un sous-
espace de caractéristiques pertinentes. Finalement nous
présentons une application permettant de récupérer de nou-
veaux 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éga-
tifs. 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 (po-
sitif 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 po-
sitif et négatif de l’ensemble de test. La table 1donne 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 800,000
négatif 800,000
total 1,600,000
Ensemble de test
positif 182
négatif 177
neutre 139
total 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)
4. le nom de l’utilisateur qui a posté le tweet (e.g, ro-
botickilldozr)
5. le texte du tweet (e.g, "I must think about posi-
tive..")
1.2. Caractéristiques des tweets
Nous présentons rapidement dans cette sous-partie les prin-
cipales caractéristiques d’un tweet et de Twitter.
1.2.1. LONGUEUR
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. DISPONIBILITÉ DES DONNÉES ET MODÈLE DU
LANGAGE
Les sujets abordés sur Twitter sont très divers et l’API twit-
ter 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-
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
.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.
Ici, nous avons représenté les données brutes avec et
sans aucun pré-traitement sur les deux représentations gra-
phiques 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.
2. Matériels et méthodes
Nous présentons maintenant toute la méthodologie du pré-
traitement des données, nous expliquons nos méthodes uti-
lisées pour la vectorisation des textes et présentons l’utili-
sation 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 éli-
miner le bruit pour normaliser nos phrases.
Nous supprimons les balises HTML avec le module Beau-
tifulSoup 2. Nous supprimons aussi tous les caractères qui
ne sont pas des lettres et donc, supprimons toute la ponc-
tuation 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 minus-
cule.
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 sup-
primer 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 Twit-
ter. Dès qu’un mot contient des lettres identiques qui se
répètent plus de deux fois, elles sont remplacées par seule-
ment 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 beau-
coup d’informations sur le sentiment de la phrase. Nous
conservons donc ce mot, mais le caractère hashtag est sup-
primé.
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. EFFET DU PRÉTRAITEMENT
La Table 2montre l’effet de ces prétraitements sur le
nombre de mots utiles dans le texte.
Réduction Nombre de caractéristiques % de l’original
None 1 578 617 100%
Username 64 982 95.88%
URLs 708 571 55.11%
Lettres répétées 199 784 87.34%
All 973 337 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 ndé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, malheureuse-
ment, 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. UN 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 : scoreg=scorepscoren
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. DEUX 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 ac-
tions en bourse. Ils ont déterminé que la négation dans une
phrase inverse le sens de la phrase. Ils ont discuté sur com-
ment 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 à Senti-
WordNet. Cependant, il est à noter que la méthode est li-
mité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 di-
mension 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 kpremiè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 gar-
dons que les mots qui apparaissent au moins 2 fois et sup-
primons 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 utili-
sons 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 classifica-
tion.
3.1.1. BOOSTING
La principale idée derrière le boosting est de combiner plu-
sieurs simples et modérément imprécis apprenants en un
seul et très précis apprenant. Les apprenants faibles sont en-
traî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. GRADIENT BOOSTING MACHINES- 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.
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 clas-
sification de textes et, plus précisément, dans l’analyse de
sentiments.
3.1.4. XGBOOST
XGboost est une implémentation avancée des GBM. Ils dif-
fèrent sur plusieurs points :
Les GBM n’ont pas de régularisation qui prévient le
sur-apprentissage alors que XGboost en a une auto-
matiquement 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 (don-
née en paramètre) et commence à tailler dans le che-
min 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 trai-
tement d’images mais nous l’appliquons sur une tâche de
classification de textes.
3.2.1. DÉFINITION DUN CNN
Une architecture CNN est formée par plusieurs couches al-
ternant entre couches de convolution et couches d’agréga-
tion (pooling). Dans un réseau de neurones convolutifs, les
convolutions sont créées sur la couche d’entrée et sont utili-
sé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 pour-
quoi les CNN sont grandement utilisés dans le traitement
d’images.
3.2.2. CNN POUR LANALYSE DE SENTIMENTS
À la place des pixels d’une image, nous utilisons une ma-
trice 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 4montre un réseau de neurones convolutifs appli-
qué à une tâche de classification de textes.
3.2.3. POOLING
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 dimen-
sions 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
1 / 10 100%