Tutoriels intelligence artificielle Classification de texte en python avec TextBlob

Pour approfondir le sujet

Salesforce crée un fonds d’investissement de 50 millions de dollars dédié à l’intelligence artificielle

Salesforce a lancé un fonds de 50 millions de dollars pour investir dans des start-ups utilisant de l'intelligence artificielle. Proposer de nouvelles solutions dans l'intelligence...

Syllabs lève 2M€ et lance ses algorithmes IA à la conquête de nouveaux marchés

La start-up française Syllabs a annoncé avoir levé 2 millions d'euros. Ce financement lui permettra de partir à la conquête de nouveaux marchés. Sa...

Stéphanie Challita et Fanny Orlhac, chercheuses Inria en cloud computing et en intelligence artificielle pour l’imagerie médicale, lauréates des Bourses France L’Oréal-UNESCO « Pour...

Le programme L’Oréal-UNESCO « Pour les Femmes et la Science » a récompensé pour leurs travaux respectifs Fanny Orlhac et Stéphanie Challita, deux chercheuses d'Inria....

HEALTH DATA HUB 2019 : Annonce des 10 lauréats du premier appel à projets

Initié le 31 janvier, l’appel à projets pour le Health Data Hub a été clos le 9 mars dernier. Ce sont 189 projets qui...

Classification de texte en python avec TextBlob

En suivant ce tutoriel vous apprendrez : l’implémentation d’un classifieur bayésien naïf, la différence entre apprentissage supervisé et apprentissage non supervisé, la création d’un jeu d’entraînement et d’un jeu de test.

La classification automatique de texte ou classification de texte est une discipline très populaire du domaine du TAL (Traitement Automatisé du Langage) . Ce type de processus automatisé peut s’avérer extrêmement utile dans de nombreux secteurs d’activité tant la multiplication des informations rend difficile une classification manuelle des données.

Or, il est très simple de mettre en place un classifieur de texte grâce aux outils performants disponibles sous forme de librairies et modules, notamment pour Python. Pour ce tutoriel, nous utiliserons TextBlob que nous avons déjà utilisé au cours d’un précédent tutoriel.

Pour suivre ce tutoriel, vous aurez donc besoin de l’interpréteur Python, du module TextBlob installable via le gestionnaire de paquets pythons pip, en utilisant la commande : pip install textblob et argparse qui permettra de traiter les arguments passés en ligne de commande, installable avec la commande pip install argparse

Mais avant d’entrer dans le vif du sujet, un petit point théorique : La classification de texte peut être divisée en deux types distincts : La classification supervisée et non supervisée. Dans le cas de la classification supervisée, un jeu de données d’entraînement est étiqueté avant d’être fourni au classifieur. Le classifieur apprend à faire le lien entre les textes et leurs étiquettes afin de pouvoir par la suite étiqueter à son tour des textes.

La classification non-supervisée consiste quant à elle à fournir au modèle un ensemble de textes non étiquetés, qu’il tentera d’organiser sous forme de sous-ensembles non étiquetés. On parle alors de clustering.

Ce tutoriel se focalisera sur l’apprentissage supervisé, la première chose à faire est donc de créer un jeu de données destiné à l’entraînement. Ce jeu de données peut se présenter sous le format JSON, le format CSV ou le format TSV ( Le délimitateur est alors une tabulation).

Nous opterons pour le format CSV. La première colonne contenant les textes d’exemple et la deuxième colonne contenant leur étiquette. Voici un très court jeu de données d’entraînement destiné à entraîner un classifieur à distinguer les textes de nature professionnelle des textes de nature personnelle :

Fichier exemples-entrainement.csv :



"pensez à m'envoyer votre facture","pro"
"Sujet: demande de devis","pro"
"il faut appeler le comptable","pro"
"Avez-vous un créneau de libre pour un point téléphonique ?","pro"
"pensez à me fournir votre comptabilité","pro"
"Maîtriser les fondamentaux du Web Marketing et de la Communication Digitale,","pro"
"Nous vous remercions d'avoir choisi nos services pour le renouvellement de votre Nom de Domaine.","pro"
"Administration et grand-compte: Si vous souhaitez recevoir une offre de prix équivalente, cliquez-ici","pro"
"Donnez aux entreprises les moyens d’innover, de se transformer, de grandir et de créer des emplois","pro"
"Voici des personnes que vous connaissez peut-être. Entrez en contact et développez de nouvelles relations.","pro"
"nous recrutons un chef de projet","pro"
"La société XXX a le plaisir de vous annoncer la sortie prochaine de son application","pro"
"Je vous propose un RDV lundi prochain à 17H.","pro"
"N'oubliez pas de réserver la salle B10 pour la réunion avec la direction.","pro"
"Cédez vos factures en ligne grâce à notre solution","pro"
"Je me permets de vous contacter dans le cadre de la rédaction de notre article","pro"
"Pour connaître les modalités de transmission des paiements mensuels, consultez la fiche.","pro"
"Découvrez notre offre en logiciel de gestion (comptabilité - paie - gestion commerciale) et solutions métiers pour les PME, TPE, artisans et professionnels.","pro"
"Vous recevrez notre proposition commerciale dans les plus brefs délais","pro"
"L'activation vous permet de déclarer votre licence","pro"
"Il est grand temps de renouveler notre parc informatique","pro"
"Si vous êtes un employeur occupant 9 salariés au plus et si vous n'avez pas opté pour le maintien du paiement trimestriel, votre paiement sera à effectuer en même temps que votre déclaration","pro"
"Je te fais de gros bisous","perso"
"Je t'embrasse","perso"
"coucou, ça va ?","perso"
"Bonjour les amis","perso"
"On va au ciné ?","perso"
"J'adore l'informatique","perso"
"Ca vous dit de sortir boire un verre ?","perso"
"Comment va la famille ?","perso"
"J'aime beaucoup parler avec toi","perso"
"Mes passions sont la musique, le cinéma et la photo","perso"


