Classification

Introduction à la catégorisation de textes

La classification (ou catégorisation) de textes est l’une des tâches de traitement du langage naturel (NLP :  Natural Language Processing) les plus courantes. Elle consiste à associer un texte non-structuré à un tag, qui correspond à une classe bien précise. Si la catégorisation de textes nécessite beaucoup d’engouement, c’est à cause de ses nombreuses applications qui vont de l’analyse de sentiments à la détection de spams en passant par la détection de langue et les systèmes de recommandation. Dans cet article, nous découvrirons ce qu’est un classifieur, comment il marche et comment on peut en implémenter un.

1. Qu’est-ce que la catégorisation de textes ?

Faire de la classification c’est tout simplement mettre une étiquette sur un texte, lui faisant ainsi appartenir à un groupe ou classe bien définie. Prenons l’exemple d’une application qui offre la possibilité à l’utilisateur de lire des articles sur l’actualité venant de sources différentes. Disons que l’on veut classer les articles par thème. On commence par définir les thèmes possibles : Sport, Politique, Économie, Santé, Technologie. Le rôle d’un classifieur ou outil de classification, dans notre cas, sera de « détecter », pour chaque article de l’application, s’il s’agit d’un article de sport, de politique, d’économie, de santé ou de technologie.

Illustration d'un classifieur de texte

La catégorisation de textes est un concept pour le moins générique et peut, en fonction des applications et des besoins, se décliner sous différentes formes. Voici quelques une parmi les plus connues :

  • Classification Binaire : Il s’agit tout simplement d’une classification à 2 classes. Par exemple, un système de détection de SPAM classifie un e-mail comme étant soit un « SPAM », soi un « NON-SPAM ».
  • Classification Multi-Class : Elle consiste à associer du texte à une classe parmi plusieurs (plus de deux). Comme dans le cas de l’application d’articles d’actualité mentionnée plus haut.
  • Classification Multi-Label : Celle-ci consiste à associer le texte en entrée à une ou plusieurs classes. Par exemple, dans le cas de notre application d’actualité un même article pourrait être à la fois dans les catégories Économie et Technologie.
  • Classification en Cascade : Il s’agit d’un classifieur composé de plusieurs classifieurs mis l’un à la suite de l’autre. Le but étant de classifier suivant des sous-classes.

2. Comment marche un classifieur ?

Il est possible d’implémenter un classifieur de textes de plusieurs façons différentes. En utilisant soit :

Un ensemble règles/Mots-clés

Cette méthode consiste tout simplement à faire un algorithme qui respecte certaines règles. L’on peut par exemple faire une liste de mots-clés pour chaque classe. Disons que les classes sont « Sport » et « Politique » et nous voulons classifier les phrases suivantes : « Leo Messi est le capitaine du FC Barcelona » et « Emmanuel Macron est en visite à la Maison Blanche ». Notre classifieur reconnaîtra les mots-clés « Messi », « Capitaine » et « FC » comme étant dans le champ lexical du sport (et parce qu’ils appartiennent à la liste de mots-clés correspondant au sport préalablement créée). Et de la même façon les mots « Macron » et « Maison Blanche » seront également reconnus et donc la phrase sera classifiée comme « Politique ».

Évidemment on peut implémenter des règles beaucoup plus complexes que cet exemple afin de rendre la classification plus « intelligente ». Mais la limite de cette méthode est que la classification est limité aux cas de figure pris en compte dans la création des règles. En plus, c’est une méthode qui demande beaucoup de travail dont des tâches plutôt laborieuses, telles que la création de règles et de listes de mots-clés. Enfin, cette méthode est difficile à maintenir.

Un modèle de Machine Learning

Cette approche consiste à utiliser les techniques de Machine Learning. Dans la plupart des cas, l’on va entraîner un modèle avec de la donnée déjà classifiée (ou pas) qui sert d’exemple. Puis utiliser ce modèle pour classifier de nouvelles données. Il est ici important de bien identifier les deux étapes qui sont l’entraînement et l’inférence.

L’un des intérêts d’un modèle de Machine Learning est que l’on n’a pas besoin d’hardcoder des règles. Car le but de l’entraînement est de montrer des exemples au modèle afin qu’il ressorte, de façon automatique, des règles qui permettront de classifier de nouvelles données.

Le principe du ML contre celui de la programmation classique

Il existe plusieurs algorithmes de machine learning qui permettent de faire de la classification (pas que de texte pour le coup) tels que : le SVM, le Random Forest, la régression logistique, etc. Il est aussi possible de faire du Deep Learning en implémentant un réseau de neurones.

