A settembre 2010 esce su JAMIA il paper architetturale di cTAKES (clinical Text Analysis and Knowledge Extraction System), un sistema Open Source che estrae informazione dal testo libero delle cartelle cliniche, sviluppato alla Mayo Clinic sopra il framework Apache UIMA e il toolkit OpenNLP (Savova et al., JAMIA 17(5):507-513). Il paper misura ogni componente separatamente su un corpus annotato di note Mayo, ed è la prima documentazione peer-reviewed di una pipeline NLP clinica generale distribuita come software riusabile.
Contesto
Lo strumento di riferimento per estrarre concetti dal testo biomedico è MetaMap della National Library of Medicine, tarato sulla letteratura indicizzata in MEDLINE. Il testo clinico â note di reparto, lettere di dimissione, referti â ha tuttâaltre caratteristiche: frasi telegrafiche, abbreviazioni di dosaggio, valori numerici (120/80 mmHg, 500 mg BID), negazioni a ogni riga. Un finding scritto come âno evidence of pneumoniaâ contiene la stringa pneumonia, ma afferma lâassenza della condizione. Un sistema che mappa le stringhe sui concetti senza modellare la negazione e lo stato finisce per ribaltare il senso del referto.
cTAKES nasce dentro la Mayo intorno al 2006 per macinare grandi volumi di note del sistema informativo aziendale. Il paper del 2010 ne fissa lâarchitettura e ne misura i componenti.
Architettura
cTAKES è una pipeline di annotator Apache UIMA. UIMA (Unstructured Information Management Architecture) è un framework Java nato in IBM Research e poi donato allâApache Software Foundation, dove entra in incubazione nel 2006; la specifica UIMA 1.0 diventa standard OASIS a marzo 2009 (docs.oasis-open.org/uima/v1.0). Il modello dati al centro è il CAS (Common Analysis Structure): una struttura condivisa che tiene insieme il documento e tutte le annotazioni aggiunte via via. Ogni annotator legge le annotazioni giĂ presenti nel CAS e ne deposita di nuove; un Type System dichiarato in XML definisce le classi (Token, Sentence, NamedEntity e simili). Concatenando gli annotator si ottiene un Aggregate Analysis Engine.
Costruire su UIMA porta con sĂŠ una conseguenza concreta: i componenti sono moduli indipendenti, sostituibili e riordinabili, e ciascuno si valuta da solo. Il paper sfrutta proprio questo e riporta unâaccuratezza separata per ogni stadio.
La sequenza degli annotator descritta nel paper è questa:
- sentence boundary detector e tokenizer, derivati da OpenNLP e adattati al clinico (abbreviazioni come
Dr.oq.d.non chiudono la frase); - normalizer, che riporta le forme flesse a una forma canonica;
- POS tagger (part-of-speech) e shallow parser (chunker), che assegna le unitĂ sintattiche di primo livello â frasi nominali, verbali, preposizionali â senza tentare lâanalisi sintattica completa;
- dictionary lookup, che mappa i sintagmi sui concetti UMLS;
- named entity recognizer, che struttura le menzioni in tipi clinici;
- negation e status annotator, che assegnano gli attributi di asserzione.
Il punto critico
Il dictionary lookup non interroga tutto lâUMLS Metathesaurus. cTAKES usa un sottoinsieme della versione 2008AB di UMLS, ristretto ai concetti che vengono da SNOMED CT e RxNorm (i primi per disturbi, procedure e anatomia, il secondo per i farmaci). Ă il filtro per terminologia e per tipo semantico a calare il sistema sul dominio clinico: invece di pescare ogni concetto biomedico, il lookup guarda solo le famiglie di entitĂ che servono in una nota di cartella.
Sulle menzioni pescate in questo modo lavorano i due annotator di asserzione. La negazione usa il metodo NegEx di Chapman et al. (J Biomed Inform 34(5):301-310, 2001): un algoritmo a pattern che cerca i termini di negazione in una finestra di sette token a sinistra e a destra della menzione, con una lista di pseudo-negazioni (per esempio ânot ruled outâ) da escludere perchĂŠ ingannano. Lo status assegna a ogni menzione un valore tra current, history of, family history of, possible. Sono questi due stadi, dopo il riconoscimento, a separare âil paziente ha la diagnosi Xâ da âla diagnosi X è assente, pregressa, in famiglia o solo ipotizzataâ.
Cosa ne segue
Le cifre sul corpus Mayo si leggono una per componente, ed è la parte di documentazione piĂš utile a chi deve decidere se adottare il sistema. Le annotazioni linguistiche di riferimento vengono da 273 note (circa 100.650 token, 7.299 frasi); lâannotazione di named entity copre 160 note (47.975 token, 1.466 menzioni di disturbo).
Sui componenti di base il paper riporta: sentence boundary detector e tokenizer con accuratezza 0,949, POS tagger 0,936, shallow parser con F-score 0,924. Sul riconoscimento di entitĂ : F-score 0,715 in exact match (confini esatti) e 0,824 in overlapping (span sovrapposti). La negazione arriva a unâaccuratezza di 0,943, lo status si ferma a 0,859. Il salto fra exact e overlapping sulle entitĂ â una decina di punti â dice quanto spesso il sistema trova il concetto giusto ma sbaglia i confini dello span: una distinzione che pesa a valle, perchĂŠ un concetto corretto con span impreciso si recupera, un concetto mancato no.
Ogni stadio è un annotator UIMA misurabile e sostituibile: questo fa della pipeline una base da cui partire per adattarla, non un risultato chiuso. Chi lavora su testo diverso da quello Mayo eredita lâarchitettura e il Type System, poi riaddestra o sostituisce gli stadi che dipendono dai dati.
Limiti
I componenti sono tarati sullâinglese e su note in stile Mayo: telegrafiche, statunitensi. Le cifre qui sopra valgono su quel corpus; usarlo su testo diverso â pediatrico, specialistico, o in unâaltra lingua â vuol dire rimisurare ogni stadio, senza dare per scontato che i numeri reggano altrove. Per lâitaliano gli stadi che dipendono dalla lingua (tokenizer, POS tagger, la stessa lista NegEx) andrebbero rifatti, e un dictionary lookup utile presuppone una copertura terminologica clinica italiana che oggi è frammentaria. cTAKES poi non de-identifica il testo: togliere le informazioni personali è un problema a parte, da risolvere prima di condividere i dati. Lo status si ferma a quattro valori discreti e non modella il ragionamento temporale fine (quando una condizione è iniziata, se si è risolta, se è pianificata), che resta fuori dalla pipeline descritta.
Resta da capire se lâoutput di un lookup ristretto a SNOMED CT e RxNorm basti per i casi dâuso a valle (identificazione di coorti, codifica assistita) o se il sottoinsieme 2008AB vada allargato ad altre fonti UMLS man mano che il dominio si espande.
- https://academic.oup.com/jamia/article-abstract/17/5/507/830823
- https://pmc.ncbi.nlm.nih.gov/articles/PMC2995668/
- https://pubmed.ncbi.nlm.nih.gov/20819853/
- https://docs.oasis-open.org/uima/v1.0/os/uima-spec-os.pdf
- https://www.sciencedirect.com/science/article/pii/S1532046401910299
- https://www.noze.it/insights/ctakes-apache-uima-clinical-nlp/
Immagine di copertina: Il complesso della Mayo Clinic a Rochester, Minnesota: in primo piano lâedificio basso della Mayo Medical School, dietro il⌠â foto di Jonathunder, CC BY-SA 3.0 â https://commons.wikimedia.org/wiki/File:MayoClinic&MedSchool2006-05-07.JPG