[Journal de thèse #1] Comment détecter les personnages dans un texte

J’ai été vraiment ravie de l’accueil que tu as réservé à mon précédent billet qui présentait mon sujet de thèse, et j’ai donc très envie de t’en parler un peu plus régulièrement et en entrant un poil plus dans les détails. Voici donc une tentative de rendez-vous récurrent (je ne me fixe pas de rythme, probablement que mes avancées ne seront pas toujours régulières), en espérant que ça continue de t’intéresser !

En ce moment, je travaille sur la toute première étape de ma construction de réseaux de personnages (je t’invite à retourner sur mon article de présentation si tu as oublié ce que c’était), à savoir la récupération automatique des éléments de mon réseau. Pour te donner une idée de la vue d’ensemble, le réseau se compose de personnages et d’interactions entre ces personnages. Les interactions peuvent être de plusieurs types (et on en reparlera, au final ce sera à moi de faire un choix de définition en fonction de ce que j’arrive à récupérer), mais il me faut d’abord me concentrer sur les personnages et comment réussir à les extraire d’un texte.

On peut globalement réunir trois manières de nommer un personnage :

  • Par son nom (Elizabeth Bennet, Ms. Bennet, Miss Eliza, Eliza, etc.)
  • Par un pronom (il, elle, lui, nous, etc.)
  • Par une périphrase (la jeune fille, la fille de M. Bennet, le détective, etc.)

Si on décide de faire ce travail à la main, on pourrait décider de se concentrer sur toutes les mentions d’un personnage, puisque le contexte devrait nous permettre de comprendre de qui on parle à tout moment. Mais ça prend un temps fou, et puisque le réseau est une agrégation des interactions du roman (ou du film, jeu etc.), on n’a souvent pas besoin d’aller trop dans le détail pour déjà se faire une idée générale des groupes de personnages.

Dans mon cas, j’aimerais automatiser cette récupération d’informations, pour pouvoir générer des réseaux pour 10, 100 ou 1000 romans (ce qui prendrait des années à la main, tu t’en doutes). Et lorsqu’on doit faire comprendre à un ordinateur quel personnage est cité à quel moment, de nouveaux problèmes se posent et ces trois types d’appellation possibles amènent des défis supplémentaires. Dans un premier temps, je vais donc me concentrer sur le fait de récupérer uniquement les mentions des noms des personnages, avec l’espoir de pouvoir étoffer ça avec les pronoms par la suite (qui sont faciles à récupérer, mais très difficiles à attribuer à la bonne personne).

La magie des NER

Il existe des algorithmes qui détectent automatiquement ce qu’on appelle les « entités nommées » d’un texte. Les entités nommées, en très gros, c’est des noms propres qu’on peut ranger dans différentes catégories (personnes, lieux, organisations, etc.). Le domaine de l’informatique qui s’attaque à retrouver ces entités nommées s’appelle le NER (named entities recognition). Je travaille en Python (c’est un langage de programmation, pas le tissu de mon pantalon n’est-ce pas), et il existe plusieurs solutions de NER que j’ai entrepris de tester. Parce que dans un monde parfait, ça pourrait détecter toutes les occurrences de mes personnages (du moins quand ils sont appelés par leur nom) et on pourrait passer à la prochaine étape.

Seulement voilà. Ces algorithmes sont entraînés sur des données qui ne sont pas spécialement des textes de fiction (on est surtout sur des journaux, des retranscriptions téléphoniques, des articles de Wikipedia, etc.) et qui n’ont pas tout à fait les mêmes conventions que les documents qui m’intéressent. Dans la fiction, on trouve des noms fantaisistes, des lieux parfois inventés, des surnoms qui sont tirés de noms communs, et ce genre de cas de figure n’est pas fréquent dans les données qui ont servi de base à ces modèles déjà existants. Il me faut donc explorer, faire des tests, et envisager d’améliorer moi-même par-ci par-là en fonction de mes besoins.

Après un petit tour d’horizon, je me suis concentrée sur deux modèles : SpaCy et Flair. Je n’entre pas dans les détails techniques, ne t’inquiète pas (fun fact quand même : Flair a été développé par le centre de recherche de Zalando. Je ne savais même pas qu’ils faisaient ce genre de choses). SpaCy est bien connu dans le milieu, mais j’ai vite découvert qu’il avait de grosses limitations dans la fiction, notamment parce qu’il n’apprend pas du tout le contexte de la phrase. D’ailleurs, si tu as envie de jouer avec, il y a une version en ligne disponible ici ! Pour te montrer un exemple, voilà comment SpaCy s’en sort avec la page wikipedia de Marina Rollman :

ner_test.jpg

On a les lieux en orange, les personnes en vert, les organisations en bleu et le reste en mauve. Le résultat est plutôt satisfaisant donc, par contre si je lui file un extrait de l’Assassin Royal, c’est une autre limonade.

ner_test2.jpg

Quasiment tous les personnages sont appelés avec des noms communs (Patience, Fouinot, Renarde), et ça perturbe beaucoup le modèle. Soit il leur donne la mauvaise catégorie, soit il ne les trouve même pas. Bon, sache quand même que les résultats sont meilleurs en anglais (beaucoup plus de données d’entraînement), mais ces problèmes sont récurrents malgré tout.

D’après mes premières analyses, Flair s’en sort mieux, et c’est probablement parce qu’il prend en compte la structure de la phrase et son contexte (à priori, le sujet d’un verbe d’action sera plus facilement reconnu comme un personnage, même si son nom est surprenant). Je n’ai pas le même interface tout joli que pour SpaCy alors c’est plus embêtant pour te montrer les choses, mais sur le même extrait de l’Assassin Royal, il trouve « Patience », « Fouinot » et « Renarde » (et se trompe juste en rangeant Patience dans la catégorie « autre »), ce qui est déjà beaucoup plus prometteur.

Bref, au moment où je t’écris tout ça, je suis en train d’élaborer un moyen de mesurer l’efficacité de ces modèles en fonction de mes besoins et de mes attentes. Ca me permettra aussi de constater la progression quand j’essaierai de mettre les mains dans le modèle et de changer certains paramètres. Ce n’est pas très glamour et je ne veux pas t’assommer avec les détails alors je m’arrête là pour cette fois, j’espère pouvoir t’en montrer plus la prochaine fois !

24 commentaires sur “[Journal de thèse #1] Comment détecter les personnages dans un texte

Ajouter un commentaire

  1. Toujours aussi cool de lire tes avancées et de voir quels outils tu choisis, comment tu t’adaptes tout ca! La recherche demande beaucoup de capacités d’adaptation aha
    Il me semble que tu veux faire ca avec des jeux vidéos aussi c’est ca? Il y a des « logiciels » capables de faire ca avec des JV? 0
    Bon je file m’amuser avec la version d’essai et mon corpus de mémoire, mais ca devrait etre plus facile pour lui x)

    Bon courage pour la suite 🙂

    J’aime

    1. Oh bah merci ! J’avais peur que ce soit trop technique, très contente si ce n’est pas le cas 🙂
      En fait la difficulté pour les JV c’est surtout de trouver un genre de script ! Une fois qu’on a l’histoire au format texte, c’est assez similaire à un roman, mais c’est difficile de mettre la main dessus… Mais j’en reparlerai huhu !

      Aimé par 1 personne

  2. Ce que je veux que tu fasses c’est de créer une appli et dans l’appli que je puisse soumettre un roman en format pdf ou autre, un jeu vidéo, un film peu importe son format, au final avec tes algorithmes et programmes, l’appli affiche le schéma de tous les personnages avec leur interaction.

    Aimé par 1 personne

  3. C’est super intéressant, merci ! (faut que j’arrête de vouloir poser des questions qui amènent forcément des réponses longues et peut-être « assommantes », comme tu le dis…)

    J’aime

      1. Mais comment c’est possible de faire reconnaître des personnages dans un texte (et surtout, lesquels précisément quand ils sont énoncés avec des pronoms) à des algorithmes ? C’est pas un peu subtil ? :/

        J’aime

        1. Oui, alors pour la reconnaissance des pronoms il n’y a pas de magie. Ça va se jouer sur des petites règles de décision à définir, basées sur le sexe, la distance avec les entités les plus proches (vu qu’en principe on utilise le pronom pour ne pas répéter le nom), ce genre de choses. Ça n’a pas un taux de réussite de 100%, c’est clair !
          Comme je veux me concentrer sur les dialogues dans un premier temps, la résolution des pronoms servira surtout à déterminer qui parle et à qui. Donc ça devrait limiter un peu les difficultés parce qu’il y aura sûrement une alternance des interlocuteurs, ce genre de paramètres qu’on pourra rajouter. Mais je n’y suis pas encore !

          Aimé par 1 personne

  4. C’est vraiment sympa de lire ton avancée et de voir tes premiers tests pour réussir à récupérer les noms/pronoms et attributs. On ne se rend pas compte de la difficulté pour un modèle informatique de faire ça : comme quoi, l’intelligence artificielle n’est pas encore tout à fait au point, mais humainement, ça prendrait des années. Et vivement ton article sur comment ça fonctionne pour les scripts de jeux vidéos, quand tu mets la main dessus !

    Ça me fait penser à un article de l’auteur Pierre Raufast (informaticien de métier) qui a parlé récemment d’un logiciel qu’il a mis au point pour examiner le style des auteurs : https://raufast.wordpress.com/2020/04/24/analyse-de-romans/ Peut-être que la lecture t’intéressera ou pourra t’inspirer pour quelque chose ! Je crois qu’il a aussi codé en Python.

    J’aime

    1. Alors ça c’est sûr, on est encore loin des IA présentées dans les films (et franchement, ça me rassure haha). Mais c’est déjà un gain de temps non négligeable 🙂
      Yes, je me réjouis de parler JV, j’aurai de très chouettes sources à vous partager héhé !
      Je n’avais pas lu cet article (qui est très sympa d’ailleurs), mais j’ai déjà vu passer plusieurs études sur le style d’écriture effectivement, par exemple pour essayer d’identifier le nombre d’auteurs qui se sont succédés sur l’Odyssée… 🙂

      Aimé par 1 personne

      1. C’est fascinant en fait ! Je n’imaginais pas à quel point des algorithmes, modèles…pouvaient permettre d’analyser des choses aussi différentes dans un roman. Je comprends comment ça peut te passionner !

        Aimé par 1 personne

  5. du coup avec les algorithmes, tu peux travailler ta thèse depuis chez toi sans faire des recherches à la bibliothèque ? je vois beaucoup de thésards bloqués dans leur recherche à cause de la fermeture des bibliothèques et de la bnf depuis 3 mois…

    Aimé par 1 personne

Donne-moi ton avis !

Créez un site ou un blog sur WordPress.com

Retour en haut ↑