Passons désormais au code Python en lui même :

fichier classifieur_pro_perso.py


#import de Textblob
from textblob import TextBlob
#import du classifieur Bayésien naïf
from textblob.classifiers import NaiveBayesClassifier

#import d'argparse afin de prendre en compte une phrase en argument
import argparse
parser = argparse.ArgumentParser(prog="class-pro-perso", description="Classifieur")
parser.add_argument("--phrase", type=str, help="Phrase à traiter", required=True)
args = parser.parse_args()
phrase_a_tester=args.phrase

#affichage de la phrase à classifier, passée en paramètre
print("Classification de la phrase : "+phrase_a_tester)

#ouverture du fichier d'entrainement
with open('exemples-entrainement.csv', 'r') as fp:
#entraînement du classifieur
cl = NaiveBayesClassifier(fp, format="csv")
#nous soumettons la phrase au classifieur
blob = TextBlob(phrase_a_tester, classifier=cl)
prob_dist = cl.prob_classify(phrase_a_tester)
#cette ligne nous affiche le label ayant la plus grande probabilité
print("Cette phrase semble être de nature : "+prob_dist.max())

#nous affichons ici la probabilité d'un label spécifique : pro
print("Probabilité pro : "+str(round(prob_dist.prob("pro"), 2)))
#nous affichons ici la probabilité d'un label spécifique : perso
print("Probabilité perso : "+str(round(prob_dist.prob("perso"), 2)))


Il suffit ensuite de lancer notre script, en fournissant en paramètre une phrase à classifier.

Exemple :   
python classifieur_pro_perso.py --phrase="Quel est le nom de votre comptable ?"

Comme vous pouvez le constater, la mise en oeuvre d’un classifieur est d’une grande simplicité. En revanche, vous vous rendrez rapidement compte des faibles performances de notre classifieur actuel. La raison est bien simple, le jeu de données d’entraînement est de piètre qualité, et surtout, beaucoup trop petit. De plus nous avons omis une étape fondamentale : la mise en place d’un jeu de test destiné à mesurer la bonne qualité de l’apprentissage.

Nous vous invitons donc désormais à mettre en oeuvre votre propre classifieur , destiné à classifier des textes selon les catégories de votre choix, en créant vos jeux de données d’entraînement et de test. Vous pouvez créer ces deux jeux de données en réservant de façon aléatoire 90% de vos données à l’entraînement et 10% aux tests par exemple. Le jeu de test a le même format que le jeu d’entraînement, et s’utilise de la façon suivante, après l’entraînement du classifieur :

with open('exemples-test.csv', 'r') as fptest:
print("Taux de réussite: "+cl.accuracy(fptest,"csv"))

Le classifieur tentera alors de classifier chacun des tests et comparera le résultat avec l’étiquette fournie. Le nombre affiché sera alors le taux global de réussite du classifieur.

Nous avons décidé pour ce tutoriel de mettre en oeuvre un classifieur analysant des phrases passées en paramètre, mais libre à vous de modifier celui-ci afin qu’il soit en mesure de traiter des fichiers textes par exemple, en vous inspirant de la ligne de code source destinée à ouvrir le fichier de jeu d’entraînement.

N’hésitez pas à nous faire part de vos résultats via Twitter !

Thierry Maubant

Partager l'article

Industrie 4.0 : Partenariat entre Renault et Google Cloud sur la digitalisation des usines et de la chaîne logistique

Aller plus loin dans l'industrie 4.0 grâce au machine learning et à l'intelligence artificielle, c'est l'objectif du Groupe Renault. Pour ce faire, le constructeur...

Ethique de l’intelligence artificielle : Participez à la consultation de l’UNESCO pour l’élaboration d’une recommandation

Dans le cadre de la décision de la Conférence générale de l'UNESCO lors de sa 40e session en novembre 2019, l'UNESCO s'est engagée dans...

L’OTESIA lance ses 4 premiers projets IA dans la santé, la prévention du cyber-harcèlement, l’éducation

En novembre dernier était lancé l’Observatoire des impacts Technologiques Economiques et Sociétaux de l’Intelligence Artificielle (OTESIA) dans les Alpes-Maritimes. Une première en France et...

Replay Dataquitaine : Processus de Décision Markovien et Apprentissage par Renforcement

Dataquitaine propose en replay son Atelier-Webinaire Data Science, organisé par Digital Aquitaine, le 30 juin 2020. Ce séminaire était dédié à la thématique "Processus...