-
Notifications
You must be signed in to change notification settings - Fork 1
Dev_WebService_FR
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.
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
.
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:
-
ConfigurationForCat
: Paramètres d'indexation -
TokenCatNative
: Définition des mots (token) -
CreateIndexForCat
: Programme réalisant 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
.
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.
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.