Analyse des Sentiments sur Twitter avec HMM
Analyse des Sentiments sur Twitter avec HMM
Par
Rami Chaymae
Encadré par :
Pr. Safae El Ouahabi
Avant tous nous remercions ALLAH tout puissant de nous avoir donné la force et le courage mais surtout
la volonté nécessaire pour la réalisation de ce mini projet.
Tout d’abord, ce travail ne serait pas aussi riche et n’aurait pas pu avoir le jour sans l’aide et l’encadrement
de Prof Safae El Ouahabi, je la remercie pour la qualité de son encadrement exceptionnel, pour sa patience
et sa rigueur.
Enfin nous tenons à remercier l’ensemble du corps enseignant du Master "Big data et systèmes intelli-
gents".
Résumé
Le présent rapport est la synthèse de notre mini projet au sein de la Faculté pluridisciplinaire de Nador
et sous l’encadrement de Madame Safae El Ouahabi. Ce projet a comme objectif de proposer un modèle
intelligent capable de classifier une base de données composée des tweets tout en appliquant les concepts
étudiés pendant notre formation. Pour atteindre cet objectif, nous nous sommes basés sur des concepts
parmi les plus importants qui ont gagné en popularité ces dernières années en raison de leur grande impor-
tance dans notre vie quotidienne : Intelligence Artificielle, Machine Learning. Bien que ce travail soit plus
spécifique à l’analyse des sentiments dans les réseaux sociaux , Twitter. Ainsi, nous avons dû, en premier
lieu commencer par comprendre la structure et la description mathématique de l’algorithme d’apprentis-
sage : Hidden Markov Model. Au second lieu, nous avons pu extraire les caractéristiques spécifiques d’un
tweet, par des différentes methodes afin d’appliquer la méthode de l’intelligence artificiel sur une dataset
qui contient des tweets de 3 classes différentes : positive , negatives , neutres.
Table des matières
1 Introducion 6
5 Partie pratique 20
5.1 Nettoyage des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
5.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.3 L’extraction des caractéristiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.4 Code final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.4.1 Preparer dataset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.4.2 Hmm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.4.3 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.4.4 snscrape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6 Conclusion 35
4
Liste d’abréviations
Introducion
L’intelligence artificielle (IA), est un processus consistant à transmettre des données, des informations
et une intelligence humaine à des machines afin d’être capables de penser et d’agir comme des humains
et accomplir des tâches en apprenant et en résolvant des problèmes. Nous l’utilisons tous des certaines
de fois par jour sans même de se rendre, chaque fois que nous effectuons une recherche à Google, une
des raisons pour laquelle nous tombons sur des résultats plutôt pertinents car il y’a un algorithme de
l’IA qui a appris comment de trouver ces résultats parmi des milliards des résultats possibles. Machine
Learning (ML) et Deep Learning (DL) sont les deux concepts les plus importants qui rendent l’IA possible.
Nous comptons tout plein de modèle comme machines à vecteurs de support, l’arbre de décision, Hidden
Markov model (HMM) . . . Nous distinguons deux techniques de IA, l’apprentissage supervisé (Supervised
Learning) qui s’appuie sur des données ou exemples étiquetés pour entraîner des modèles d’IA prédictifs
et non supervisé (Unsupervised Learning) qui consiste à entraîner des modèles, sans réaliser d’étiquetage
manuel ou automatique des données au préalable, tel que des algorithmes regroupent les données en
fonction de leur similitude, sans aucune intervention humaine .
Parmi les applications de L’IA est l’analyse des sentiments dans les réseaux sociaux, et c’est l’un des
objectifs principals de ce travail. Donc c’est quoi l’analyse des sentiments ? l’analyse des sentiments (ou
sentiment analysis en anglais) est le processus qui consiste à déterminer l’opinion, le jugement et l’émotion
qui se cache derrière le langage naturel. Elle fait partie de ce qu’on appelle le text mining (ou exploration et
analyse textuelle). Cette technique analytique consiste à extraire le sens de nombreuses sources textuelles,
comme des réponses à des sondages, des critiques en ligne ou encore des commentaires sur les réseaux
sociaux. Un score est ensuite appliqué en fonction du sentiment exprimé : négatif, positif ou neutre. Cette
transcription est réalisée grâce au traitement du langage naturel : Natural Language Processing (NLP).
Dans ce travail, il faut comprendre comment la machine peut classer si un tweet appartient à une catégorie
ou non. Pour cela, nous utiliserons une méthodes de l’IA :HMM. Tel que la première étape consiste à
comprendre sa structure mathématique. Notre base de données utilisée de Twitter pour la classification
est une base de données non structurée, et comme la machine ne peut pas la comprendre, nous avons besoin
d’une méthode de la convertir en une base de données structurée qui contient des données réelles. Et parmi
les méthodes de traitement des textes, nous trouvons les term frequency-inverse document frequency (TF-
IDF) et Bag of word (BoW), qui extraient les caractéristiques de chaque entrée text à travers plusieurs
étapes. Puis, nous formons le modèle sur un ensemble de données et nous le testons sur un autre pour
assurer un bon apprentissage du système.
6
Chapitre 2
2.1 Définition
NLP est un sous-domaine de l’IA qui a vocation à donner la faculté à un programme informatique de
comprendre et d’interpréter le langage tel qu’il est parlé et écrit par les êtres humains, dans toutes ses
complexités et ses nuances. Ainsi, un algorithme qui utilise le NLP est capable d’analyser les phrases, de
saisir le sens des mots dans leur contexte.
Le but est de fluidifier les communications entre les hommes et les machines, en aidant ces dernières à
parler le même langage que les premiers. Avec deux effets immédiats et tangibles : la simplification de
l’utilisation des technologies, et l’automatisation rapide des tâches rébarbatives grâce à la capacité des
programmes à traiter d’énormes volumes de données brutes en un temps record. Ces informations, une
fois structurées, peuvent ensuite être exploitées.
Dans les faits, NLP est déjà employé pour des applications utilisées au quotidien par les particuliers et
les entreprises (sans même parler encore des moteurs de recherche et de l’API Google NLP). Quelques
exemples concrets :
Les traducteurs automatiques, comme Google Translate, qui restituent un texte dans la langue souhaitée
de manière instantanée.
Les assistants vocaux, ces logiciels intégrés aux smartphones ou aux ordinateurs (Siri, Cortana) et aux
enceintes connectées (Google Home, Alexa).
Les chatbots, des programmes qui simulent des conversations humaines et qui sont capables de répondre
aux questions simples des utilisateurs (ils pullulent sur les sites web des entreprises).
Les correcteurs automatiques, comme celui qui est intégré à Microsoft Word, ou le logiciel Antidote, etc.
De façon plus générale, tous les programmes qui s’appuient sur la compréhension du langage naturel
reposent sur une technologie NLP, et tous ont pour but de simplifier les tâches humaines. On est donc très
loin des fantasmes parfois associés aux progrès de l’IA, avec ses machines qui prennent le pouvoir !
NLP mêle des compétences informatiques, mathématiques et linguistiques. Dans le domaine de l’IA, il se
place au croisement du ML et DL, comme on peut le voir sur le schéma ci-dessous :
7
2.2 Bibliothéques
2.2.1 SpaCy
spaCy est une bibliothèque Python pour le traitement automatique du langage naturel (NLP). Elle est
conçue pour être rapide, efficace et extensible. Elle fournit des outils pour le prétraitement des données
textuelles, l’analyse syntaxique, la lemmatisation, et bien d’autres tâches de NLP.
2.2.3 Scikit-learn
Scikit-learn est construit sur les bibliothèques NumPy, SciPy et matplotlib, qui offrent une grande variété
de fonctions mathématiques et statistiques, ainsi que des fonctions de visualisation.
Scikit-learn comprend de nombreux algorithmes populaires d’apprentissage supervisé et non supervisé,
tels que la régression linéaire, les arbres de décision, les SVM (Support Vector Machines), le clustering
K-Means, le PCA (Principal Component Analysis), etc.
La bibliothèque offre également des fonctions de prétraitement des données, telles que l’extraction des
caractéristiques. Scikit-learn fournit également des outils pour l’évaluation des performances des modèles,
tels que le calcul de la précision, le rappel, le F1-score, etc.
8
Chapitre 3
3.1 Introduction
HMM est l’acronyme pour "Hidden Markov model". Il est considéré comme un algorithme de machine
learning plutôt qu’un algorithme de deep learning. C’est un type de modèle probabiliste utilisé pour
représenter des séquences de données qui peuvent être observées de manière incomplète ou indirecte dans
le temps. Il est appelé "caché" car il utilise des probabilités cachées pour décrire la transition entre les
états d’un système, qui ne sont pas directement observables.
1. N, le nombre d’états du modèle. Nous désignons l’ensemble de tous les états possibles comme suit S
= {S1, S2, - - - , SN } , l’état à l’instant t est notté qt. (dans notre cas de classification, les états sont les
classes )
2. M, le nombre de symboles d’observation distincts par état, c’est-à-dire la taille de l’alphabet discret de
l’ensemble de sortie. Nous désignons par V = v1, v1, v2 l’ensemble de tous les symboles de sortie possibles
9
. Le symbole de sortie au temps t par Ot, et la séquence de symboles symboles observés est désignée par
O = O1O2 - - - OT .(dans notre cas de classification, les observations sont les mots de chaque classe) .
π = πi = πi = P [qi = Si ], 1 ≤ i, j ≤ N
λ = (A, B, π)
Un problème d’apprentissage consiste à ajuster le paramètre du modèle , de sorte que que P (O|λ) soit
maximisé.
10
états ( N , P ) . Donc quel est la probabilité de cette séquence observée étant donné les paramétres de
HMM ? Nous définissons au début toutes les chaînes possibles des états et nous obtenons
Nombre d’obseravations
Nombre d’états
L’objectif de l’algorithme avancé est de calculer la probabilité conjointe p(xt , y1:t ), où pour des raisons
de commodité de notation nous avons abrégé x(t) comme xt = (X0, X1, X2) et (Y0,Y1,...,Yt) en tant
que y1:t . Calculer p(xt , y1:t ) directement nécessiterait une marginalisation sur toutes les séquences d’état
possibles x1:t−1 , dont le nombre croît exponentiellement avec t. Au lieu de cela, l’algorithme forward tire
parti des règles d’indépendance conditionnelle du HMM pour effectuer le calcul de manière récursive.
Pour démontrer la récursion, laissons
En utilisant la règle de la chaîne pour développer p(xt , xt−1 , y1:t ), on peut alors écrire
Parce que yt est conditionnellement indépendant de tout sauf de xt , et xt est conditionnellement indé-
pendant de tout sauf de xt−1 , cela se simplifie en
La condition initiale est définie comme une certaine probabilité préalable sur x0 comme
α1 (x0 ) = p(x0 )
11
Une fois la probabilité conjointe αt (xt ) = p(xt , y1:t ) a été calculée à l’aide de l’algorithme direct, nous
pouvons facilement obtenir la probabilité conjointe correspondante p(y1:t ) comme Une fois la probabilité
conjointe
αt = p(y1:t ) = Σxt p(xt , y1:t ) = Σαt (xt )
et la probabilité conditionnelle requise p(xt |y1:t ) comme
p(xt , y1:t ) αt (xt )
p(xt |y1:t ) = =
y1:t αt
Une fois la probabilité conditionnelle calculée, nous pouvons également trouver l’estimation ponctuelle de
xt . Par exemple, l’estimation MAP de xt est donnée par
xM
t
AP
= arg max p(xt |y1:t ) = arg max αt (xt )
xt xt
3.4 Viterbi
L’algorithme de forward et l’algorithme de Viterbi sont deux algorithmes largement utilisés pour résoudre
des problèmes liés aux HMM. Bien qu’ils soient similaires dans leur structure et leur utilisation des pro-
babilités, ils ont des objectifs différents et des résultats différents.
L’algorithme de forward est utilisé pour calculer la probabilité d’une séquence d’observations donnée
dans un modèle de Markov caché. L’objectif est de calculer la probabilité d’observation de l’ensemble des
séquences possibles. L’algorithme de forward peut également être utilisé pour calculer la vraisemblance
d’un modèle, c’est-à-dire à quel point le modèle correspond à la séquence observée.
En revanche, L’algorithme de Viterbi est utilisé pour trouver la séquence d’états cachés la plus probable,
donnée une séquence d’observations. L’objectif est de trouver la séquence d’états cachés qui correspond le
mieux à la séquence observée. Donc l’algorithme de viterbi est le suivant :
Initialisation :
δ1 (i) = πi bi (O1 ), 1 ≤ i ≤ N
ψ1 (i) = 0, 1 ≤ i ≤ N
12
où δt (i) est la probabilité maximale d’être dans l’état qi après avoir observé les t premières observations
et ψt (i) est l’indice de l’état précédent le plus probable menant à qi à l’étape t.
Récursion :
δt (j) = max δt−1 (i)aij bj (Ot ), 2 ≤ t ≤ T, 1 ≤ j ≤ N
1≤i≤N
où δt (j) est la probabilité maximale d’être dans l’état qj après avoir observé les t premières observations,
en supposant que l’état précédent était qi et ψt (j) est l’indice de l’état précédent le plus probable menant
à qj à l’étape t.
Terminaison :
P ∗ = max δT (i)|
1≤i≤N
Cheminement arrière :
3.5 Conclusion
En conclusion, l’algorithme de forward et l’algorithme de Viterbi sont deux algorithmes importants pour
travailler avec les modèles de Markov cachés, mais ils ont des objectifs différents et des résultats diffé-
rents. En termes de structure, l’algorithme de Viterbi utilise une approche de programmation dynamique
similaire à l’algorithme de forward, mais il utilise une approche différente pour le calcul des probabilités.
L’algorithme de forward est utilisé pour calculer la probabilité d’observation de l’ensemble des séquences
possibles, tandis que l’algorithme de Viterbi est utilisé pour trouver la séquence d’états cachés la plus
probable pour une séquence d’observations donnée.
13
Chapitre 4
N’oubliez pas que toutes ces procédures ne sont pas toujours nécessaires et qu’elles ne doivent pas toutes
être effectuées dans l’ordre indiqué. Lors de la suppression des chiffres et de la ponctuation, par exemple,
l’ordre dans lequel ils sont éliminés peut ne pas avoir d’importance. Cependant, avant de procéder à ces
procédures, nous mettons généralement le texte en minuscules.
4.2 Pre-processing
Pourquoi avons-nous besoin de la phase de prétraitement du texte ? La réponse est assez simple : tout
projet NLP comprend une phase de modélisation dans laquelle nous formons le modèle afin de pouvoir
l’utiliser pour les données du monde réel. Et le modèle a besoin de données numériques, mais nos données
sont textuelles, c’est pourquoi nous devons effectuer diverses tâches de prétraitement du texte, pour que
les données seront prêtes pour la phase suivantes .
14
Nous pouvons avoir plusieurs tâches :
Préliminaires :
Toute tâche basée sur NLP peut être effectuée en décomposant le texte en phrases (tokenisation des
phrases) et ensuite en mots (tokenisation des mots).
Dans le cas de notre dataset, il nous suffit de procéder à la tokenisation des mots car les données textuelles
ne sont pas volumineuses .
Stemming : .
Stemming consiste à supprimer les suffixes et à réduire un mot à une forme de base de sorte que toutes les
variantes de ce mot puissent être représentées par la même forme (par exemple, "change" , "changing" ,
"changes" ,"changed" sont tous réduits à "chang"). Pour ce faire, on applique un ensemble fixe de règles
(par exemple, si le mot se termine par "-es", on supprime "-es").
Lemmatization : .
Stemming consiste simplement à supprimer le suffixe pour obtenir la forme de base du mot, mais le
mot résultant n’est pas le résultat souhaité, c’est-à-dire qu’il peut avoir un effet négatif sur l’utilisation
ultérieure de l’intégration des mots. Nous devons donc utiliser la lemmatisation, qui permet d’obtenir la
forme de base du mot sur la base de son contexte.
La lemmatisation est le processus qui consiste à faire correspondre toutes les différentes formes d’un mot à
son mot de base, ou lemme. Elle requiert davantage de connaissances linguistiques. Bien que cette définition
semble proche de celle du déracinement, elles sont en fait différentes.Voici la différence :
La détection de la langue : .
Nous allons expliquer quelques processus de prétraitement supplémentaires pour traiter de tels cas.
Nous avons présumé jusqu’à présent que nous avions affaire à un texte anglais standard, bien que dans nos
jours, beaucoup d’informations sur le web sont multilingues. Il ne nous reste plus qu’à ajouter un autre
composant au début du pipeline NLP pour la détection de la langue.
15
Le mélange de codes fait référence à ce phénomène de passage d’une langue à l’autre. Lorsque les gens
utilisent plusieurs langues dans leurs écrits, ils tapent souvent les mots de ces langues en caractères romains,
avec une orthographe anglaise. Ainsi, les mots d’une autre langue sont écrits avec le texte anglais. C’est
ce qu’on appelle la translittération.
L’approche est très simple à comprendre et à mettre en œuvre et a connu un grand succès dans des
problèmes tels que la modélisation du langage et la classification des documents.
Fonctionnement de BOW
Prenons l’exemple de dataset suivante contenant des textes et leurs classes :
Texte Classe
This is a positive sentence 2
This is a negative sentence 1
This is a neural sentence 0
Nous créons ensuite le vocabulaire de mots connus. Dans notre cas c’est ( this , is , a , positive , sentence,
negative , neural )
Puis, nous établissons une mesure de la présence des mots connus. Si le mot est présent dans le text, nous
lui établissons la valeur 1 , sinon la valeur 0. Dans notre cas, nous aurons les résultats suivantes :
4.3.2 TF-IDF
Un problème avec la notation de la fréquence des mots est que les mots très fréquents commencent à
dominer dans le document (par exemple, un score plus élevé), mais peuvent ne pas contenir autant de
"contenu informationnel" pour le modèle que des mots plus rares mais peut-être spécifiques au domaine.
16
Une approche consiste à réévaluer la fréquence des mots en fonction de leur fréquence d’apparition dans
tous les documents, de sorte que les scores des mots fréquents , qui sont également fréquents dans tous les
documents, sont pénalisés.
Cette approche de notation est appelée Fréquence des termes - Fréquence inverse ( TF-IDF ) des docu-
ments, où :
1.Fréquence des termes (TF) : est un score de la fréquence du mot dans le document actuel.
2.Fréquence inverse du document ( IDF ) : il s’agit d’une évaluation de la rareté du mot dans les documents.
Les scores sont une pondération où tous les mots n’ont pas la même importance ou le même intérêt. Les
scores ont pour effet de mettre en évidence les mots qui sont distincts (contenant des informations utiles)
dans un document donné.
Fonctionnement
Prenons le même exemple précedent :
Texte Classe
This is a positive sentence 2
This is a negative sentence 1
This is a neural sentence 0
Nous créons ensuite le vocabulaire de mots connus. Dans notre cas c’est ( this , is , a , positive , sentence,
negative , neural )
Puis, nous établissons une mesure de la présence des mots connus. Si le mot est présent dans le text, nous
lui établissons la valeur TF-IDF , sinon la valeur 0. tel que :
N
T DF (t) = ln (4.3)
1 + df
tel que :
N : le nombre de texte dans le corpus (dataset)
df : : nombres des textes qui contiennent le mot t
Dans notre cas, nous aurons les résultats finals suivantes :
17
Limitations :
Bien que TF-IDF soit une méthode courante et utile pour l’extraction de caractéristiques de texte, il
présente certaines limites qui doivent être prises en compte lors de son utilisation :
Ne prend pas en compte le contexte : TF-IDF est basé sur la fréquence d’un terme dans un document
et sa rareté dans l’ensemble des documents, mais il ne prend pas en compte le contexte. Par exemple, si
un mot est souvent utilisé dans un document mais n’est pas pertinent pour le sujet, il peut obtenir un
score TF-IDF élevé qui ne reflète pas son importance réelle.
Ne gère pas les synonymes : TF-IDF ne prend pas en compte les synonymes et les mots apparentés.
Deux mots différents qui ont le même sens peuvent être traités comme deux termes différents, ce qui peut
conduire à des résultats incohérents.
Ne gère pas les polysemes : Les polysemes sont des mots qui ont plusieurs significations. TF-IDF
traite ces différents sens de la même manière, ce qui peut conduire à une confusion dans l’interprétation
des résultats.
Sensibilité aux erreurs de saisie : Les erreurs de saisie dans les termes peuvent affecter le score TF-IDF.
Par exemple, si "apprentissage automatique" est mal orthographié comme "apprentissage automtique", il
sera considéré comme deux termes différents et aura des scores TF-IDF distincts.
Ne tient pas compte de la structure du document : TF-IDF ne prend pas en compte la structure du
document, comme la position ou l’en-tête, qui peuvent avoir une incidence sur l’importance d’un terme.
4.4 Bibiothéques
1. re : La bibliothèque "re" (pour "regular expression") est une bibliothèque standard Python qui per-
met de travailler avec des expressions régulières. Elle offre une variété d’opérations pour la recherche, la
manipulation et la transformation des chaînes de caractères selon des règles spécifiques. Cette bibliothèque
permet encore de supprimer les ponctuations , URL , etc, du chaîne de caractères.
2. demoji : Contient des fonctions qui permet de trouver , supprimer , ou donner les sens des emojies
d’un texte en utilisant la base de données Unicode Consortium’s .
3. unicodedata : c’est une bibliothèque standard qui fournit des fonctions pour travailler avec les carac-
tères Unicode. Elle permet d’effectuer des opérations telles que la normalisation des chaînes de caractères,
la recherche de catégories de caractères Unicode, la conversion entre différents encodages de caractères, et
bien plus encore.
L’une des fonctions les plus courantes de la bibliothèque "unicodedata" est la normalisation de chaînes
de caractères en utilisant la norme Unicode. La normalisation Unicode est le processus de conversion de
chaînes de caractères en une forme canonique, ce qui permet de comparer et de manipuler les chaînes de
caractères plus facilement. La bibliothèque "unicodedata" fournit des fonctions pour normaliser les chaînes
de caractères selon différents modes, tels que NFC, NFD, NFKC, NFKD.
4. spellchecker : c’est une bibliothèque Python open-source qui fournit des fonctions pour la correction
orthographique en utilisant des algorithmes de vérification orthographique. La bibliothèque SpellChecker
utilise l’algorithme de Levenshtein pour calculer la distance de Levenshtein, qui mesure le nombre minimal
d’opérations (insertions, suppressions ou substitutions) nécessaires pour transformer un mot en un autre
18
mot. La bibliothèque peut également utiliser un dictionnaire pour suggérer des corrections orthographiques
en fonction des mots les plus couramment utilisés. Elle peut être utile dans de nombreuses applications,
notamment pour améliorer la qualité des textes et faciliter la saisie de données.
5. langdetect : La bibliothèque Python "langdetect" est une bibliothèque open source qui permet de
détecter automatiquement la langue d’un texte donné. Elle prend en charge plus de 55 langues et utilise
des algorithmes statistiques pour déterminer la langue la plus probable d’une chaîne de caractères. Elle
est également capable de détecter les langues mixtes et les expressions en langue étrangère dans un texte
en langue principale.
La bibliothèque "langdetect" utilise des modèles de langue basés sur des caractéristiques linguistiques,
telles que la fréquence des lettres, des mots, la syntaxe, la structure grammaticale, etc. Elle fonctionne
bien pour des textes de taille moyenne à grande, tels que des articles de journaux, des pages web, des
documents PDF, des messages électroniques, etc.
6. deep_translator : La bibliothèque Python "deep_translator" est une bibliothèque open source qui
permet de traduire des textes entre plusieurs langues en spécifiant la langue source et la langue cible.
Elle utilise des services de traduction en ligne pour effectuer la traduction, notamment Google Translate,
Microsoft Translate, Yandex Translate et DeepL. Elle prend en charge plus de 30 langues et offre plusieurs
options pour personnaliser la traduction, telles que la détection automatique de la langue source, la spé-
cification d’un modèle de traduction, la limitation du nombre de caractères, etc.
7. NLTK
8. spacy
9. Sklearn
19
Chapitre 5
Partie pratique
20
Puis, la fonction normalize() de la bibliothèque Python unicodedata permet de normaliser les chaînes de
caractères Unicode. Elle prend deux arguments : le premier spécifie le type de normalisation à appliquer
et le second est la chaîne de caractères à normaliser.
La fonction findall() de la bibliothéque demoji retourne un dictionnaire contenant tous les émojis trouvés
dans un texte avec leus significations. Puis la fonction replace() , une méthode intégrée aux objets de type
str en Python, remplace les emojis par leurs significations dans le texte.
21
Dans cet exemple, nous avons créé une instance de la classe SpellChecker en spécifiant la langue anglaise
(’en’) pour la correction d’orthographe. Nous avons ensuite utilisé la méthode correction pour corriger
chaque mot de la phrase .
5.2 Pre-processing
word_tokenize est une fonction de la bibliothèque Python nltk (Natural Language Toolkit) qui permet
de découper une chaîne de caractères en une liste de mots (ou "tokens"). Cette fonction utilise des règles
spécifiques pour diviser la chaîne de caractères en mots, telles que la ponctuation et les espaces blancs.
22
Et voici la liste de toutes les Stop Words en anglais.
Nous avons importé la classe PorterStemmer de la bibliothèque nltk. Nous avons ensuite créé un objet
PorterStemmer. Nous avons ensuite appliqué la méthode stem de l’objet PorterStemmer pour raciniser les
mots.
23
Nous avons utilisé la fonction detect() pour détecter la langue de text.
24
Nous refaisons le même travail, juste nous allons au début créé un objet tfidfVectorizer.
25
Voici notre data :
Lorsqu’il y a des valeurs manquantes ( NaN ) ou des valeurs dupliquées dans les données, cela peut poser
des problèmes pour l’analyse ou la modélisation. dropna() et drop_duplicate() permet de supprimer les
lignes ou colonnes qui contiennent ces valeurs .
26
HMM prend beaucoup de temps pour l’exécution, c’est pour ça nous avons fait quelques modifications sur
dataset.
Nous pouvons visualiser les données de notre dataset par les fonctions suivantes :
27
Pour un meilleur apprentissage du modèle, nous divisons la base de données par la méthode test_train_split
(). L’idée est de diviser l’ensemble de données en ensembles d’entraînement et de test d’une manière qui
préserve les mêmes proportions d’exemples dans chaque classe que celles observées dans l’ensemble de
données original. C’est ce que nous appelons une division train-test stratifiée. On peut y parvenir en
définissant l’argument "stratify" à la fonction train_test_split ().
28
Puis nous réalisons le pre-processing
5.4.2 Hmm
Voici toutes les fonctions qui permet de calculer les cinq paramètres cités dans le chapitre 1 :
29
30
Puis on définit le modéle HMM :
31
Enfin , nous prédirons les étiquettes des valeurs de données test sur la base du modèle entraîné.
5.4.3 Evaluation
Nous introduisons maintenant la matrice de confusion qui est nécessaire pour calculer l’accuracy de l’al-
gorithme d’apprentissage dans la classification des données dans les étiquettes correspondantes.
32
Dans ce cas l’accuracy n’est pas élevée car nous avons pas travailler sur une grande dataset, donc le modéle
n’a pas bien appris.
5.4.4 snscrape
snscrape : est une bibliothèque Python qui permet d’extraire des données de réseaux sociaux tels que
Twitter, Instagram, Facebook et YouTube. Elle utilise l’API non officielle de Twitter pour récupérer des
tweets en temps réel, mais elle est capable de récupérer des données historiques en utilisant l’URL d’un
tweet. Nous Utilisons de TwitterSearchScraper pour extraire des données selon des contraintes et ajouter
des tweets à une liste.
33
Nous preparons cette dataset pour le modele HMM.
34
Chapitre 6
Conclusion
Tout au long du présent travail, nous nous sommes basés sur les méthodes d’extraire des données d’un
texte, qu’ils nous permettent d’obtenir une nouvelle base de données structuré, et sur laquelle nous testons
l’algorithmes d’apprentissage HMM. Après ces études, je ne préfére plus HMM. C’est plus coûteuse en
termes de calcul et nécessite de CPU pour terminer la formation. Pour être efficaces, HMM est mois
performant que d’autre algorithmes de classification surtout reseaux neuronnes.
35
Réference
https://www.netapp.com/fr/artificial-intelligence/what-is-artificial-intelligence/
https://www.journaldunet.fr/web-tech/guide-de-l-intelligence-artificielle/1501311-apprentissage-su
https://www.qualtrics.com/fr/gestion-de-l-experience/etude-marche/analyse-sentiment/
https://www.eskimoz.fr/google-nlp/
https://beranger.medium.com/nlp-extraire-des-caractÃľristiques-pour-utiliser-des-algorithmes-ml-1c
https://machinelearningmastery.com/gentle-introduction-bag-words-model/
https://docs.python.org/3/library/
https://www.youtube.com/watch?v=xejm-z3sbWA
http://pascal.rigaud4.free.fr/Polytech/cours/fc/Algo%20Viterbi.pdf
https://buildingenergygeeks.org/hmm.html
https://birc.au.dk/~cstorm/courses/ML_e19/slides/ml\protect\discretionary{\char\hyphenchar\
font}{}{}3\protect\discretionary{\char\hyphenchar\font}{}{}hmm-implementations.pdf
https://www.kaggle.com/code/nkitgupta/aspect\protect\discretionary{\char\hyphenchar\font}{}{}based\
protect\discretionary{\char\hyphenchar\font}{}{}sentiment\protect\discretionary{\char\hyphenchar\
font}{}{}analysis
36