Analyser automatiquement les discours politiques, première étape

J’avais présenté, dans un précédent article, le site vie-publique.fr et la façon d’en collecter le contenu. J’ai depuis continué à le collecter de façon régulière, il se déverse toutes les nuits dans un index ElasticSearch et je commence à « scraper » des sites politiques ou de news. Il est temps maintenant de voir ce que l’on peut en faire du point de vue de l’analyse automatique. Je présente ici un premier état d’avancement que je pense prometteur.

L’analyse

Avec la brillante équipe de Datapolitics.fr, nous avons réfléchi sur le sujet et sommes est arrivés à la conclusion qu’un schéma d’analyse simple mais efficace pourrait être:

  1. détecter les problèmes et solutions présentés par chaque acteur politique (en cette période, on vise évidemment les candidats),
  2. sur chacun des aspects (problème/solution), identifier les thématiques

Cette grille d’analyse pourrait permettre, à terme, d’identifier l’évolution, non seulement de chacun des candidats mais aussi du discours dans son ensemble, et peut-être mettre en évidence des évolutions de la fenêtre d’Overton liée aux prises de position pré-électorales.

Pour cela, il faut qu’on arrive à faire cette analyse de façon automatique. C’est l’objet de ce premier test.

La mise en œuvre

Ici, on rentre dans les détails de mise en œuvre de NLP. Je vais essayer de rester aussi simple que possible afin de rester accessible à des non-spécialistes du NLP. Les spécialistes voudront bien me pardonner des raccourcis.

Classification

Identifier les parties d’intervention qui expriment des problèmes, des solutions (ou autre chose) peut se ramener à une tâche de classification des parties de textes formant les interventions. Comme « partie de texte », on va choisir la phrase, d’une part parce qu’il s’agit théoriquement d’un assemblage de mots, […] que le locuteur considère comme produisant un sens complet (ainsi que nous la définit le TLFi), d’autre part parce qu’un découpage en phrases est une procédure relativement simple à effectuer avec des outils de traitement de la langue (citons NLTK ou Spacy pour le monde Python).

Il suffit ensuite d’appliquer un classifieur sur ces phrases pour qu’il nous indique si la phrase décrit un problème, une solution ou autre chose.

La classification est une tâche classique en NLP, particulièrement mise en avant avec l’analyse de sentiment (est-ce que cet avis collecté sur le net est positif ou négatif ?). Les modèles à base d’apprentissage et en particulier les modèles neuronaux ont de bonnes performances pour ce type de tâche. Encore cela dépend-il de ce que l’on veut classifier…

Les modèles les plus aboutis pour ce type de tâche sont les modèles de type BERT et leurs dérivés. Initié par Google et désormais partie intégrante de son algorithme de recherche, BERT fait partie de ces modèles pré-entraînés sur la langue générale qu’il « suffit » d’adapter avec quelques exemples. Cela permet d’éviter l’entraînement initial qui est particulièrement coûteux (on estime que le coût d’entraînement d’un BERT est de l’ordre de 10.000$) et cela fonctionne généralement bien. On trouve ces modèles « sur étagère » gratuitement sur un site comme HuggingFace. La recherche française a créé deux modèles BERT dédiés au Français: CamemBERT et FlauBERT (oui, les chercheurs aiment les jeux de mots), disponibles aussi sur HuggingFace.

Il ne reste qu’à affiner (« fine-tuner ») ce modèle. Là encore, le processus est bien décrit sur le site de HuggingFace, mais le diable est dans les détails : il faut trouver le bon modèle de base, les bons hyper-paramètres (ceux qui gèrent le processus d’apprentissage). Je dois avouer qu’après plusieurs heures de tâtonnements sans réelle amélioration de la qualité de classification, je me suis penché vers l’initiative autoNLP de Huggingface et j’ai été bluffé. Le principe est de laisser faire l’exploration des cas possibles à la machine : on uploade le fichier de données (ici les textes et les classes attendues) et le système essaye un certain nombre de configurations pour l’apprentissage. A la fin, on obtient des modèles adaptés, avec en regard les performances de chacun (accuracy, précision, rappel). On choisira celui dont les caractéristiques sont les plus proches de ce qu’on désire. Les modèles peuvent être « servis » par Huggingface ou exécutés localement via l’habituel from_pretrained. Pour tester 15 modèles, j’en ai eu pour 100$. Ce n’est pas rien, mais comparé au temps gagné, ça vaut la peine d’y réfléchir. D’autant que le modèle obtenu dépassait les 80% d’exactitude (accuracy), ce dont j’étais bien loin avec mon notebook Colab.

