Juisci est une plateforme qui collecte les publications médicales pour en constituer des synthèses à destination des professionnels de santé.
La solution repose sur un pipeline de données qui analyse le contenu d'un grand nombre de sources scientifiques, et qui en extrait les informations pour les synthétiser en un contenu digeste.
Les professionnels de santé peuvent ainsi accéder directement à la spécialité concernée, aux conclusions, ou encore à un résumé de la méthodologie employée.
Pour accéder facilement au contenu, l'application comporte un système de suggestion qui envoie un shot de science en fonction du profil de l'utilisateur et de ses centres d'intérêts. Les publications peuvent également être partagées et recommandées auprès de collègues.
Et comme toute application dont la valeur repose sur le contenu, elle doit également proposer une excellente expérience de recherche.
L'objectif de la prestation était d'évaluer les possibilités d'ElasticSearch pour améliorer la pertinence des résultats d'une recherche formulée à partir d'un texte libre, "à la google".
L'intention de recherche, le matching et le score
L'étude débute par l'appropriation du contexte métier de Juisci et de la nature des articles (structure, contenu, méta-données).
Il s'agit ensuite de travailler à comprendre l'intention de recherche d'un utilisateur par différents cas d'usages : va-t-il indiquer le nom d'un auteur ? D'une revue scientifique ? D'une spécialité médicale ou d'une pathologie particulière ? Accepte-t-on les orthographes approximatives ?
Lors de cette première phase, on travaille donc la sélection des articles qui correspondent à l"intention.
Mais tout l'enjeu consiste ensuite à classer ces résultats par ordre de pertinence. Quels résultats doivent apparaître en premier ?
On établit donc des règles de priorité, qui portent sur :
- la localisation du contenu : certaines partie d'un article pèsent plus lourd que d'autres. Par exemple, le texte contenu dans la conclusion est probablement plus significatif que celui indiqué dans les limitations du protocole d'étude,
- les méta-données : les articles qui sont plus récents, ou plus cités, ou qui émanent d'une source à plus fort impact scientifique doivent être en tête de liste.
Cependant, un paramétrage de ces règles de priorité "à l'aveugle" ne permet pas de résoudre les arbitrages ou les contradictions.
Par exemple : doit-on faire apparaître en tête de liste un article ancien à fort impact, ou bien un article récent avec davantage d'occurrences du mot-clé dans le contenu ?
Un prototype pour affiner le calcul de score
Pour décider de l'odre dans lequel on présente les articles recherchés, on va calculer un score dans ElasticSearch. L'algorithme de scoring est défini à partir des règles de priorité et de paramètres numériques.
Pour déterminer les bons paramètres, mieux vaut s'appuyer sur un prototype fonctionnel.
En voici les principales étapes de sa constitution :
- structurer le mapping (= le schéma des documents ES) au service des requêtes. Un mapping ES est souvent très différent du schéma de la base de données opérationnelle. Le maître mot : dénormaliser!
- instancier un container Docker ELK et indexer les données à partir du dump de la base de données. Nous avons fait le choix d'indexer la totalité des données disponibles, ce qui est possible en un temps très court grâce aux performances natives d'ES.
- tester jusqu'à obtenir une requête satisfaisante. D'abord on analyse les scores établis par ES avec une requête multi-match avec pondération du poids des champs. Puis on affine le classement avec les fonctions de calcul du score.
- Coder un front-end afin pour que l'équipe produit puisse tester la pertinence des résultats, et que l'équipe technique dispose d'un point de départ facilitant l'intégration.
Cette démarche s'est avérée efficace, grâce à l'implication des équipes produits et techniques de Juisci.
"Hervé nous a aidé à mettre en place une base Elastic Search pour notre fonctionnalité de recherche sur l'application mobile, de manière extrêmement professionnelle, toujours force de proposition et en apportant une grande écoute au projet.
Nous réitérerons notre collaboration avec Hervé pour nos besoins futurs."
– Robin Roumengas, CEO de Juisci.