L'intelligence artificielle peut être définie comme l'ensemble des théories et des techniques mises en œuvre en vue de réaliser des machines capables de simuler l'intelligence humaine.
Cette définition reste vague et incomplète (on ne définit pas l'intelligence humaine...) et encore controversée. Cependant nous allons tenter d'assigner à un ordinateur une tache complexe
qu'il pourra accomplir après une phase d'apprentissage.
L'activité qui suit est inspirée d'une conférence de Florent Perronnin, directeur de Naver Labs Europe.
De nombreux sites proposent de donner un avis sur un restaurant, un achat, une livraison...
Notre objectif dans ce projet est de réaliser un programme capable d'analyser un commentaire simple et de déterminer si ce commentaire est positif ou négatif.
Cette tâche qui peut nous sembler simple est difficile à assigner à un programme informatique.
Nous tenterons donc de réaliser un tel programme, de le tester et de proposer des améliorations.
Comme souvent lorsqu'on travaille sur une IA, nous allons appuyer l'apprentissage de l'IA sur une grosse quantité de données.
L'apparition puis l'essor d'internet à la fin des années 1990 a permis le renouveau de l'IA grâce à un accès simplifié à une grande quantité de données dans de nombreux domaines.
L'augmentation des performances matérielles est également à la source de ce renouveau.
Nous disposerons pour l'apprentissage de cette IA, d'un fichier au format .csv
(Comma-separated values ou valeur séparées par des virgules) comprenant un
grand nombre de commentaire déjà analysés comme étant positifs ou négatifs.
Chaque commentaire sera suivi de -1
ou +1
selon si le commentaire est négatif ou positif.
Nous allons donc apprendre à notre IA si un mot peut être classé comme positif ou comme négatif. Pour cela nous construirons un dictionnaire python qui ayant pour clef
chaque
mot présent dans une base de commentaires et pour valeur
une note entière.
La première technique que l'on utilisera pour construire le dictionnaire des mots classés comme "positifs" ou "négatifs" est assez simple :
Pour tous les commentaires du fichiers de données
Pour tous les mots des commentaires
si le mot est présent dans le dictionnaire
incrémenter sa valeur si le mot appartient à un commentaire positif
décrémenter sa valeur si le mot appartient à un commentaire négatif
si le mot n'est pas présent dans le dictionnaire
initialiser sa valeur à 1 si le mot appartient à un commentaire positif
initialiser sa valeur à -1 si le mot appartient à un commentaire négatif
Cet algorithme est très simple, il faut cependant avoir accès aux commentaires présents dans un fichier .csv
.
Pour cela nous allons utiliser la bibliothèque python csv
:
import csv
Il est ensuite nécessaire de créer un objet fichier (nous verrons bientôt cette notion en détail) avec la commande :
with open(nomDeFichier,'r',encoding='utf-8') as fichier:
nomDeFichier
est ici une chaîne de caractères qui correspond au nom complet du fichier .csv
présent dans le répertoire du fichier python.
Dans le fichier .csv
, les données sont séparées par des ;
.
Il est donc nécessaire de lire l'objet fichier et de créer un objet lecteur avec la commande :
lecteur=csv.reader(fichier,delimiter=';')
Il suffit ensuite de parcourir l'objet lecteur et de construire un tableau python :
for row in lecteur:
tab.append(row)
Pour finir il faut bien sur séparer les mots des commentaires, pour cela la ligne suivante est nécessaire :
for element in tab:
element[0]=element[0].split()
Avant de coder l'apprentissage de l'IA, nous allons tester la partie lecture des données, et vérifier que le contenu du fichier csv est correctement transféré dans un tableau de tableau.
csv
et les instructions ci-dessus, afficher le tableau extrait du fichier csv. Il doit avoir la forme ci-dessous.
[[['Très', 'bonne', 'crêperie', 'nous', 'sommes', 'très', 'contents', 'de', 'ce', 'moment.', 'très', 'sympa.', 'Les', 'galettes', 'sont', 'bien', 'garnies', 'et', 'très', 'bonnes'], '1'], [['Très', 'mauvais', 'restaurant', ',', 'nous', 'sommes', 'déçus', '.', 'Pas', 'de', 'goût,', 'pas', 'de', 'textures'], '-1']]
Une fois ce travail effectué, nous allons pouvoir maintenant passer à la phase d'apprentissage de notre IA :
dicoPlusMoins
avec le fichier de test précédent avisposnegtest.csv. Vous pourrez vérifier mot à mot si
votre fonction remplit bien son rôle.Notre IA n'est pas encore fonctionnelle sur deux points :
Dans un premier temps nous allons coder et tester la fonction AnalyseAvis
:
L'algorithme de calcul de la note d'un avis est maintenant très simple :
initialiser la note à 0
Pour tous les mots de l'avis
si le mot est présent dans le dictionnaire
ajouter à la note la valeur du mot
La docstring de la fonction AnalyseAvis
est présentée ci-dessous.
Vous testerez ensuite votre fonction, à partir du fichier avisposnegtest.csv précédent en choisissant des avis cohérents avec votre banque de données,
par exemple, ceux déjà présent dans le fichier .csv
.
Dans un second temps il faut maintenant passer à une phase d'apprentissage de meilleure qualité.
Vous pouvez tester les fonctions précédentes avec le fichier d'apprentissage avisposneg.csv.
Ce fichier contient environ 1000 avis positifs et négatifs.
Testez ce dictionnaire sur des avis "simple" et analysez le résultat.
Comme vous l'avez sûrement constaté, notre IA n'est pas parfaite...Nous reviendrons plus tard sur la liste des améliorations possibles, mais nous allons tout d'abord tenter un nouvel algorithme d'apprentissage.
Nous allons continuer sur le même principe en modifiant uniquement la règle d'apprentissage et de remplissage du dictionnaire :
Pour tous les commentaires du fichiers de données
calculer le score du commentaire
si le score est positif et que le commentaire est positif
alors ne rien faire
si le score est négatif et que le commentaire est négatif
alors ne rien faire
si le score est positif et que le commentaire est négatif
alors décrémenter la valeur de tous les mots du commentaire
si le score est négatif et que le commentaire est positif
alors incrémenter la valeur de tous les mots du commentaire
dicoPlusMoinsV2
en suivant le principe et l'algorithme précédentPour conclure, proposez au moins 3 améliorations qui nous permettraient de proposer une IA plus efficace.