fix: qualité codage — anti-hallucination LLM + négation regex + veto calibration
- Prompt DAS_EXTRACTION : ajout consignes anti-hallucination (zero invention, pas d'inférence de comorbidités, exiger citation exacte du texte) - Prompt CODING_CIM10 : ajout consignes conditionnel et négation - diagnostic_extraction.py : détection de négation avant les patterns regex DAS (bloque "pas d'embolie", "absence de sepsis", "sans signe d'IRC", etc.) - veto_engine.py : VETO-03 conditionnel cherche maintenant PRÈS du concept (40 chars), "si" isolé ne déclenche plus de faux positif, ajout cues (possible, risque de, aspect de, à confirmer, à rechercher) - veto_engine.py : négation enrichie (ne retrouve pas, sans signe/argument, écarté, infirmé, pas mis en évidence) Batch analysis: VETO-02 63% from LLM hallucinations, VETO-03 63% false positives Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -256,9 +256,29 @@ def _find_diagnostics_associes(
|
||||
|
||||
text_norm = normalize_text(text_lower)
|
||||
|
||||
# Patterns de négation pour filtrer les faux positifs regex
|
||||
_NEG_PATTERNS = (
|
||||
r"pas\s+d[e']?\s*",
|
||||
r"(?:absence|aucun[e]?)\s+d[e']?\s*",
|
||||
r"(?:sans|ni)\s+",
|
||||
r"(?:elimine[er]?|exclut?|ecarte[er]?)\s+",
|
||||
r"ne\s+retrouv\w+\s+pas\s+d[e']?\s*",
|
||||
r"ne\s+montr\w+\s+pas\s+d[e']?\s*",
|
||||
r"pas\s+(?:mis\s+en\s+evidence|objective?|retrouve)",
|
||||
r"infirm\w+\s+",
|
||||
r"sans\s+(?:signe|argument|evidence)\s+d[e']?\s*",
|
||||
)
|
||||
_neg_rx = re.compile("|".join(_NEG_PATTERNS), re.IGNORECASE)
|
||||
|
||||
# Patterns DAS
|
||||
for pat, label, code in _DAS_PATTERNS:
|
||||
if re.search(pat, text_norm) and code not in existing_codes:
|
||||
m = re.search(pat, text_norm)
|
||||
if m and code not in existing_codes:
|
||||
# Vérifier que le match n'est pas précédé d'une négation (40 chars avant)
|
||||
start = max(0, m.start() - 40)
|
||||
context_before = text_norm[start:m.start()]
|
||||
if _neg_rx.search(context_before):
|
||||
continue
|
||||
das.append(Diagnostic(texte=label, cim10_suggestion=code, source="regex"))
|
||||
existing_codes.add(code)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user