Et cette semaine, autoNLP est gratuit, profitez-en, ça mérite un essai (et non, je ne suis pas payé par Huggingface).

Extraction de thèmes

Pour extraire les thèmes dans les parties problèmes/solutions, j’ai opté pour une technique plus traditionnelle : l’extraction de mots/termes-clés.

Pour ce faire, j’ai utilisé l’excellent (quoi qu’un peu délaissé) TermSuite. Il s’agit d’un extracteur de termes développé par l’Université de Nantes, initialement orienté vers l’extraction de terminologie bilingue, mais qui fonctionne très bien en monolingue. Il fournit, suite à l’analyse d’un corpus de textes, l’ensemble des termes (mots simples ou groupes nominaux) pertinents pour ce corpus. L’indice de « spécificité » permet de donner une pondération aux termes. Il est calculé sur la base de la fréquence des mots dans le corpus comparé à la fréquence des mots dans la langue courante. C’est cet indice que nous conservons pour la sélection des termes les plus saillants.

TermSuite est basé sur une analyse linguistique « traditionnelle », bien loin du deep-learning, ce qui ne l’empêche pas de fournir des résultats de grande qualité.

Note: si vous voulez utiliser TermSuite, la meilleure option est de l’installer directement et de lancer le système avec un runtime java-8 (pas plus). Il existe en effet des images docker, a priori plus séduisantes mais plus à jour.

Un premier essai

Pour tester l’approche, j’ai utilisé des interviews d’Olivier Véran et Gérald Darmanin issues de vie-publique.fr dans le dernier mois (10/9/2021-10/10-2021). Le fait d’utiliser un index ElasticSearch pour ces données rend ce type d’extraction particulièrement simple.

Le schéma ci-dessous donne le résultat de l’analyse automatique, pratiquement sans retouche (rien qui ne soit automatisable). En colonnes, les termes issus de chaque catégorie (problème/solution), en ligne les intervenant (O. Véran, G. Darmanin).

Chacun identifie trois grand types de problèmes dont deux sont communs : les consommateurs de crack dans Paris, thème d’actualité et le Covid, thème malheureusement récurrent. Ils développent ou sont interrogés sur un thème de plus qui lui est propre : pour O. Véran, la psychiatrie (dont les consultations seront remboursées), pour G. Darmanin, les problèmes liés à l’immigration.

Si les problèmes sont aux deux tiers communs, on voit en revanche que le discours ne présente que peu d’intersection. Cela qui correspond clairement à la fois au positionnement de chacun des ministres et aussi à la tournure que les interviewers ont donné à leur entretien. Pour être exact, la seule intersection que l’on peut voir est celle concernant la Mairie de Paris, manière pour chacun de faire intervenir un tiers dans l’épineux problème des fumeurs de crack du jardin d’Eole.

Le thème du vote par correspondance, qui semble a priori surprenant côté Darmanin, était un des sujets de l’interview de JJ Bourdin, sans problématique sous-jacente exprimée.

Conclusion

Que conclure de ce test ? Rien de spécifique par rapport au contenu : si O. Véran parle de prévention du suicide, c’est autant parce que c’est sa fonction (la santé publique) que le thème de l’interview. Idem avec les thématiques sur les visas et l’immigration côté Darmanin. Mais le fait qu’il n’y ait pas de surprise dans des résultats d’une chaîne de traitement automatique permet de valider l’approche, d’être confiant sur son utilisation à plus grande échelle et laisse à espérer que l’on puisse déployer ce type d’analyse sur les différents candidats et, pourquoi pas, voir leur évolution dans le temps.

Il reste entre-temps à affiner les modèles, à trouver d’autres sources, à contrebalancer l’effet interview (le faut-il ?), à pleinement automatiser l’ensemble. Bref, du pain sur la planche.

A suivre, donc…

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s