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

  1. Comme pour l’entrainement, le texte est découpé puis échantillonné.
  2. Pour chaque échantillons on détermine une valeur, calculée comme suit, pour chaque niveau d’occurrence :
    1. Détermination de la fréquence des termes , groupés par label.
    2. 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
  3. Application du poids pour chaque niveau d’occurrence
  4. Sommation des scores pour l’ensemble des échantillons
  5. 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

Tagged , , , , , , ,

1 thought on “2018 – Statistic language classifier

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.