Conférence PyConFr 2019 - Bordeaux
What is the cost of lies?
La série Chernobyl retrace l'accident qui a eu lieu sur le réacteur 4 de la centrale Lénine à une centaine de kilomètres de Kiev. Très bien documentée, cette série présente les points clès de l'accident aussi bien du point de vue technique que du point de vue du fonctionnement de l'URSS.
Ayant une formation d'ingénieur en génie nucléaire et ayant travaillé pendant 7 ans dans l'industrie électro-nucléaire, j'ai changé de secteur d'activité en 2017 pour travailler dans le développement en Python.
J'ai fait cette analyse de la série Chernobyl pour la PyconFr 2019 à Bordeaux. L'objectif de la conférence est de présenter les premières étapes d'une analyse de langage naturel en Python. Elle n'a pas pour but une étude poussée des algorithmes d'analyse du langage naturel mais plutôt d'étudier les possibilités de visualisation de la donnée.
Les principales librairies Python utilisées pour l'analyse sont les suivantes :
Cette librairie est utilisée pour manipuler les données extraites des sous-titres sous forme de dataframes
Plus d'informationsCette librairie est utilisée pour effectuer l'analyse du langage naturel
Plus d'informationsCette librairie est utilisée pour effectuer la racinisation et la lemmatisation
Plus d'informationsCette librairie est utilisée pour trouver les caractéristiques des personnages de la série
Plus d'informationsCette librairie est utlisée pour générer les nuages de mots
Plus d'informationsCette librairie est utlisée pour ajouter le temps sur les nuages de mots
Plus d'informationsCette librairie est utlisée pour générer vidéos de nuages de mots
Plus d'informationsL'architecture du code s'appuie sur quatre modules et un notebook Jupyter. Les différents modules sont :
La librairie Wordcloud permet de générer des nuages de mots à partir d'images. Les nuages de mots suivants ont été générés à partir d'une image du réacteur de Tchernobyl et ils présentent les mots les plus présents dans les sous-titres de la série en français et en anglais :
Nuage de mots créé en utilisant de la racinisation des sous-titres français
Nuage de mots créé en utilisant de la lemmatisation des sous-titres anglais
Les nuages de mots de l'ensemble de la série permettent de se rendre compte que l'accent n'a pas été mis sur l'aspect technique de l'accident (même si l'épisode 5 présente très bien le déroulé technique de l'accident) mais plutôt sur comment la crise a été gérée ainsi que les conséquences.
La couleur des mots générée par la librairie Wordcloud n'est pas utilisée à cette étape pour ajouter du sens aux nuages de mots. Une utilisation possible de la couleur des mots est d'afficher des champs lexicaux. On peut générer des champs lexicaux grâce à l'algorithme Latent Dirichlet Allocation (LDA). Les résultats obtenus sont présentés dans le tableau suivant :
Word 0 | Word 1 | Word 2 | Word 3 | Word 4 | Word 5 | |
---|---|---|---|---|---|---|
Topic 0 | minute | much | fuck | moment | dangerous | number |
Topic 1 | reactivity | said | turn | many | won | maybe |
Topic 2 | happen | last | bullet | long | dead | life |
Topic 3 | world | gonna | already | wait | explosion | institute |
Topic 4 | sorry | give | working | matter | safety | year |
Topic 5 | ever | everyone | night | ground | scientist | care |
Le tableau a été généré à partir de la méthode show_topics de la classe Orchestrator du module main. Les champs lexicaux ne sont pas clairement définis. L'implémentation dans la couleur des mots des nuages de mots ne semble pas très intéressante en l'état.
La première étape est de générer une vidéo à partir de nuages de mots créés au fil de la série. Cette première vidéo ne prend pas en compte l'étape de racinisation ou de lemmatisation. Voici le rendu pour le premier épisode de la série :
La limites de cette visualisation est le manque de répères temporels pour se situer dans la série et l'utilisation d'un nombre de sous-titres uniformes pour générer les nuages de mots. Ce dernier point ne permet pas de se rendre compte de la quantité de dialogues sur une plage de temps définie.
Voici l'analyse réalisée sur des plages de temps fixes (10 minutes), pour les cinq épisodes de la série :
Vidéo de nuages de mots de l'épisode 1 de la série
Vidéo de nuages de mots de l'épisode 2 de la série
Vidéo de nuages de mots de l'épisode 3 de la série
Vidéo de nuages de mots de l'épisode 4 de la série
Vidéo de nuages de mots de l'épisode 5 de la série
Pour essayer de mieux se rendre compte de comment sont présentés les personnages de la série, on utilise l'algorithme Word2Vec de la librairie Gensim pour trouver les mots qui sont proches des noms des personnages.
Il s'agit d'une analyse très simple de la série Chernobyl grâce à de l'analyse du langage naturel. Les premières étapes d'une analyse du langage naturel ont été vues : tokenisation, lemmatisation, racinisation, sac de mots. Les algorithmes de machine learning ont été peu utilisés (uniquement le LDA pour détecter les thèmes principaux de la série et Word2Vec pour la description des personnages) et pas assez optimisés (affinage des hyperparamètres). Il s'agit donc d'une des principales pistes d'amélioration.
Un autre point important apparaît suite à cette analyse : le volume des données joue un grand rôle dans la qualité des résultats. Les cinq épisodes de la série contiennent quelques milliers de phrases : cela est assez faible pour les algorithmes de machine learning utilisés.
Un travail sur les hyperparamètres des modèles de machine learning utilisés doit permettre d'obtenir de meilleurs résultats. D'autres algorithmes et librairies peuvent permettre de pousser plus loin l'analyse :
Cette librairie peut être utilisée pour analyser plus finement la série
Plus d'informationsCette librairie peut être utilisée pour effectuer une clusterisation sur du texte
Plus d'informationsCette analyse peut facilement s'adapter à d'autres types d'oeuvres que les séries. En modifiant le module de collecte de données (sbttimport.py), il semble assez simple de pouvoir analyser une oeuvre littéraire par exemple.
Support de présentation de la conférence PyconFR 2019
Tchernobyl, 25 ans après... Fukushima. Quel avenir pour le nucléaire ?