Aller au contenu principal

Bref, j’ai installé Annif

09/12/2019

Depuis le temps que je connaissais son existence, que j’en entendais parler… Je lui tournais autour de loin, sans trop m’approcher. Peut-être que j’avais un peu peur, en fait. Si j’avais su !

Annif est un logiciel développé par la bibliothèque nationale de Finlande, visant à faire de l’indexation automatique. Il associe un ou plusieurs mots-clés à une chaîne de caractères en entrée. On peut tester sur annif.org ou télécharger le logiciel sur Github.

Ce que j’en savais avant de le télécharger : il est conçu pour qu’on puisse y mettre son propre vocabulaire (référentiel) avant d’y mettre ses propres données. Je ne voyais pas trop comment c’était possible : soit il est déjà « instruit » donc on lui a défini une indexation attendue comme cible, et ça permet de faire une démo sur annif.org, soit il ne l’est pas encore, et je ne comprends pas ce qu’il peut apporter.

Bref, je n’avais rien compris. Et puis je l’ai installé.

C’était il y a 2 jours, donc je n’ai certainement pas encore tout compris, mais je peux sans doute vous fournir quelques informations complémentaires.

Etape 0 : l’installation

En fait, ça s’est bien passé, assez vite. Il se trouve que j’avais déjà Python sur mon PC. J’ai appris pour l’occasion à mettre une machine virtuelle en suivant simplement les étapes d’installation fournies dans la documentation :

  • création d’un répertoire qui va être consacré au projet (je l’ai baptisé annif, je suis toujours aussi nul pour le nommage)
  • dans ce répertoire, je suis passé en ligne de commande pour exécuter les différentes instructions de la doc, ce qui a
    • généré un dossier annif-venv (pour annif / virtual environment)
    • rapatrié les différentes librairies utiles
  • Pour lancer annif sous Windows, il faut ensuite
    • ouvrir le terminal puis lancer l’environnement virtuel en utilisant le fichier annif-venv\Scripts\activate.bat
    • l’instruction annif permet de lister les différentes commandes possibles

Etape 1 : utilisation définition

Je garde le récit de mes premiers tests pour plus tard. Il me semble plus utile de vous expliquer ce qu’est Annif et pourquoi c’est un outil intéressant.

Démarche générale

Si vous êtes une bibliothèque et que vous vous intéressez à l’intelligence artificielle pour faire de l’indexation automatique, vous commencerez par vous intéressez aux méthodes de machine learning, qui vous proposent :

  • de vous doter d’une IA qui sache apprendre (comme TensorFlow ou Scikit-Learn)
  • d’une extraction de votre catalogue, que vous allez diviser en 2 parts :
    • les notices déjà indexées, à séparer là encore en 2 :
      • [lot1] 80% de ces notices pour expliquer à l’IA quel genre d’indexation vous attendez à partir des métadonnées en entrée
      • [lot2] 20% mis de côté pour tester l’IA après l’avoir instruite
    • [lot3] les notices à indexer (à mettre de côté pour plus tard)

Sur les 2 premiers lots, vos données vont donc ressembler à un tableau à 2 colonnes :

  • colonne 1 : les métadonnées d’une ressource (titre, auteur, date, etc.)
  • colonne 2 : l’indexation qui lui a été associée manuellement

Le message qu’on donne à l’IA est clair : si tu vois le même genre de métadonnées plus tard, tu devras lui appliquer le même genre d’indexation.

Et à côté de ça vous allez avoir un référentiel : la liste des valeurs cibles autorisées (mettons : une extraction de Rameau).

Ensuite vous allez :

  1. injecter le lot1 comme données d’entraînement
  2. injecter le lot2 comme données d’évaluation : l’IA prend les métadonnées, calcule une indexation d’après ce qu’elle a compris du lot1, et regarde si l’indexation réellement mise lui correspond
  3. [si le chargement du lot2 est satisfaisant] injecter le lot3 pour récupérer une indexation matière pour vos données non indexées

Du générique au bibliothéconomique

Les IA comme TensorFlow ou Scikit-learn servent à faire plein de choses. Même en restant dans le monde des bibliothèques, vous avez pu voir avec les 4 billets de Géraldine Geoffroy sur la recommandation qu’on peut en faire aussi un algorithme de recommandation. Mais comme vous le savez aussi, ces outils peuvent faire de la reconnaissance d’images, de l’aide à la décision en matière juridique et médicale, etc.

Donc un bibliothécaire qui voudrait utiliser TensorFlow pour faire de l’indexation automatique va devoir concevoir autour une surcouche pour spécifier le besoin consistant à indexer des métadonnées ou du texte intégral en fonction d’un référentiel métier.

C’est cette spécificité qu’Annif fournit. Le logiciel a été conçu comme une surcouche à Tensorflow (et autres fonctions incluses) précisément adaptée à la fonction d’indexation. Cela ne garantit pas en soi l’efficacité du processus, mais ça facilite grandement le travail pour pouvoir le tester.

Ainsi, il existe plusieurs algorithmes de calculs de similarité entre corpus textuels. Deux parmi les plus connus sont :

La bibliothèque nationale de Finlande a pu en choisir un des deux (ou un autre encore) suite à ses expérimentations, l’ayant jugé plus pertinent. Mais elle a intégré ces deux là (et d’autres) dans Annif comme des paramètres : quand vous concevez un projet d’indexation sur un corpus précis et avec un référentiel précis (Rameau, Dewey ou un autre), vous allez pouvoir associer ce projet à un de ces algorithmes sans avoir à l’implémenter vous-mêmes. Mais l’implémentation d’un autre mécanisme est même prévu, lui aussi.

De même, sont intégrées comme paramètres des bibliothèques de nettoyage de chaînes de caractères : pour vos métadonnées vous pouvez vous contenter de nettoyer seulement la casse et la ponctuation, ou vous pouvez demander une stemmatisation ou une lemmatisation des mots rencontrés.

Le plus difficile : les jeux de données en amont et leur analyse en aval

Cela signifie qu’en quelques minutes on peut disposer d’une IA clé en main pour y injecter des jeux de données.

Tout n’est pas résolu, loin s’en faut ! mais au moins le fait même de disposer d’une IA sur sa machine ne pose pas de problème d’appropriation, puisqu’on ne manipule de fichiers que dans des formats connus :

  • le référentiel : un tableau à 2 colonnes (libellé + URI) avec extension .tsv
  • le corpus de données indexées (lot1 et lot2) : un tableau à 2 colonnes (métadonnées + indexation) avec extension .tsv
  • le corpus de données à indexer (lot3) : un tableau à une colonne (métadonnées) avec extension .tsv

Et cela permet de se poser très rapidement les vraies questions, scientifiques, sur ce que doit être l’indexation.

Ce qui fera l’objet d’un autre billet… (ce sont les questions qui feront l’objet du billet. Pour les réponses, eh bien…)1.

——————————

1. Et ensuite je détaillerai un peu plus le mode d’emploi (3e billet, donc).