Utilisation d’API de classification de textes pour assigner des catégories BISAC ou Thema à des livres (première partie)

Jusqu’à maintenant, dans le contexte du projet TAMIS, nous nous sommes intéressés à la génération de mots-clés descriptifs des oeuvres, qu’ils soient tirés de l’image de la page couverture, ou du contenu lui-même.

Les mots-clés sont évidemment importants, mais le choix d’une catégorie au sein d’un système de classification normalisé l’est également. Il existe différents systèmes de classifications. Le système BISAC de BISG (ou des variantes régionales) est utilisé internationalement, en particulier chez les revendeurs de livres numériques (mais pas seulement). La CLIL en France a également un système de classification normalisé. Plus récent, le projet Thema, porté par EDItEUR, propose un système normalisé à vocation internationale (multilingue et disposant « d’extensions » régionales).

Plusieurs librairies en lignes s’appuient sur ces catégories pour placer les livres dans le bon « rayon » virtuel. C’est le cas d’Amazon, qui utilise deux codes BISAC (et certains mots-clés spécifiques) pour déterminer la ou les catégories dans lesquelles le livre sera placé.

Pourquoi générer plus de catégories?

On peut vouloir générer plus de catégories pour différentes raisons.

Plusieurs titres sont décrits avec un seul code de catégorie BISAC. En fait, plus de 35 % des titres du corpus constitué par les éditeurs participant au projet TAMIS sont décrits par un seul code BISAC (et parfois aucun). Il s’agit là d’une opportunité manquée : un livre décrit avec plus de codes BISAC apparaîtra typiquement dans plus de catégories, et aura donc plus d’opportunités d’être présenté à la clientèle qui navigue sur le site de la librairie en ligne.

De plus, le standard Thema présente un potentiel intéressant pour l’industrie, mais souffre d’un déficit d’adoption large. Dans notre corpus, 0,4 % des livres présentent un code Thema (il faut noter qu’il existe des tables de correspondance de BISAC vers Thema, mais elles ont leurs limites, qui sont elles-mêmes amplifiées si la description BISAC à l’origine n’est pas suffisamment riche).

Enfin, certains livres de fond ne disposent tout simplement pas de classification dans les systèmes récents. C’est le cas par exemple, pour des oeuvres indisponibles qui seraient numérisées et rendues disponibles commercialement : sans code BISAC (ou autre), peu de visibilité dans les rayons de librairies en ligne.

Comment l’intelligence artificielle et le traitement du langage naturel peuvent-ils aider (ou pas) à la classification des livres?

En traitement du langage naturel, le problème de classifier ou catégoriser des textes est hyper connu. L’exemple classique, qu’on trouve dans tous les textes d’introduction au traitement du langage naturel, est celui des filtres antipourriel (antispam). Ces filtres sont en fait des classificateurs, qui à partir d’un texte (le contenu d’un courriel) peuvent lui assigner une catégorie dans un système qui n’en contient que deux : pourriel et non-pourriel.

Il y a plusieurs autres applications pratiques semblables : diriger des courriels d’assistance technique vers le bon département, catégoriser des gazouillis selon qu’ils sont d’intérêt pour faire de la veille sur un sujet précis, placer des textes de blogue dans des catégories, etc.

Les algorithmes permettant de classifier du texte sont donc très bien documentés.

Le cas du livre est toutefois significativement plus complexe, pour plusieurs raisons :

  • les textes sont longs, très longs (des centaines ou des milliers de pages, c’est beaucoup plus que 140 caractères!);
  • le nombre de catégories est très grand (la dernière édition de BISAC compte près de 5000 catégories; c’est approximativement la même chose pour la version de base Thema, sans les qualificateurs; et la « petite » classification de la CLIL dépasse le millier de catégories);
  • les catégories ne sont pas mutuellement exclusives, et il est normal (même souhaitable) qu’un livre se retrouve dans plusieurs catégories.

Ces caractéristiques guideront le choix des API que nous pourrons utiliser pour tenter de générer des suggestions de classifications pour nos oeuvres.

Inventaire des API de classification disponibles

Dans le cadre de notre démarche précédente d’identification des API de traitement du langage naturel, nous avions documenté les options pour créer des classificateurs personnalisés des différents outils disponibles sur le marché. Il est possible de créer des classificateurs personnalisés dans plusieurs cas, mais la liste de candidats se rétrécit rapidement si on tient compte des particularités du livre, déjà évoquées. À titre d’exemple :

  • IBM Watson est éliminé parce qu’il ne peut classifier que des documents d’au plus 60 mots;
  • Microsoft Cognitive Services est quant à lui limité à 5000 caractères;
  • Google Cloud AutoML ne pose pas de problème sur la longueur des textes, mais est limité à un maximum de 100 catégories (et la gestion des langues autres que l’anglais n’est pas garantie).

La plupart des outils offrent des systèmes de classification maison (par exemple, chez Google) qui n’ont pas de correspondances dans le domaine du livre. Ils n’ont donc pas d’intérêt dans notre démarche.

Au final, nous avons retenu deux outils qui nous permettraient de faire des classificateurs adaptés à nos besoins : Amazon Comprehend et TextRazor.

Amazon Comprehend

Amazon Comprehend est une API qui permet d’utiliser l’approche classique pour la création d’un classificateur : on lui fournit des centaines d’exemples de textes de chaque catégorie, et la machine « apprend » à identifier les catégories. Par la suite, le classificateur « prédit » des catégories pour de nouveaux textes (qui typiquement ne lui ont évidemment pas servi de donnée d’entraînement).

Comprehend est limité à 1000 catégories, et doit être entraîné avec au moins 50 textes par catégorie (mais il est recommandé de fournir 1000 textes par catégorie pour avoir de bons résultats).

Ces contraintes ne sont pas complètement compatibles avec le projet, mais nous avons choisi de tenter l’expérience quand même. D’une part, bien que BISAC comporte près de 5000 catégories, notre corpus en couvre à peine plus. Et d’autre part, bien que nous n’ayons pas un nombre de livres suffisant pour la contrainte des 50 textes pour chaque catégorie, on peut s’en approcher en considérant chaque chapitre d’un même livre comme un texte différent.

Ces choix amènent quand même des réserves sur les résultats que nous obtiendrons : il s’agira d’un aperçu du potentiel, mais pas d’un résultat optimal (le résultat optimal pourrait être atteint en ayant un nombre élevé de titres dans toutes les catégories BISAC).

TextRazor

TextRazor permet de créer des classificateurs personnalisés sans faire d’entraînement sur des textes exemples, mais en s’appuyant simplement sur quelques mots-clés associés à chaque catégorie. C’est une approche originale qui permet d’envisager deux résultats impossibles avec l’approche classique d’entraînement sur des exemples de textes :

  • identifier des catégories BISAC pour lesquelles nous ne disposons d’aucun échantillon
  • créer un classificateur Thema alors que nous ne disposons de pratiquement aucune donnée relative à ce standard.

Prochaine étape

Dans le prochain texte de cette série, nous présenterons les résultats obtenus suite au traitement d’une centaine de textes tirés de notre corpus pour générer des suggestions de codes de catégories BISAC et Thema. Nous commenterons également les résultats.

Mise à jour: le deuxième texte est maintenant disponible.