Skip to content
Olanto Foundation edited this page Jun 26, 2018 · 18 revisions

Développer un WebService de Classification

Dans Construire un HNN, nous avons vu comment faire le training et comment utiliser une application avec une classification hiérachique.

Nous allons examiner comment faire un Web Service REST utilisant un classifieur. Nous allons reprendre le service de détection des langues.

Utiliser les n-grammes

Dans notre premier exemple, nous avions fait la détection sur la base des mots dans les langues. On comprend bien que ce type de détection dépend du texte des documents et du choix des exemples. La constitution d'un corpus couvrant les différents domaines et styles d'expressions peut être difficile. Pour éviter cela et rendre plus universel le training, nous allons recourir au n-gram.

Dans notre cas, nous allons prendre des séquences de 5 caractères. Nous allons réécrire le corpus d'entrainement pour lui substituer. Une fenêtre de 5 caractères est déplacée sur le texte original. Les espaces sont remplacés par le caractère souligné. (Ce travail aurait pu être fait dans le tokeniser)

On voit ci-dessous la conversion du premier document.

 #####EN1#####
 Concerning the conditions and arrangements for admission of the republic of Bulgaria and Romania to the European Union.

 #####EN1#####
 _conc conce oncer ncern cerni ernin rning ning_ ing_t ng_th g_the _the_ the_c he_co e_con _cond condi ondit nditi
 ditio ition tions ions_ ons_a ns_an s_and _and_ and_a nd_ar d_arr _arra arran rrang range angem ngeme gemen ement
 ments ents_ nts_f ts_fo s_for _for_ for_a or_ad r_adm _admi admis dmiss missi issio ssion sion_ ion_o on_of n_of_
 _of_t of_th f_the _the_ the_r he_re e_rep _repu repub epubl publi ublic blic_ lic_o ic_of c_of_ _of_b of_bu f_bul
 _bulg bulga ulgar lgari garia aria_ ria_a ia_an a_and _and_ and_r nd_ro d_rom _roma roman omani mania ania_ nia_t
 ia_to a_to_ _to_t to_th o_the _the_ the_e he_eu e_eur _euro europ urope ropea opean pean_ ean_u an_un n_uni _unio
 union

Nous allons retester la précision du classifieur utilisant les n-grams L'ensemble des programmes que nous utilisons sont dans le package org.olanto.demo.langdetection du projet myclass.

L'indexation des documents

En ouvrant le projet myclass dans votre IDE. vous trouverez le code associé à notre exemple dans le package org.olanto.demo.langdetection. Trois classes sont utilisées pour l'indexation:

Dans le paramétrage, nous indiquons un fichier qui contient les mots outils

   IDX_DONTINDEXTHIS = SenseOS.getMYCLASS_ROOT()+ "MYCLASS_MODEL/config/dontindexthiswords.txt";

Le tokeniser est modifié pour ne pas indexer les balises mais seulement les textes.

       while (!(Character.isLetter((char) c)) && (c != EOF)) {  // skip non letter
            if ((char) c == '<') { // skip tag
                while ((c != EOF) && ((char) c != '>')) {
                    c = a.in.read();
                    a.poschar++;
                }
            }
            c = a.in.read();
            a.poschar++;
        }

La structure de dossier doit exister avant l'indexation.

Par convention, les structures sont dans le dossier data. Le projet myfirst contient un dossier sto0 et un dossier mnn.

Indexons notre corpus

Nous avons vu plus haut que le programme CreateIndexForCat va effectuer l'indexation.

Dans le log, on trouve les statistiques suivantes:

 STATISTICS global:
 wordmax: 262144, wordnow: 178462, used: 68%
 documax: 262144, docunow: 75251, used: 28%
 docIdx: 75251 docValid: 75251, valid: 100%
 totidx: 0

Dans notre cas, 178462 mots différents pour 75251 documents.

Premier entrainement et test

La mise en production est complétée par:

  • construction et stockage des réseaux de neurones des classifieurs de la hiérarchie de classification.
  • publication du classifieur avec un WebService
  • élaboration des applications clientes.