En règle générale les modèles de Machine Learning produisent de bien meilleurs résultats que les classifieurs à règles. Cependant, la pratique du Machine Learning nécessite une certaine quantité de données, en particulier pour le Deep Learning.

Classifieur hybride ou mixte

Il est tout à fait possible de réaliser un classifieur de textes qui combine les deux techniques précédemment citées. En effet, l’on peut ajouter des règles spécifiques qui auront pour but de « corriger » certaines insuffisances des modèles automatiques.

3. Evaluer un modèle de classification

La façon la plus simple d’évaluer son modèle est de le tester sur des données dont on connaît déjà les labels et de comparer les résultats du modèle aux vraies valeurs des labels.

Il existe un grand nombre de métriques qui permettent d’évaluer un outil de classification. Nous en verrons seulement quelques-unes. Celles-ci sont les plus utilisées et dans la plupart des cas sont largement suffisant pour mesurer la performance d’un classifieur.

La matrice de confusion

La matrice de confusion est un élément d’évaluation visuel. C’est une matrice carrée dont la taille est le nombre de classes. Et l’élément de la cellule i,j est le nombre d’observations (du jeu de données d’évaluation) qui appartient à la classe i mais a été classifié par le modèle comme appartenant à la classe j.

Prenons l’exemple d’un classifieur qui prédit si un animal est un “chien” ou un “chat”. Le jeu de données d’évaluation contient 7 observations. On classifie ces observations avec le modèle.

ObservationsVraie classeClasse prédite par le modèle
Animal 1ChienChien
Animal 2ChienChat
Animal 3ChatChat
Animal 4ChienChien
Animal 5ChatChien
Animal 6Chat Chat
Animal 7ChatChat
Exemple de matrice de confusion
Matrice de confusion du classifieur d’animal

Ligne 1 : Deux chiens ont été classifiés comme chiens et un chien a été classifié comme chat.

Ligne 2 : Un chat a été classifié comme chien et trois chats ont été classifié comme chats.

La matrice de confusion contient assez d’informations pour calculer toute autre métrique. En plus, elle permet de juger de la performance du classifieur d’un simple coup d’œil. En effet, plus la matrice de confusion tend à être diagonale, plus la classification est précise.

Accuracy

L’accuracy est une métrique qui permet de mesurer le pourcentage de réussite de notre classifieur sur le jeu de données d’évaluation. Sa formule est la suivante :

\[Accuracy = {Nombre \ de \ classifications \ correctes \over Nombre \ total \ d’observations \ évaluées}*100\]

Précision

La précision est le pourcentage d’éléments correctement associés à un certain label par rapport à tous les éléments associés à ce label. Elle peut être vue comme la capacité du modèle à ne pas classifier dans une catégorie donnée un élément qui ne doit pas y être (qui n’est pas de la catégorie). Sa formule est la suivante :

\[Précision_i = {Nombre \ d’éléments \ correctement \ classifiés \ dans \ i \over Nombre \ total \ d’observations \ classifiées \ dans \ i}\]

Rappel

Le rappel est le pourcentage de classifications correctes suivant un label donné. Soit la capacité du modèle à classifier correctement les éléments d’une catégorie donnée. Sa formule est la suivante :

\[Rappel_i = {Nombre \ d’éléments \ correctement \ classifiés \ dans \ i \over Nombre \ total \ d’éléments \ de \ i \ évalués}\]

F1-score

Le F1-score est une métrique qui prend en compte la précision et le rappel sur une catégorie donnée. Elle peut être vue comme une combinaison de ces deux métriques. Elle vaut la moyenne harmonique du rappel et de la précision :

\[F1_i = 2*{(précision_i*rappel_i) \over (précision_i+rappel_i)}\]

Le F1-score est compris entre 0 et 1. Le meilleur score est donc 1 et le pire 0.

Il existe bien d’autres métriques d’évaluation pour la classification telles que les courbes AUC et ROC que nous verrons dans un autre article consacré exclusivement aux métriques d’évaluation de modèles.

Conclusion

La classification de textes est une tâche de NLP très importante au vu de toutes les applications qui peuvent en découler. Il existe plusieurs approches possibles pour la réalisation de classifieurs. Même si les modèles à base de Machine Learning sont en général plus performants que les moteurs à règles, il peut être intéressant de réaliser un classifieur mixte. Pour finir, il est important de choisir les métriques d’évaluation qui conviennent le mieux en fonction du contexte global dans lequel on se trouve, afin que la mesure de la performance du modèle ait du sens.

2 réflexions sur “Introduction à la catégorisation de textes”

  1. j’ai un thème identique à ce que vous publiez (Un ensemble règles/Mots-clés) , il est difficile.
    est ce que je peux trouver quelqu’un qui peut m’aider?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.