« Classification de textes grâce à la compression » : différence entre les versions
| Ligne 24 : | Ligne 24 : | ||
<li>'''Etape 3:''' Etant donné que tous les textes n’ont pas le même nombre mot, on vas essayer de normaliser le résultat pour qu’il soit compris entre 0 et 1 peu importe le nombre de mot de chaque fichier. Et pour cela on effectue un calcul très simple(Normalized Compression Distance), <math>NCD =\frac{C(xy) - \min\{ C(x), C(y) \}}{\max\{ C(x), C(y) \}}</math> Et obtient <math> 0<NCD<1 </math> Si le résultat est proche de 0 cela veut dire que la compression étais très efficace donc que les fichiers possédait beaucoup de mot semblable. Et si au contraire le résultat est proche de 1 cela signifie que les textes n’ont que très peu de mot en commun ce qui a rendu la compression très peu efficace.</li> |
<li>'''Etape 3:''' Etant donné que tous les textes n’ont pas le même nombre mot, on vas essayer de normaliser le résultat pour qu’il soit compris entre 0 et 1 peu importe le nombre de mot de chaque fichier. Et pour cela on effectue un calcul très simple(Normalized Compression Distance), <math>NCD =\frac{C(xy) - \min\{ C(x), C(y) \}}{\max\{ C(x), C(y) \}}</math> Et obtient <math> 0<NCD<1 </math> Si le résultat est proche de 0 cela veut dire que la compression étais très efficace donc que les fichiers possédait beaucoup de mot semblable. Et si au contraire le résultat est proche de 1 cela signifie que les textes n’ont que très peu de mot en commun ce qui a rendu la compression très peu efficace.</li> |
||
<li>'''Etape 4:''' J’ajoute ce score a un tableau associatif avec pour chaque score la catégorie de mon fichier et j’effectue cette action 20 fois car je vais comparer mon 21<sup>ième</sup> fichier avec les 19 autres de ma base de données. J’aurais donc un tableau avec 20 scores.</li> |
<li>'''Etape 4:''' J’ajoute ce score a un tableau associatif avec pour chaque score la catégorie de mon fichier et j’effectue cette action 20 fois car je vais comparer mon 21<sup>ième</sup> fichier avec les 19 autres de ma base de données. J’aurais donc un tableau avec 20 scores.</li> |
||
TABLEAU ASSOCIATIFS<math>mes_voisins = { 0.127643; astro, 0.827149; astro, …, 0.257681; voiture}</math> |
|||
TABLEAU ASSOCIATIFS |
|||
<li>'''Etape 5:''' Et pour finir je trie mon tableau par ordre croissant et observe la catégorie des k premiers fichiers. Si on choisit un k = 5 je regarde la catégorie de mes 5 premiers fichier et imaginons que je trouve 3 fichier type astronomie et 2 fichier voiture alors j’en déduis que mon 21<sup>ième</sup> fichier appartient à la catégorie astronomie.</li> |
<li>'''Etape 5:''' Et pour finir je trie mon tableau par ordre croissant et observe la catégorie des k premiers fichiers. Si on choisit un k = 5 je regarde la catégorie de mes 5 premiers fichier et imaginons que je trouve 3 fichier type astronomie et 2 fichier voiture alors j’en déduis que mon 21<sup>ième</sup> fichier appartient à la catégorie astronomie.</li> |
||
</ul> |
</ul> |
||
Version du 8 mai 2026 à 11:48
Introduction:
L'objectif de notre projet est de créer et d'étudier un algorithme de classification de texte grâce à la compression.
Avec la compression, qui est un procédé basé sur des statistiques,
on peut théoriquement reconnaître deux textes comportant les mêmes mots et phrases grâce à leurs compressions qui seront similaires.
En se basant sur ce concept, un groupe de chercheurs a créé un algorithme de 12 lignes pouvant faire cette classification.
Notre objectif va donc être de le recréer et de l'étudier pour le comparer à des algorithmes basés sur le Learning.
Les réseaux de neurones profonds :
Pour bien comprendre ce dont nous allons parler ici il faut comprendre ce que sont les réseaux de neurones profonds ou le Deep learning en anglais.
Cette méthode a redessiné les capacités de l’intelligence artificielle en exploitant des architectures profondes inspirées du cerveau humain. Ces modèles apprennent à extraire des représentations depuis des données complexes, et ils alimentent aujourd’hui de nombreux services automatisés.
La méthode de classification proposé par les chercheurs à pour but de concurrencer ces réseaux de neurones et étant donné qu'il existe beaucoup de ces modèles c'est un des plus puissants qui à été choisi, il s'agit de BERT. Il à été crée par Google et à révolutionné l'IA en 2018, le point fort de ce réseau de neurone est qu'il est capable de comprendre le sens des mots en fonction de leur contexte.
Fonctionnement général :
Voici le code proposé par les chercheurs qui ont découvert cette méthode, 11 lignes en python.
Cette algorithme fusionne 2 grands classique du numérique : La compression et l’algorithme des k plus proches voisins.
Voici un exemple de classification d’un texte grâce à cette méthode…
Imaginons que l’on possède 20 fichiers et que l’on connait la catégorie de chaque fichier, j’en ai 10 qui parle d’astronomie et 10 qui parle des voitures, on vas appeler cela notre BDD. Et on a découvert après coup un 21ième fichier s’est perdu on ne sait pas à quelle catégorie il appartient. On vas donc l’appeler fichier mystère.
Maintenant que l’on a tous ce qu’il nous faut on peut commencer, pour que ce soit plus compréhensible on vas découper cette algorithme en 5 étapes.
- Etape 1: Tous les textes de notre base de données n’ont pas la même tailles on vas donc les compresser et récupérer leur taille. Pour commencer on compresse astro_1.txt (le premier fichier de notre BDD) et on récupère sa taille que l’on appelle C(x). On récupère également la taille de notre fichier mystère compressée que l’on appelle C(y).
- Etape 2: Puis on compresse le fichier que l’on cherche a tester avec astro_1.txt et on récupère aussi la taille obtenu . On peut tout de suite remarquer que lors de la compression si mon fichier mystère est de la catégorie astronomie il vas mieux se compresser avec astro_1.txt plutôt qu’avec voiture_1.txt car il a plus de mot en commun et donc la taille xy sera plus petite.
- Etape 3: Etant donné que tous les textes n’ont pas le même nombre mot, on vas essayer de normaliser le résultat pour qu’il soit compris entre 0 et 1 peu importe le nombre de mot de chaque fichier. Et pour cela on effectue un calcul très simple(Normalized Compression Distance), Et obtient Échec de l’analyse (SVG (MathML peut être activé via une extension du navigateur) : réponse non valide(« Math extension cannot connect to Restbase. ») du serveur « https://wikimedia.org/api/rest_v1/ » :): {\displaystyle 0<NCD<1 } Si le résultat est proche de 0 cela veut dire que la compression étais très efficace donc que les fichiers possédait beaucoup de mot semblable. Et si au contraire le résultat est proche de 1 cela signifie que les textes n’ont que très peu de mot en commun ce qui a rendu la compression très peu efficace.
- Etape 4: J’ajoute ce score a un tableau associatif avec pour chaque score la catégorie de mon fichier et j’effectue cette action 20 fois car je vais comparer mon 21ième fichier avec les 19 autres de ma base de données. J’aurais donc un tableau avec 20 scores. TABLEAU ASSOCIATIFSÉchec de l’analyse (SVG (MathML peut être activé via une extension du navigateur) : réponse non valide(« Math extension cannot connect to Restbase. ») du serveur « https://wikimedia.org/api/rest_v1/ » :): {\displaystyle mes_voisins = { 0.127643; astro, 0.827149; astro, …, 0.257681; voiture}}
- Etape 5: Et pour finir je trie mon tableau par ordre croissant et observe la catégorie des k premiers fichiers. Si on choisit un k = 5 je regarde la catégorie de mes 5 premiers fichier et imaginons que je trouve 3 fichier type astronomie et 2 fichier voiture alors j’en déduis que mon 21ième fichier appartient à la catégorie astronomie.
TABLEAUS ASSOCIATIFS TRIÉ
Les résultats des chercheurs :
Ilan ...
Ce qu'on a utilisé
Python
Lors de notre projet, nous avons principalement utilisé un algorithme Python, mais nous y avons ajouté plusieurs bibliothèques Python avec une base de données de textes.
Les Bibliothèques Python
Dans notre algorithme, nous utilisons 2 bibliothèques Python qui sont essentielles et une 3ème bibliothèque qui a servi pour des tests spécifiques.
1 : Bibliothèque OS
Nous avons utilisé la bibliothèque OS pour accéder aux textes dans notre base de données, obtenir les chemins d'accès et ainsi rendre possible nos tests.
2 : Bibliothèque zlib
zlib a joué un rôle majeur dans notre algorithme car il s'agit d'une bibliothèque d'outils de compression qui nous a servi à compresser nos textes dans Python.
3 : Bibliothèque random (Non essentielle)
Random nous avait servi à rendre les tests aléatoires et ainsi vérifier le taux moyen de réussite de notre algorithme. Ce dernier n'était donc pas indispensable pour son fonctionnement mais il était très intéressant lors de la phase de test.
La base de données
Pour obtenir une grande quantité de textes, nous avons utilisé la base de données 20news qui est structurée de la manière suivante :
- Un répertoire 20News avec à l'intérieur un répertoire data (dont le contenu sera utilisé comme des textes déjà classifiés) et un répertoire test (dont le contenu sera utilisé comme des textes à classifier).
- Dans les deux répertoires, nous trouvons les 20 mêmes répertoires qui sont des catégories de textes (par exemple le répertoire alt.atheism contenait uniquement des textes sur l'athéisme).
- Chaque répertoire de catégorie contenait plusieurs centaines de textes différents, sachant que les textes dans data et test étaient tous différents."
parametre fonction
Martin ...
structure code
Martin ...
Notre test
Martin ...
Comparaison avec les test des chercheurs :
Ilan ...
Conclusion :
Ilan ...
