Manipulation des données textuelles
utilisation des outils WEKA/JAVA pour le projet AFD
Vincent Guigue UPMC - LIP6
Traitements pour la classification de textes
Les données textuelles sont difficiles à gérer :
1 Les corpus sont volumineux, le vocabulaire est grand : - il faut des algorithmes rapides,
- les données ne sont pas toujours stockables en mémoire.
2 La structure des phrases est difficile à gérer.
3 Les mots peuvent prendre plusieurs formes (pluriels...)
4 Les algorithmes de machine learning ont du mal sur des données de grande dimension
Traitements pour la classification de textes Les données textuelles sont difficiles à gérer :
1 Les corpus sont volumineux, le vocabulaire est grand : - il faut des algorithmes rapides,
- les données ne sont pas toujours stockables en mémoire.
Perceptron, SVM (en version rapide), Naive Bayes...
Boosting, Bagging
2 La structure des phrases est difficile à gérer.
On supprime la structure...
3 Les mots peuvent prendre plusieurs formes (pluriels...) Plusieurs approches possibles... (cf plus loin)
4 Les algorithmes de machine learning ont du mal sur des données de grande dimension
On cherche des heuristiques pour supprimer les mots inutiles.
Sacs de mots
Ne sachant pas prendre efficacement en compte la structure des phrases... On l’élimine totalement !
Un document devient alors un comptage des différents mots qui le composent :
Représentationbag of words
SoitV le vocabulaire etd un document :d ∈N|V|
NB :d est (presque toujours) un vecteursparse, c’est à dire composé essentiellement de 0.
Sur un exemple (crédit Sergio Jimenez)
Elimination du bruit : mots similaires
Etant donnée la représentation en sac de mots, il est pénalisant de compter les occurrences deprésidentetprésidentsdans deux cases séparées... Nous allons donc traiter les mots du textes pour les ramener à leurs radicaux :
◦ mangeait, mangera, mangeoire,...→ manger
Lemmatisation : approche basée sur un dictionnaire efficace/il faut un dictionnaire...
Exemple d’outil : treetagger (gratuit, récupérable sur internet)
Stemmatisation : approche statistique de suppression des suffixes rapide, facile à utiliser/ parfois approximatif
cf outils fournis dans le projet
Traitements discriminants : réduction de la dimensionnalité
Les algorithmes de machine learning sont mis en difficulté sur les problèmes de grandes dimensions... Nous cherchons donc à réduire la dimension des données :
Heuristiques :
◦ Elimination des mots peu fréquents
◦ Elimination des mots courts (articles...)
◦ Elimination de tous les éléments inutiles a priori (chiffres...)
Traitements discriminants
Le codagetf-idf permet de faire apparaître les motssaillants, caractéristiques d’un document.
Soit le documentdj tiré de l’ensembleD,ni,j désigne le nombre d’occurrences du motti dansdj :
tfi,j= ni,j
P
knk,j, idfi=log |D|
|{d :ti ∈d}|
tfi,j : fréquence de ti dans le document j.
idfi : pourcentage des documents oùti apparaît (log de l’inverse).
On remplace le codageni,j par le codage tf−idf(i,j) =tfi,j×idfi http://fr.wikipedia.org/wiki/TF-IDF
Traitements discriminants : sélection de va- riables
Il est possible d’utiliser des critères discriminants (donnant un score à chaque mot) pour choisir un sous-ensemble du dictionnaire sur lequel travailler.
Parmi les classiques :
◦ Saillance : Stf−idf(i) =
P
jtf−idf(i,j)
|{tf−idf(i,j)6=0}|
◦ Odds ratio : Sodds(i) = pqi/(1−pi)
i/(1−qi) = pqi(1−qi)
i(1−pi).(souvent utilisé en log). Oùpi est la probabilité d’observer le mot ti dans la classe 1 etqi est la probabilité d’observer ti dans la classe 2.
Présentation des données
Données d’apprentissage :
<100:1:C> Quand je dis chers amis, ...
<100:2:C> D’abord merci de cet ...
...
<100:14:M> Et ce sentiment ...
Le format est le suivant : <ID-Discours :ID-phrase :Etiquette>, C
→Chirac, M → Mitterrand
Données de test, sans les étiquettes :
<100:1> Quand je dis chers amis, ...
<100:2> D’abord merci de cet ...
...
Deuxième base de données (Pour s’entrainer)
Crédit : Sergio Jimenez
Deuxième base de données (Pour s’entrainer)
Deuxième base de données (Pour s’entrainer)
Crédit : Sergio Jimenez
Octave vs Weka
◦ Octave ne sait pas gérer une chaine de caractère
◦ Octave ne sait pas faire une boucle for
◦ Octave ne sait pas gérer des grosses masses de données
Octave
Octave est parfait pour comprendre comment fonctionne un
algorithme et le tester, Octave est parfait pour tracer les courbes de résultats et faire des statistiques... Mais Octave ne peut pas traiter convenablement le problème qui nous intéresse maintenant.
Weka propose des algorithmes plus efficaces et des pré-traitements pour le texte... Tout ne sera pas parfait mais c’est une meilleure base de travail.
Weka (téléchargement)
◦ Télécharger la version linux : http://www.cs.waikato.ac.
nz/ml/weka/index_downloading.html
◦ Lancer le programme :java -Xmx1000M -jar weka.jar
◦ Lancer l’explorer :
Weka chargement des données Weka accepte les.arff...
◦ Si vous avez un .arff :
- Charger le fichier avec le bouton open ( !) (par exemple essayez aveciris.arff) - Passer dans l’onglet classify
· Choisir un modèle (régression logistique par exemple)
· Choisir un mode d’évaluation
Weka chargement des données (2)
Si vous avez un répertoire contenant des documents textes, weka sait faire l’importation :
◦ Openpuis choisir le répertoire
◦ Message d’erreur→ choisir un importateur
◦ Choisir TextDirectoryLoader
◦ Et hop !
Weka chargement des données (3) Si vous n’avez rien de tout cela... Il faut créer un .arff
Weka chargement des données (4)
Vous devez maitriser un minimum d’expression régulière ET/OU perl pour créer rapidement ce type de fichier
file=corpusu.txt fileout=corpusuPP.arff
head -n5000 data/corpus.tache1.learn > $file
#iconv -f latin1 -t utf8 data/corpus.tache1.learn > $file
sed ’s/"//g;s/<.*C> /C "/g;s/<.*M>/M "/g;s/$/"/g’ $file > $fileout sed -i.bak ’1i\
@relation president\
\
@attribute document_class {M,C}\
@attribute document_content string\
\
@data\
\
’ $fileout
@relation president
@attribute document_class {M,C}
@attribute document_content string
@data
C "Quand je dis chers amis, il ne s’agit pas là d’une formule diplomatique, mais de l’expression de ce que je ressens."
C "D’abord merci de cet exceptionnel accueil que les Congolais, les Brazavillois, nous ont réservé cet après-midi."
Passer aux sacs de mots
Pour passer au sacs de mots, il faut utiliser un filtre Weka :
Il faut bien comprendre les options car vous devrez jouer avec !
Sacs de mots...
Experiences comparatives
Type de résultats à obtenir :
Analyse qualitative
Regarder les poids des mots du classifieur :
annoying 37.2593
another -8.458
any 3.391
anyone -1.4651
anything -15.5326
anyway 29.2124
apparently 12.5416
...
attention -1.2901
audience 1.7331
audiences -3.7323
away -14.9303
awful 30.8509
Compatibilité du dictionnaire !
Dès que l’on a des ensembles d’apprentissage et de test séparés, il faut synchroniser le dictionnaire :
Ce n’est pas prévu dans l’interface ! Il faut passer au code JAVA.
Heureusement, la librairie est bien faite et bien documentée Exemple en ligne.