Aller au contenu

Moteur de linking (cœur ML)

🔵 Pour une mention, le linker combine un signal lexical (n-gram TF-IDF) et un signal dense (embeddings SapBERT), fusionnés par un ensemble, puis re-rankés par un cross-encoder fine-tuné. Sortie : un top-K de concepts Mondo avec scores.

Le top-1 du modèle (predicted_top1) est snapshotté sur la validation (audit) — il peut diverger du concept finalement retenu par le curateur (rang 2+, LCA, recherche libre).

🔵 KB en service : distemist_mondo_multilingual_de (~26 700 concepts Mondo). Checkpoint : ce_finetune_v4ter_german (+ un reranker morpho dédié, D15). Les modèles partagent la VRAM ; les index FAISS sont HNSW (CPU), chargés en RAM au démarrage (lifespan).

🔵 Trois KB sont chargées en parallèle, même mécanisme d’indexation, rerankers distincts :

KBContenuUsage
diseaseMondo (~26,7 k)linking maladie (ancre)
topographySNOMED body structureaxe topographie (onco)
morphologySNOMED morphologic abnormalityaxe morphologie (onco)

C’est la base du moteur compositionnel → Moteur compositionnel & oncologie (MC).

🔵 Asymétrie linguistique structurelle : la morphologie gréco-latine transfère bien, l’anatomie germanique non (peu de synonymes DE/IT dans Mondo). Remèdes mis en place : injection d’alias DE, et le pont Mondo→requête topographique (D21) qui pré-remplit l’axe topo par synthèse depuis l’ancre. La couverture par langue est rendue visible dans le dashboard ontologies.

🔵 Avant le linker, une mention accompagnée d’un code (ex. ICD-10) peut être résolue par correspondance exacte (code→Mondo). Les codes hors-scope Mondo (chapitres ICD-10 S/T/R/Z…) sont pré-routés et écartés de la file (pas de bruit pour les curateurs).

🔵 Une mention validée alimente un cache : toute mention identique (texte normalisé) rencontrée ensuite — dans n’importe quel projet — est auto-résolue. Gros gain de débit. Piège connu : en test e2e, réutiliser une mention déjà validée la fait sauter la file → les tests de curation doivent utiliser des mentions non validées.