samedi 31 décembre 2016

Text mining : catégorisation de SMS sous Python


L’objectif de la catégorisation de textes est d’associer aussi précisément que possible des documents à des classes prédéfinies. Nous nous situons dans le cadre de l’apprentissage supervisé, avec une variable cible catégorielle, souvent binaire. La particularité réside dans la nature de la variable prédictive qui est un document textuel. Mettre en œuvre directement les techniques prédictives n’est pas possible, il faut passer obligatoirement par une phase de préparation des données.

La représentation par sac de mots (bag of words) est souvent privilégiée pour ramener la description du corpus de textes en tableau individus (documents) – variables (termes) : on parle de matrice documents termes. Elle est accolée à la variable cible pour former l’ensemble de données. L’affaire est censée être réglée à ce stade puisque nous retrouvons la conformation habituelle des données propice à l’analyse prédictive. Elle ne fait que commencer en réalité car la matrice a pour singularité d’avoir une dimensionnalité élevée (plusieurs milliers de descripteurs) et d’être creuse (beaucoup de valeurs sont nulles). Certaines techniques de machine learning sont plus adaptées que d’autres. La réduction de la dimensionnalité notamment revêt une importance considérable, d’une part pour améliorer les performances, d’autre part pour rendre interprétables les résultats car, au final, au-delà de la prédiction pure, il s’agit aussi de comprendre la nature de la relation entre les documents et les classes.

Dans ce tutoriel, nous décrirons le processus de catégorisation de textes sous Python en exploitant essentiellement les capacités de text mining du package scikit-learn, lequel fournira également les méthodes de data mining (régression logistique). Nous traiterons des SMS à classer en messages « spam » (courrier indésirable, délictueux) ou « ham » (légitime). Le corpus provient de la « SMS Spam Collection v.1 » (Almeida et al., 2011).

Mots clés : text mining, fouille de textes, corpus, bag of words, sac de mots, f1-score, rappel, précision, sélection de variables, logistic regression, scikit learn, python
Document : Identification des spams dans les SMS
Données : Données et programme Python
Références :
Almeida, T.A., Gómez Hidalgo, J.M., Yamakami, « A. Contributions to the Study of SMS Spam Filtering: New Collection and Results », in Proceedings of the 2011 ACM Symposium on Document Engineering (DOCENG'11), Mountain View, CA, USA, 2011.

vendredi 23 décembre 2016

Excel avancé - Cours et exercices corrigés

J’ai dû arrêter mon cours d’Excel avancé (outils d'analyse et programmation VBA - Visual Basic pour Applications) cette année. Avec un petit pincement au cœur quand même. C’était un de mes derniers enseignements devant un public non informaticien. Il me fallait développer des trésors d’ingéniosité et de patience pour persuader les étudiants que c’était intéressant pour eux (au cas où ils en douteraient) et qu’ils étaient capables de le faire (ils en doutaient vraiment beaucoup, surtout durant les premières séances). C’était d’ailleurs le dernier enseignement que je faisais de tête en m’astreignant à écrire les principales notions au tableau pour éviter d’aller trop vite (tout le monde connaît mon débit de parole cataclysmique, sans compter mon incapacité à faire cours sans pousser des beuglements avec conviction [tout le bâtiment profitait de mes séances] tant je suis submergé par ce que je fais...).

Maintenant que j’arrête le cours, je sens que je vais tout oublier. J’ai donc décidé de rédiger proprement au moins la partie VBA, et de mettre de l’ordre dans mes TD en explicitant les exercices. Je les mets en ligne avec leurs corrigés pour que tout le monde puisse en profiter.

Il faut connaître un peu Excel avant de pouvoir tirer profit de ces exercices. Le TD n°1 vous permettra de vous situer par rapport au niveau attendu pour la suite des séances.

Exercices corrigés - Excel avancé et Programmation VBA
ThèmeSujetCorrigé
TD n°1. Construction d’une feuille de calcul. Références absolues et relatives. Elaboration de graphiques.
TD n°2. Introduction à la programmation VBA. Branchements conditionnels. Ecriture et utilisation des fonctions personnalisées.
TD n°3. Simulations et scénarios. Table de simulation à 1 et 2 entrées. Gestionnaire de scénarios. Programmation VBA des fonctions personnalisées avec branchement conditionnels et branchements multiples.
TD n°4. Les boucles en programmation VBA. Exploitation du type Range (plage de cellules) dans les fonctions personnalisées.
TD n°5. Résolution des problèmes et optimisation. Valeur cible et solveur.
TD n°6. Programmation VBA des fonctions personnalisées. Les boucles while et for each. Le type Variant.
TD n°7. Programmation des macros VBA. Exploitation directe des classeurs et feuilles. Programmation des simulations.
TD n°8. Programmation des macros VBA sur les sélections. Sélection simples (une seule zone) et multiple (plusieurs zones).

Références :
Rakotomalala R., "Excel - Programmation VBA", Dec. 2016.
Rakotomalala R., "Page de cours - Excel avancé".

dimanche 11 décembre 2016

Text mining : topic model - Diapos

Le « topic modeling » est un processus de réduction de la dimensionnalité en fouille de textes. Il cherche à mettre en exergue les « topics » (thèmes) sous-jacents aux documents d’un corpus.

D’une part, les topics s’expriment dans l’espace des termes, ce qui permet de les interpréter. D’autre part, ils définissent un nouvel espace permettant de décrire les documents. Ce qui permet de mieux comprendre leur nature et les informations qu’ils (les documents) véhiculent. Les algorithmes de machine learning (supervisé ou non-supervisé) peuvent tirer parti du nouveau système de représentation, plus compact, pour réaliser des analyses plus pertinentes.

Ce support décrit deux approches particulièrement populaires dans le domaine : (1) l’approche LSI, latent semantic indexing (ou LSA – latent semantic analysis) ; (2) la LDA, latent dirichlet allocation. Nous mettrons surtout l’accent sur les idées qui les guident et la lecture des résultats.

Mais nous aborderons également une approche basée sur l’analyse factorielle des correspondances (AFC), très peu citée dans la documentation en langue anglaise. Pourtant, comme la LSI, elle s’appuie sur un mécanisme de décomposition en valeur singulière (SVD – singular value decomposition), sauf qu’elle exploite en entrée une matrice de documents termes présentant les informations sous un angle différent.

Mots clés : text mining, fouille de textes, corpus, bag of words, sac de mots, lsi, latent semantic indexing, lsa, latent semantic analysis, afc, analyse factorielle des correspondances, lda, latent dirichlet analysis, svd, singular value decomposition
Document : Topic model
Références :
Aggarwal C., Zhai C., "Mining Text Data", Springer, 2012.
Grossman D., Frieder O., "Information retrieval - Algorithms and heuristics",  Second Edition, Springer, 2004.