Manipulation des données textuelles utilisation des outils WEKA/JAVA pour le projet AFD Vincent Guigue UPMC - LIP6 Vincent Guigue Preprocessing & JAVA 1/24
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 Vincent Guigue Preprocessing & JAVA 2/24
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. Vincent Guigue Preprocessing & JAVA 2/24
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ésentation bag of words Soit V le vocabulaire et d un document : d N V NB : d est (presque toujours) un vecteur sparse, c est à dire composé essentiellement de 0. Vincent Guigue Preprocessing & JAVA 3/24
Sur un exemple (crédit Sergio Jimenez) Vincent Guigue Preprocessing & JAVA 4/24
Elimination du bruit : mots similaires Etant donnée la représentation en sac de mots, il est pénalisant de compter les occurrences de président et présidents dans 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 Vincent Guigue Preprocessing & JAVA 5/24
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...) Vincent Guigue Preprocessing & JAVA 6/24
Traitements discriminants Le codage tf-idf permet de faire apparaître les mots saillants, caractéristiques d un document. Soit le document d j tiré de l ensemble D, n i,j désigne le nombre d occurrences du mot t i dans d j : tf i,j = n i,j D k n, idf i = log k,j {d : t i d} tf i,j : fréquence de t i dans le document j. idf i : pourcentage des documents où t i apparaît (log de l inverse). On remplace le codage n i,j par le codage tf idf(i, j) = tf i,j idf i http://fr.wikipedia.org/wiki/tf-idf Vincent Guigue Preprocessing & JAVA 7/24
Traitements discriminants : sélection de variables 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 : S tf idf (i) = j tf idf(i,j) {tf idf(i,j) 0} Odds ratio : S odds (i) = p i /(1 p i ) q i /(1 q i ) = p i (1 q i ) q i (1 p i ). (souvent utilisé en log). Où p i est la probabilité d observer le mot t i dans la classe 1 et q i est la probabilité d observer t i dans la classe 2. Vincent Guigue Preprocessing & JAVA 8/24
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...... Vincent Guigue Preprocessing & JAVA 9/24
Preprocessing de textes Données Outils Limites... Deuxième base de données (Pour s entrainer) Crédit : Sergio Jimenez Vincent Guigue Preprocessing & JAVA 10/24
Deuxième base de données (Pour s entrainer) Crédit : Sergio Jimenez Vincent Guigue Preprocessing & JAVA 11/24
Preprocessing de textes Données Outils Limites... Deuxième base de données (Pour s entrainer) Crédit : Sergio Jimenez Vincent Guigue Preprocessing & JAVA 12/24
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. Vincent Guigue Preprocessing & JAVA 13/24
Preprocessing de textes Données Outils Limites... 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 : Vincent Guigue Preprocessing & JAVA 14/24
Vincent Et hop Guigue : Preprocessing & JAVA 15/24 Weka chargement des données Weka accepte les.arff... Si vous avez un.arff : - Charger le fichier avec le bouton open (!) (par exemple essayez avec iris.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 : Open puis choisir le répertoire Message d erreur choisir un importateur Choisir TextDirectoryLoader Et hop! Vincent Guigue Preprocessing & JAVA 16/24
Weka chargement des données (3) Si vous n avez rien de tout cela... Il faut créer un.arff Vincent Guigue Preprocessing & JAVA 17/24
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 C "D abord merci de cet exceptionnel accu Vincent Guigue Preprocessing & JAVA 18/24
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! Vincent Guigue Preprocessing & JAVA 19/24
Preprocessing de textes Données Outils Limites... Sacs de mots... Vincent Guigue Preprocessing & JAVA 20/24
Experiences comparatives Vincent Guigue Preprocessing & JAVA 21/24
Type de résultats à obtenir : Vincent Guigue Preprocessing & JAVA 22/24
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 Vincent Guigue Preprocessing & JAVA 23/24
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. Vincent Guigue Preprocessing & JAVA 24/24