Informatique - Électronique, Classification des données, corpus de documents, algorithme K-means, jeu de donnée, NIPS neural information processing systems, bag of words, sac de mots, sparse vector, matrice TF-IDF, dataframes, visualisation wordCloud
Le problème étudié est un problème de classification. On veut classer des documents au sein d'un corpus. On exclut donc les problèmes de régression.
Les données fournies n'ayant pas d'étiquettes apparentes et étant obtenues par expérience si ce n'est les 3 catégories ENRON, NIPS et KOS, on s'oriente vers un problème de classification non supervisé.
Une manière pratique (bien que simplificatrice) de considérer des documents textuels pour des tâches non supervisées est le sac de mots (chaque document est alors représenté sous la forme de l'ensemble des mots qui le composent). On adoptera ce type de représentation bien qu'il en existe d'autres.
[...] On a utilisé pour cela les fonctions de Windows et Join. scala> temp.show word docID wordIDs count wordIDs_single_global wordIDs_local scala> val tf=temp.select("docID","wordIDs_local","word","count") scala> tf.show docID wordIDs_local word count Une vérification simple que les ID sont bien ceux attendus et que la fréquence du mot est la bonne consiste à filtrer TF sur le dernier mot. scala> tf.filter("_c1==35284").show docID wordIDs_local word count On s'assure dans le fichier de vocabulaire NIPS contient comme dernier mot zwislocki . Afin d'avoir désormais une représentation vectorisée de TF, on convertit la matrice en RDD puis à l'aide d'un mappage et on utilise les points labélisés et la représentation en sparse vector en fixant la dimension de documents (doit être supérieure à la taille du vocabulaire relatif aux ID locaux : 35284) : Val tf_temp.rdd.map(r (r.getInt(0), (r.getInt(2), r.getInt(1).toDouble))).groupByKey().map(r LabeledPoint(r._1, Vectors.sparse(100000, r._2.toSeq))).toDF scala> a.show label=docID features 18624.0 (100000, [ 9018.0 (100000, [ Ayant désormais notre représentation TF, on décide de l'enrichir pour obtenir TF-IDF en faisant appel à l'estimateur IDF de Spark en vue de construire un modèle. [...]
[...] Ainsi, l'objectif est de calculer la matrice TF-IDF (matrice document terme) : toute similarité entre documents est expliquée par la présence de nombreux termes communs entre les documents, toute similarité entre termes est expliquée par leur présence commune dans un grand nombre de documents. Une limitation est par exemple le fait que si deux documents emploient chacun un de ces termes, la comparaison de leurs vecteurs ne mettra en évidence aucune similarité due à la signification commune des synonymes. Ensuite, on effectuera une classification automatique des données via K-Means pour mettre en évidence la séparation en catégories. [...]
[...] De plus, on a une idée du nombre de catégories à l'avance que l'on veut discriminer de par la nature des données fournies jeux de données : KOS, NIPS, ENRON). Rien ne nous empêche ensuite d'augmenter ce nombre de groupes à discriminer. On choisit ainsi l'algorithme K-means, qui a la capacité de traiter une quantité non négligeable de données. Et ceci avec initialisation K-means car une bonne initialisation de l'algorithme K-means doit permettre d'obtenir une solution de meilleure qualité, mais aussi une convergence plus rapide (c'est-à-dire avec moins d'itérations) vers cette solution. [...]
[...] docID=label wordID Word TF-IDF columbia mid disk ncr pst deadhead 1011.6804026973472 Les mots les plus significatifs sont ceux-ci dessus. On remarque que tous ces mots appartiennent au vocabulaire du corpus ENRON (quelques-uns appartiennent aussi aux 2 autres corpus), et sont les plus significatifs dans la collection de documents d'ENRON, puisqu'ils se projettent tous avec des scores élevés sur des documents dont l'ID est inférieur à DE=39861. Par ailleurs, le mot pst obtient le score le plus élevé en se projetant sur le corpus ENRON, ce qui est plutôt normal puisqu'il s'agit d'un mot largement utilisé dans les fins de mails (tf élevé et les documents ENRON sont des mails), mais aussi dans les blogs (les documents KOS sont des textes relatifs à des pages de blog), mais non pas dans les revues scientifiques (idf élevé et les documents NIPS sont des revues scientifiques). [...]
[...] Ainsi, on comprend la dissociation de la classe 2 relativement au corpus NIPS puisque les documents associés à cette classe contiennent des mots vraiment spécifiques. On procède de même pour la classe 5. Deux documents y sont associés, dont voici les informations : scala> tf_idf.filter("_c0=4554").orderBy(desc("_c5")).show scala> tf_idf.filter("_c0=5055").orderBy(desc("_c5")).show On remarque que ces documents ne partagent pas les mêmes mots, mais en revanche ils se projettent avec des pondérations quasiment identiques en respectant un certain ordre (tf idf élevé de 90, puis 9 pour les autres). Par ailleurs, ces documents appartiennent au corpus d'ENRON. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture