Views
No views yet
1import sys; sys.path.insert(0, "GLiNER2") # fork GLiNER2
2from gliner2 import GLiNER2
3model = GLiNER2.from_pretrained("rntc/gliner2-fr-biomed-v3c")
4ents = model.extract_entities(
5 "Patient de 65 ans, infarctus du myocarde, sous aspirine 75mg.",
6 {"maladie": "pathologie ou diagnostic", "médicament": "substance thérapeutique"})
7print(ents)max_width (défaut 8) plafonne le recall. GLiNER2 ne score que les spans ≤ max_width tokens. Sur des entités/valeurs longues (ex. registres cliniques, ~58% des spans > 8 tokens) c'est un plafond dur. Le monter recouvre les spans longs (mesuré : det-recall 0.50 → 0.76). Il faut le poser sur TOUS les sous-modules (le SpanMarkerV0 est imbriqué dans span_rep.span_rep_layer ; ne mettre que model.max_width provoque un mismatch de shape → 0 prédiction) :1W = 24
2model.max_width = W
3for _, m in model.named_modules():
4 if hasattr(m, "max_width"): m.max_width = Wthreshold≈0.3 ; tronquer le texte vers ~20000 caractères max. Pour l'extraction de valeurs de formulaire, le NER plat (extract_entities) est plus fiable que le mode structuré json_structures (tête structurée encore sous-entraînée).