2018 – Statistic language classifier
Issu de recherches personnelles sur la création d’un algorithme de machine-learning permettant la classification « multi-class ».
Objectif
Création d’un algorithme dont le but et de déterminer le langage du site dont l’URL est donnée. Il s’agit donc de créer un classificateur statistique.
Les données d’entrainement – training data – concernent les langages suivants :
- Français
- Anglais
- Allemand
- Espagnol
- Italien
- C#
- Java
Fonctionnement
Entrainement
Entrée
En entrée un ou plusieurs corpus pour chaque langage permettant d’entrainer le classificateur.
Algorithme
Chaque corpus est découpé en blocs – ici chaque bloc correspond à un mot ou à un caractère spécial – de manière à obtenir un vecteur le représentant.
Le vecteur est échantillonné selon une taille spécifiée par l’utilisateur (sample size)
Pour chaque échantillon, on détermine la fréquence d’apparition de chaque terme – bloc – sur trois niveaux :
- Occurrence maximale
- Occurrence médiane
- Occurrence minimale
On conserve en mémoire les n premiers éléments de chaque niveau pour chaque groupe via une opération que j’ai nommée « occurrence pooling » en référence au « max pooling » avec n correspondant au « pooling size ».
Prédiction
Entrée
Une URI, c’est à dire soit L’URL d’un site web, dont le contenu est directement extrait, soit le chemin vers un fichier local sous la forme « file://PATH ».
Algorithme
- Comme pour l’entrainement, le texte est découpé puis échantillonné.
- Pour chaque échantillons on détermine une valeur, calculée comme suit, pour chaque niveau d’occurrence :
- Détermination de la fréquence des termes , groupés par label.
- Calcul du score global de l’échantillon par label en prenant en compte l’écart entre les fréquences de chaque labels, sachant que l’écart est élevé a la puissance k en fonction du niveau d’occurrence
- Application du poids pour chaque niveau d’occurrence
- Sommation des scores pour l’ensemble des échantillons
- Normalisation du score sur [0-1] pour donner le niveau de correspondance en pourcentage
Complexité
[Non définie pour le moment]
Limites
Cet algorithme de classification ne prends pas en compte le contexte. Le choix des deux langages C# et Java extrêmement proches syntaxiquement avait pour objectif d’en déterminer les limites et on peut en effet remarquer la difficulté d’obtenir une solution satisfaisante dans ce cas de figure.
Ouverture
Mon prochain objectif et donc de prendre en compte le contexte et d’englober la notion de séquence en construisant des modèles sous la forme de graphes de probabilités grâce aux n-gram, dont on purifie itérativement les motifs d’occurrence faible.
Télécharger l’exécutable de démo ici
797 total views, 2 views today
<3