NLP : prédire les thèmes associés à l’aide du topic modeling

L’IA joue un rôle indispensable dans la transformation et le développement des entreprises.

Parmi les principaux outils et technologies algorithmiques d’IA qui nous concernent au quotidien, nous ne pouvons que citer le traitement du langage naturel ou le NLP : qui ne s’est jamais servi de Siri ou de son correcteur orthographique sur son smartphone ?

Cet article vous présente comment exploiter les techniques de l’analyse NLP pour prédire et identifier les principaux thèmes utilisés par les développeurs de la communauté du site web Stackoverflow. Cette prédiction les aidera lors de leur programmation à prendre en compte les différents thèmes reliés au langage de programmation utilisé et ainsi d’éviter les contradictions résultant d’une modification d’un paramètre et qui risquent d’entraîner des erreurs sur d'autres paramètres.

Par quoi commencer ?

Pour commencer toute analyse NLP, il faut d’abord bien concevoir sa base de données. Dans notre cas, nous avons extrait depuis l’API du site web tous les postes liés aux six langages de programmation suivants : JavaScript, Python, PHP, HTML, CSS et MySQL.

Il existe deux étapes pour traiter le langage naturel. La première porte sur la partie linguistique qui consiste à exploiter les données, après une phase de data cleaning et de data processing. La deuxième porte sur l’apprentissage automatique grâce à l’application des modèles de machine learning ou de deep learning.

 

Première étape de l’analyse NLP

Le data cleaning s’avère essentiel, car les utilisateurs du site rédigent leurs publications d’une manière que nous pourrions qualifier d’« informelle » : avec des abréviations, des ponctuations mal utilisées ou encore des fautes d’orthographe. Nous avons donc tout intérêt à supprimer les extraits de code, les stopwords, les tags HTML et aussi les caractères spéciaux dans le but d’obtenir une base de données cohérente, concise et simple à manipuler par la suite.

Nous allons ensuite nous servir du package gensim. Il s’agit d’une bibliothèque open source servant à la modélisation de sujets non supervisés et au traitement du langage naturel : elle est conçue pour extraire automatiquement les sujets sémantiques d'un document donné. À ce stade, nous appliquons la « tokenization », qui est tout simplement une séparation du texte en unités plus petites appelées « jetons » et qui peuvent être des mots, des caractères ou encore des sous-mots. Pour effectuer cette action, nous utilisons la méthode « split_sentences » de la classe gensim.summerization.texttcleaner :

Ensuite, nous construisons les bigrams (resp trigrams) qui prédisent l'occurrence d'un mot par rapport à ses utilisations précédentes (resp les 2 mots précédents). Pour y arriver, nous utilisons la classe gensim.models.phrases pour créer les modèles bigrams et trigrams.

Enfin, nous réalisons la lemmatisation qui a pour but de représenter la forme de base d’un mot donné. Désormais, nous allons pouvoir appliquer sur notre data pré-traitée nos modèles de topic modeling grâce à la bibliothèque spaCy. Elle est livrée avec des modèles prédéfinis qui peuvent analyser du texte et calculer diverses fonctionnalités liées à la NLP via un seul appel de fonction. Bien sûr, elle fournit aussi le lemme du mot.
 

Deuxième étape de l’analyse NLP

Maintenant que notre base de données est prête, nous pouvons appliquer le modèle d’apprentissage automatique adéquat pour identifier les ensembles associés à chaque langage cité précédemment.

Pour parcourir ces énormes quantités de texte brut ainsi que pour les regrouper en groupes similaires de documents, nous allons utiliser du topic modeling. C’est une technique de modélisation des documents de texte qui cherche à trouver une structure sémantique cachée dans les documents.  Elle réinterprète les textes sous forme mathématique afin d’isoler les termes les plus pertinents et les associer par proximité. Nous allons nous intéresser principalement au modèle Latent Dirichlet Allocation ou LDA.

LDA est une méthode probabiliste générative de mots dont le but de découvrir les thèmes sous-jacents à un ensemble de documents, LDA est un modèle Bayésien à trois couches. Elle utilise l’approche « Bag of Word » où chaque document est représenté par un vecteur de longueur fixe.

Chaque dimension du vecteur correspond au nombre d’occurrences de ces mots dans le document. C’est un outil classiquement utilisé dans une grande variété de domaines : structuration automatique de corpus de documents, recommandation, génération de rapports de synthèse.

Dans notre cas, nous allons l’appliquer sur notre base de données, tout en cherchant à optimiser ses paramètres. Pour se faire, il faut multiplier les tests en jouant chaque fois sur les différents paramètres du modèle. Parmi les paramètres à modifier nous citons principalement le paramètre chunksize (le nombre de documents à utiliser dans chaque morceau de formation), l’update_every (pour déterminer la fréquence à laquelle les paramètres du modèle doivent être mis à jour et il est à 1 par défaut), sans oublier les passes qui représentent le nombre total de passes d'entraînement.

D’après les résultats des tests, nous choisissons le modèle qui retourne la meilleure cohérence des ensembles ainsi qu’un score de fiabilité important (supérieur à 85%).

Ensuite, nous avons visualisé à l’aide du package PyLDAvis les ensembles de chaque langage de programmation où chaque bulle représente un thème différent.

Enfin, nous avons aussi la possibilité d’extraire les top mots qui représentent chaque thème comme l’exemple ci-dessous de la base de données JavaScript. Pour donner suite à l’analyse des mots de chaque ensemble, nous avons pu renommer chaque thème comme suivant :


Tableau : les top mots dans chaque thème

 

Le NLP nous a aidé ici à prédire les thématiques associées à un langage donné, donc à aider les développeurs à prendre en compte dans leur projet IT les différents sujets associés pour optimiser leur travail. Mais il peut avoir bien d’autres applications, notamment dans la compréhension de la recherche scientifique.