Faisabilité : catégorisation de texte
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 - 4 sept. 2024 à 12:39
5 réponses
Bonjour,
C'est sûrement faisable (on peut lire un fichier Excel en Python)
Mais peux-tu nous donner un exemple de description et de la catégorie que tu voudrais en ressortir ?
Bonjour Phil,
Ci-joint un extrait du fichier : https://www.cjoint.com/c/NIdodFIUyzA
Aprés penses tu qu'il est possible qu'en fonction de la description il me fasse ses propres suggestions ? J'ai essayé avec Chatgpt ou Copilot mais les propositions ne correspondait pas vraiment au texte.
Merci,
Étant donnée une description donnée, quel est la catégorisation que tu voudrais en tirer ?
Donne un exemple précis ...
Modifié le 3 sept. 2024 à 18:28
Bonjour,
Ta question comporte deux sous-problème :
- Lire et corriger un fichier excel : oui c'est faisable, de nombreux modules python permette de manipuler un fichier excel. Le plus simple est sûrement d'utiliser pandas et plus particulièrement la fonction read_excel. Tu pourras alors facilement extraire les lignes/colonnes de ton choix. Si tes fichiers excels sont très volumineux, pandas te demandera peut-être d'installer en plus pyxlsb.
- Catégoriser des chaînes de caractères : en ML (machine learning) et plus particulièrement en NLP (natural language processing), on appelle ça un problème de "text classification". C'est faisable, mais en général pas facile, et dans le cas général et rarement précis à 100% (quand on atteint 80% c'est déjà pas si mal). Beaucoup de modules dédiés au NLP existent, mais on peut au moins citer scikit-learn est communément utilisé pour faire du NLP. Tu peux aussi regarder sur Hugging Face.
Si tu débutes sur le sujet ce tutoriel présente une manière de réaliser ces deux tâches à l'aide de pandas et scikit-learn. Je ne vais pas ré-expliquer ce qui est déjà expliqué par l'auteur sauf si tu as des questions précises, mais plutôt te donner un peu de recul sur le NLP afin que tu aies les grandes idées en tête.
Généralement pour traiter du texte, on utilise en NLP plusieurs techniques, dont certaines utilisées le tutoriel en question :
- Éliminer les mots qui n'apportent pas d'information : Typiquement les articles "la", "le", "les", "un", ... et bien d'autres. On parle de stop words.
- Accorder souvent plus d'importance aux mots les plus rares : étant donné un corpus de textes. Ceci est souvent réalisé en pondérant chaque mot par un poids TF-IDF.
- Entraîner un algorithme avec un jeu de données étiquetées : en NLP, il n'y a généralement pas de règle absolue permettant de réaliser une tâche donnée (par exemple classifier des textes). On a donc recours au machine learning, c'est-à-dire, un modèle qui a besoin d'être entraînée pour réaliser la tâche qu'on lui demande (cela inclue notamment les réseaux de neurones, les réseaux Bayésiens, et bien d'autres).
- Pour entraîner un tel modèle, tu as besoin de données étiquetées. Dans ton cas, ce sont textes pour lesquels tu connais la réponse (c'est ton cas). Bien évidemment il faut que tes données étiquetées couvrent l'ensemble des catégories impliquées dans ta classification, et de manière représentative (plus les données sont variées, meilleur sera l'apprentissage).
- Généralement, on réserve sépare les données étiquetées en deux groupes:
- Les données d'entraînement : ce sont elles qui vont permettre de calibrer le modèle.
- Les données de test : pour voir comment se comporte le modèle sur des données qu'il donc jamais vues. On peut alors voir voir à quel point le modèle est précis et a été capable de généraliser ce qu'il a vu. En effet, avoir une très bonne précision sur le jeu d'entraînement, mais très mauvaise sur le jeu de test n'est pas souhaitable. On parle alors de sur-apprentissage (over-fitting), et un tel modèle ne sert en pratique à rien, car il est incapable de généraliser ce qu'il a vu.
- En terme de répartition, il n'y a pas de règle absolue, mais on peut par exemple utiliser 60% des données étiquetées pour l'entraînement et le reste pour en données de test.
- La précision du modèle dépend beaucoup du modèle lui-même, mais aussi beaucoup des données. Si ton jeu de données d'entraînement n'est pas bon, n'espère pas de miracle. Parfois, le modèle peut dépendre paramétré (les variables en questions sont alors appelées hyper paramètres). Tester plusieurs valeurs d'hyper-paramètres peut aussi jouer sur la performance. Dans le tutoriel en question, l'auteur est arrivé à entre 73% et 80% de précision selon les modèles considérés, ce qui est acceptable.
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question4 sept. 2024 à 11:47
bonjour,
Tu mentionnes que tu voudrais déterminer des catégories d'incident, à partir de la description de l'incident.
Cependant, dans les exemples que tu donnes, il ne s'agit pas de catégorie, mais de la cause de l'incident.
Je pense peu probable de pouvoir déterminer la cause à partir de la description. Deux incidents avec une description identique peuvent avoir des causes différentes.
Pour moi, tu pars dans une mauvaise direction.
4 sept. 2024 à 12:39
Si on suppose qu'on peut voir une cause comme une catégorie de texte, par exemple parce que la description du problème est précise, ce n'est pas forcément infaisable. C'est finalement ce qu'on fait quand on répond sur un forum : vu la description, c'est un problème de mémoire, de base de données, de droits, etc ; puis on propose une solution. Et exactement comme sur un forum, si la description est trop vague (genre "ça marche pas") il y a peu d'espoir.
Moi ce qui me choque surtout à ce stade, ce sont les points suivants:
- la liste des catégories n'est pas précisée
- l'exemple partagé mélange de textes anglais et français
- l'exemple partagé comporte beaucoup trop peu de données pour espérer entraîner un modèle
Bonne chance