TP sur le topic modeling (corrigé)

François HU - Data scientist au DataLab de la Société Générale Assurances - 05/07/21

Introduction

Les topic models (modèles thématiques en français) sont une famille de modèles qui sont capables de découvrir les topics (thèmes en français) d'une collection de documents textuels. Dans ce contexte, le terme "topic" désigne des groupes de mots qui se retrouvent souvent ensemble dans un même document. Par exemple, dans un recueil d'articles de journaux, un topic model peut identifier un topic composé des mots :

Les topics modeling ne peuvent pas affecter un titre à ces topics : c'est notre tâche d'interpréter ces topics et de leur donner des étiquettes telles que politique et football.

La particularité de ces méthodes c'est que nous n'avons pas de labels : ce sont des tâches non-supervisées.

L'un des modèles les plus populaires est le LDA. Le LDA est un modèle génératif qui considère chaque document comme un mélange de topics. Ce sont ces topics qui seront en charge de générer les mots. Par exemple,

image.png

Données : Grand Débat National

2. Charger les données

Nous allons tout d'abord importer un des fichiers csv sur la transition écologique dans un dataframe pandas.

Chacune des lignes de ce dataframe raw_data contient des réponses répondant à une liste de questions sur la transition écologique. Certaines de ces questions sont à choix multiples, tandis que d'autres sont des questions ouvertes.

Nous allons étudier la dernière question :

Y a-t-il d'autres points sur la transition écologique sur lesquels vous souhaiteriez vous exprimer ?

car cette dernière laisse plus de liberté aux personnes. Notre objectif est d'analyser les topics sur lesquels portent leurs réponses grâce au modèle LDA.

Nous pouvons remarquer qu'il y a beaucoup de données manquantes (comme toute question ouverte, les personnes décident oui ou non d'écrire un commentaire). Une étape de néttoyage est donc nécessaire.

3. Nettoyer et vectoriser les documents

Avant d'entraîner notre modèle LDA, nous avons besoin de tokenizer notre texte. Nous allons tokenizer grâce à la librarie spaCy car nous allons effectuer seulement quelques prétraitements de base. Nous allons juste initialiser un modèle vierge pour la langue française.

Remarques : Après avoir installé la librairie SpaCy (pip install spacy), il faut télécharger un pipeline entraîné pour la langue française.

python -m spacy download fr_core_news_sm

spaCy fournit une variété d'annotations linguistiques pour vous donner un aperçu de la structure grammaticale d'un texte. Cela inclut entre autres des preprocessing classique en NLP à savoir la lemmatisation.

Supprimons toutes les lignes du dataframe qui n'ont pas de réponse pour notre question (les NaNs ci-dessus). Ce nouveau dataframe s'appellera textes

Ensuite, nous utilisons spaCy pour effectuer notre premier prétraitement (cela peut prendre quelques minutes) :

Nous avons maintenant une liste de documents spaCy. Nous allons transformer chaque document spaCy en une liste de tokens. Au lieu des tokens originaux, nous allons travailler avec les lemmes à la place. Cela permettra à notre modèle de mieux généraliser. En effet, nous voulons par exemple que "continuation" et "continuations" représentent la même signification. Voici la liste complète des prétraitements :

  1. supprimer tous les mots de moins de 3 caractères,
  2. supprimer tous les stop-words, et
  3. lemmatiser les mots restants et,
  4. mettre ces mots en minuscules.

Voici un aperçu du premier document tokenisé :

deuxième document tokenisé :

Afin de conserver un peu l'ordre des mots lors de notre modélisation, nous allons tenir en compte les bigrammes fréquents. Pour cela, nous allons utiliser la bibliothèque Gensim (excellente bibliothèque NLP pour les topics modeling et word embeddings)

Voici le processus retenu :

Cela signifie que les bigrammes ne seront pas dans leur position correcte dans le texte, mais comme les topic models sont des modèles de bag-of-words (sac-de-mots en français) qui ignorent la position des mots, cela ne pose pas de problèmes.

Passons à la dernière étape du prétraitement spécifique à Gensim. Nous allons tout d'abord créer une représentation dictionnaire des documents. Ce dictionnaire mappera chaque mot à un identifiant unique et nous aidera à créer des représentations en sac-de-mot de chaque document. Ces représentations en sac-de-mots contiennent les identificateurs des mots du document ainsi que leur fréquence (ici en nombre d'occurences). De plus, nous pouvons supprimer les mots les moins fréquents et les plus fréquents du vocabulaire. Cela améliorera la qualité de notre modèle et accélèrera son entraînement.

Ensuite, nous créons des représentations en Bag-of-Words pour chaque document du corpus voir la méthode doc2bow :

4. Topic Modeling avec LDA

Maintenant, il est temps d'entraîner notre LDA ! Pour ce faire, nous utilisons les paramètres suivants :

Remarquons que l'entraînement peut durer quelques minutes

5. Résultats et visualisation

Voyons ce que le modèle a appris. Pour ce faire, affichons les dix mots les plus caractéristiques pour chacun des topics. Nous obeservons déjà des tendances intéressantes : si certains topics sont plus généraux (comme le topic 3), d'autres font référence à des topics très pertinents :

Une autre façon d'observer les topics est de les visualiser. Ceci peut être fait avec la bibliothèque pyLDAvis. PyLDAvis nous illustre :

Notez que cela peut prendre quelques minutes pour charger.

Enfin, examinons les topics que le modèle reconnaît dans certains des documents individuels. Nous voyons ici comment LDA tend à attribuer une probabilité élevée à un faible nombre de sujets pour chaque document, ce qui rend ses résultats très interprétables.

Conclusion

De nombreuses collections de textes non structurés ne sont pas accompagnées de labels. Les topic models (modèles thématiques en français) tels que le LDA sont une technique utile pour découvrir les topics les plus importants dans ces documents. Gensim facilite l'apprentissage sur ces sujets et pyLDAvis présente les résultats d'une manière visuellement attrayante. Ensemble, ils forment une puissante boîte à outils pour mieux comprendre et explorer des sous-ensembles de textes connexes. Si ces résultats sont souvent déjà très révélateurs, il est également possible de les utiliser comme point de départ, par exemple pour un exercice de labellisation pour la classification supervisée de textes. En somme, les modèles thématiques devraient figurer dans la boîte à outils de chaque data scientist comme un moyen très rapide d'obtenir un aperçu des grandes collections de documents.