Aller au contenu principal

IA et opac : mettre en place un moteur de recommandation dans un opac – 2/4 : Mise en oeuvre technique

13/11/2019

Comment mettre en œuvre un système de recommandations avec des données de collections ?

Une boîte à outils avant de se lancer…

Si l’on s’essaye au développement d’un prototype de système de recommandation intégré au catalogue de la BU articulé sur les deux modèles précédents, voici les éléments nécessaires :

  • une API de recherche donnant accès et restituant les données indexées dans l’Opac :
    elle est fournie par le prestataire du SIGB/Opac ;
  • une interface web adossée à l’API, spécifiquement et sommairement développée pour visualiser le rendu du moteur de recommandation : Il va falloir la développer en interne, même sans trop d’ambition graphique pour commencer ;
  • Pour les recommandations basées sur le contenu des ressources: un jeu de données bibliographiques servant de base aux calculs de similarité de type content-based (pour produire contextuellement au niveau de chaque notice affichée des recommandations de type “Vous pourriez aussi être intéressé.e par …”)
  • Pour les recommandations basées sur les usages: un autre set de données relatives aux évènements de circulation sur ce même corpus de métadonnées, afin cette fois-ci de pouvoir générer des recommandations en mode collaborative filtering de type “Les utilisateurs qui ont emprunté ce document ont aussi emprunté …”

Le langage de programmation Python est aujourd’hui le plus répandu dans l’univers des analyses statistiques et méthodes de Data Science. Plus précisément on pourra utiliser :

  • Pour le retraitement / nettoyage / visualisation des données : les librairies1 Numpy, Pandas, Matplotlib, re pour les expressions rationnelles….)
  • Pour l’apprentissage automatique : la librairie Scikit-learn
  • Pour sérialiser/désérialiser le modèle de recommandation (c’est-à dire le convertir de sa forme d’objet hiérarchisé – Json par exemple – en octets, et inversement) la librairie pickle, et la librairie Flask pour l’exposer sous forme d’API interrogeable depuis l’interface ;
  • Pour écrire et documenter le code : l’application web Jupyter afin de détailler l’ensemble des opérations effectuées sur chacun des datasets.

Une modélisation en graphe

Pour le collaborative filtering (recommandations à partir des usages de prêt/consultation), il est préférable de s’appuyer sur une mise en réseau des données de circulation des exemplaires via une modélisation en graphe. L’approche orientée graphe représente en effet une alternative intéressante aux méthodes classiques d’analyse statistique car :

  • elle permet de produire dynamiquement des recommandations à partir de requêtes simples sur le graphe ;
  • on retrouve avec les algorithmes de graphes les possibilités de traitements et workflows de Machine Learning ;
  • les algorithmes et métriques de graphe sont des approches calculatoires centrées sur les relations entre entités (qu’elles soient explicites dans les données ou inférées dans des projections de graphes virtuels) très puissantes pour révéler des patterns dans les données et extraire de l’information, donc une nouvelle compréhension, à partir de données connectées. A titre d’exemple, on peut calculer pour chaque noeud d’un graphe son degré de connectivité (le nombre de liens entrants et/ou sortant), sa position dans le graphe calculée à partir de sa distance avec tous les autres noeuds, son intermédiarité ou sa propension à jouer le rôle d’intermédiaire entre deux clusters de noeuds etc.. On peut également déterminer des regroupements de communautés de noeuds très fortement connectés, évaluer les plus courts chemins d’un noeud à un autre…

Précision méthodologique utile : on se place également dans un contexte dit de “cold start” (démarrage à froid), c’est-à dire sans connaissance préalable de données propres à chaque utilisateur (leurs historiques de prêts par exemple) permettant de dresser des profils prédictifs et d’individualiser les recommandations, le corollaire étant que les documents recommandés seront les mêmes pour tous. Autrement dit, et concrètement, l’affichage des documents recommandés ne nécessite pas d’authentification préalable de l’utilisateur et les données qui permettraient de profiler les lecteurs ne sont pas utilisées.

La représentation vectorielle

Cette méthode mathématique, très largement répandue en analyse de données textuelles et en Text Mining, est utilisée pour produire les recommandations de type content-based filtering. En effet les similarités entre documents sont issues d’un calcul algébrique de proximité. Or qui dit calcul dit données numériques, alors que nous collectons un ensemble de documents dont les descripteurs sont de type textuel. Pour faciliter leur manipulation, on établit donc une représentation vectorielle de chaque document en lui associant un vecteur mathématique constitué d’indices numériques représentant le poids de chaque mot2 de l’échantillon par rapport à un dictionnaire de référence (en général l’ensemble de tous les mots du set de données).

Chaque document ainsi représenté par un vecteur à N dimensions peut alors être projeté dans un espace vectoriel de dimension N, et des métriques géométriques visant à calculer les ressemblances entre deux vecteurs peuvent être calculées par des calculs de distance.

Dans notre exemple la similarité de type distance cosinus entre deux documents est obtenue en calculant le cosinus de l’angle entre les deux vecteurs qui les représentent, mais il existe d’autres mesures de proximité : coefficient de corrélation Pearson (cosinus de l’angle entre deux vecteurs centrés-réduits), distance euclidienne (distance entre deux vecteurs ramenée à un seul point), coefficient de Jaccard (si chaque vecteur est considéré comme un ensemble : taille de l’intersection de deux ensembles rapportée à la taille de l’union des deux ensembles), etc…

—————————–

↑ 1. En programmation, une librairie (library, qu’on devrait traduire par « bibliothèque ») est un ensemble de fonctions fournies clé en main par d’autres développeur, et dont on peut se servir sans avoir à se demander comment elles fonctionnent.

Par exemple, on peut trouver une librairie Python qui convertira un ISBN 10 en ISBN 13, ou l’inverse, sans avoir besoin de lire la documentation pour savoir comment il recalcule la clé de contrôle.

↑ 2. Plus précisément racine de mot (après stemmatisation)

%d blogueurs aiment cette page :