alt alt

Notre expérimentation comporte deux étapes : l’apprentissage et les tests tels qu'illustrés par la figure, avant d'entrer dans les détails, nous décrivons d'abord notre environnement de travail.
alt

Environnement de travail

Nous avons utilisé le langage de programmation Python, et l'environnement de développement Jupyter, qui est un IDE orienté vers une utilisation scientifique de Python. Pour nous concentrer sur notre expérimentation et profitons de la puissance du langage Python, nous avons utilisé les packages suivants :

  • CSV : (comma separated value) Module CSV pour la lecture et l'écriture de données au format CSV.
  • re : (Regular expressions) Ce module fournit des opérations correspondant aux expressions régulières.
  • numpy : (NUMeric Python) est une bibliothèque numérique apportant le support efficace de larges tableaux multidimensionnels, et de routines mathématiques de haut niveau (algèbre linéaire, statistiques, .. etc.).
  • Sklearn : est un module en Python pour l'apprentissage automatique.
  • Nltk : (Natural Language Toolkit) est une plate-forme pour la création de programmes Python pour travailler avec des données de langage naturel.
  • SpaCy : bibliothèque Python de traitement automatique du langage naturel très évoluée.
  • pandas : bibliothèque Python permettant la manipulation et l'analyse des données
  • Selenium : est un outil pour automatiser les navigateurs. Il est principalement utilisé pour les tests, mais il est également très utile pour le Web Scraping.
  • langdetect : module pour la détection de langue.

Phase d'apprentissage

La figure suivante donne un aperçu de ce processus. Nous décrirons dans les paragraphes suivants les tâches principales de chaque étape.
alt

Collecte et annotation de tweets

Nous avons testé deux méthodes pour collecter les tweets concernant la conférence annuelle Devoxx Morocco. Nous n'avons trouvé que 159 tweets en anglais, ce qui n'est pas suffisant pour effectuer l’analyse des sentiments sous l’approche d'apprentissage automatique. Dans ce contexte, nous avons associé d'autres événements Devoxx à travers le monde pour augmenter le nombre de tweets.

En ce qui concerne l’annotation de tweets, Nous avons étiqueté les tweets à l'aide de trois outils dont nous parlerons à la section qui suivre. Cet ensemble de données comporte trois classes de sentiments, à savoir positive, négative et neutre.

Collecte de tweets

Nous avons utilisé deux manières pour récupérer les tweets sous le Hashtag #DevoxxMA :

  • Web scraping avec Selenium: il faut environ 10 minutes au Selenium pour récupérer environ 850 tweets, ce qui est très lent. Mais nous avons atteint tous les tweets possibles.

  • Twitter Search API (API REST): nous avons utilisé l'API de recherche Twitter où nous pouvons récupérer les tweets d'un fil d’actualité utilisateur (c'est-à-dire la liste des tweets postés par un compte), mais il semble que nous recevions moins de tweets. En fait, le pourcentage des tweets indexés et consultable pour le recherche est d'environ 7 jours de tweets disponibles via l'API. Par conséquent, nous avons décidé de passer vers le Web scraping avec Selenium, qui renvoie plus de tweets. Et qui nous a permis de sélectionner 1562 tweets

Annotation de tweets

Pour poursuivre l’approche de l’apprentissage supervisé, nous devons connaître le type de sentiment (polarité) de chaque tweet, ce qui peut être fait de différents outils :

  • Vader: est un outil d’analyse des sentiments basé sur des règles et sur le lexique, spécifiquement adapté aux sentiments exprimés dans les médias sociaux. Vader nous a donné le résultat :

  • TextBlob:TextBlob est une bibliothèque Python pour le traitement de données textuelles. Il fournit une API simple permettant de se plonger dans des tâches de NLP telles que l'analyse des sentiments.

  • Google: L'API de langage naturel est un outil de Google qui propose plusieurs méthodes d'analyse et d'annotation de texte, telles que l'analyse des sentiments.

Les trois outils nous a donné le résultat:
alt

Vader nous donne plus de sentiments négatifs que les autres, nous préférerons donc Vader, car la classification semble meilleure. À ce stade, notre Dataset de se présente comme suit :
alt

Prétraitement de tweet

nous avons effectué un nettoyage de données en suivant les étapes suivantes :

  1. Remplacer les émoticônes : en utilisant un dictionnaire des émoticônes.
  2. Remplacer les abréviations : en utilisant un dictionnaire d'abréviations.
  3. Supprimer les identifiants des utilisateurs @name : en utilisant l’expression régulière ‘@ [^\s] +’
  4. Supprimer les Hashtags #mot-clé : en utilisant l’expression régulière r’# ([^\s] +)’
  5. Supprimer les liens web (URL) : en utilisant l’expression régulière ` ((www.[^\s]+)|(https?:// [^\s] +))’
  6. Supprimer les ponctuations et les caractères spéciaux comme : & ~ ”#’ {([| -` _ \ ^ @]]} = + - * /%
  7. Supprimer les caractères répétés (looooove : love, coooool, cool).
  8. Supprimer les chiffres.
  9. Supprimer les commandes telles que VIA, RT et MD.
  10. Supprimer les mots vides (stopwords) : en utilisant le package Nltk.
  11. Racinisation et lemmatisation du texte : en utilisant le package Nltk

Le tableau suivant donne quelques exemples de tweets avant et après le prétraitement :
alt

Extraction et sélection des descripteurs (features)

Nous avons identifié 1675 descripteurs (features). Ces descripteurs jouent un rôle important dans la classification des sentiments. Pour cela, nous avons testé plusieurs combinaisons de schémas d'extraction et de pondération afin d'assurer la meilleure qualité des modèles développés. Nous avons proposé deux représentations : le modèle du sac de mots (bag of words) et le modèle de pondération TF-IDF avec le modèle N-gramme.

Classification

En pratique, il est toujours recommandé de comparer les performances d'au moins quelques algorithmes d'apprentissage afin de sélectionner le meilleur modèle pour le problème considéré. Celles-ci peuvent différer par le nombre de descripteurs ou d'échantillons, la quantité de bruit dans un Dataset et le fait que les classes sont linéairement séparables ou non.
Dans ce contexte, nous avons appliqué les classificateurs les plus utilisés dans la littérature à l'analyse des sentiments. En particulier, de nombreux classificateurs ont été appliqués sur notre Dataset. En ce qui concerne l'implémentation, nous avons utilisé l'implémentation du package Sklearn des classificateurs utilsés.

Phase de Test et évaluation

Après la phase de d’apprentissage, nous passons à la phase de test pour évaluer notre classificateur. Pour la validation des performances, nous utilisons la règle de 80% à 20% pour valider notre modèle, telle que 80% correspondant à la phase d’apprentissage et 20% pour la phase de test.

La combinaison des schémas d’extraction et de pondération nous a permis de tester différentes configurations. Le tableau résume les résultats des expériences menées :

alt

Pour chaque configuration, nous avons présenté le taux de bon classement (Accuracy), obtenu sur la base de l’échantillon de test. En général, ces résultats montrent que les meilleures performances ont été obtenues avec la combinaison [Naïve Bayes – TF-IDF]

La table montre les résultats des classificateurs pour le modèle de représentation TF-IDF :
alt

Les résultats d’extraction d’aspects sont reportés dans la Table. Ce dernier montre que les meilleures performances sont obtenues en précision (99.10%), rappel (95.66%) et F1-mesure (97.35%) avec la configuration Naïve Bayes + TF-IDF.

Dans notre prochaine article, nous allons montrer notre expérimentation avec l'analyse des sentiments à base d'aspects.