Named Entity Recognition (NER)
Il riconoscimento di entità nominate (NER) individua nel testo nomi di persone, organizzazioni, luoghi, date e importi, assegnando a ciascuno il tipo di entità.
Il riconoscimento di entità nominate (NER) è un'attività di elaborazione del linguaggio naturale (NLP) che individua le porzioni di testo che nominano elementi del mondo reale e assegna a ciascuna un tipo, come persona, organizzazione, luogo, data o importo monetario. In «Marie Curie insegnò all'Università di Parigi dal 1906», un modello NER contrassegna «Marie Curie» come persona, «Università di Parigi» come organizzazione e «1906» come data. In questo modo, email, rapporti, contratti e trascrizioni diventano record strutturati utilizzabili da motori di ricerca, grafi della conoscenza, strumenti di analisi e strumenti per la privacy. Le Message Understanding Conferences degli anni '90 hanno reso il NER un'attività di valutazione standard, mentre la shared task CoNLL-2003 ha fissato le quattro tipologie ancora usate come riferimento: persona, luogo, organizzazione e miscellanea. Schemi più ampi, come OntoNotes 5.0, definiscono 18 tipologie, tra cui date, quantità, prodotti ed eventi.
Come funziona NER#
Il NER viene in genere formulato come etichettatura di sequenze. Un tokenizzatore suddivide il testo in token e il modello assegna a ogni token un tag secondo lo schema BIO: B- indica l'inizio di un'entità, I- un token al suo interno e O un token esterno a qualsiasi entità, così i nomi composti da più parole, come «Università di Parigi», restano uniti. Questo codice trasforma i tag previsti dal modello in porzioni di entità:
# Token-level BIO tags, as predicted by an NER model for one sentence
tokens = ["Marie", "Curie", "taught", "at", "the", "University", "of", "Paris", "from", "1906", "."]
tags = ["B-PER", "I-PER", "O", "O", "O", "B-ORG", "I-ORG", "I-ORG", "O", "B-DATE", "O"]
# Merge each B- tag with the I- tags that follow it into one entity span
entities = []
for token, tag in zip(tokens, tags):
if tag.startswith("B-"):
entities.append([token, tag[2:]])
elif tag.startswith("I-") and entities and entities[-1][1] == tag[2:]:
entities[-1][0] += f" {token}"
print(entities)Stampa [['Marie Curie', 'PER'], ['University of Paris', 'ORG'], ['1906', 'DATE']], l'output strutturato che i sistemi a valle archiviano e interrogano.
I modelli che predicono i tag sono cambiati nel corso di tre decenni. I primi sistemi usavano regole scritte a mano e gazetteer, ovvero elenchi di nomi noti. I tagger statistici, come i modelli di Markov nascosti e i campi casuali condizionali, apprendevano da testi annotati usando caratteristiche create a mano, come le maiuscole e i suffissi delle parole. Nel 2016, le reti LSTM bidirezionali con uno strato di output CRF hanno iniziato ad apprendere autonomamente queste caratteristiche, seguite dai transformer ottimizzati: BERT ha raggiunto un punteggio F1 di 92,8 sul set di test CoNLL-2003. La self-attention consente a questi modelli di usare l'intera frase come contesto: così, «Apple» viene etichettato come organizzazione in «Apple ha lanciato un nuovo telefono» e non viene etichettato in «Ho mangiato una mela». I sistemi vengono valutati con precisione, richiamo e punteggio F1 a livello di entità; una previsione viene conteggiata solo se sia la sua porzione sia il suo tipo corrispondono esattamente al riferimento.
I modelli più recenti abbandonano l'insieme fisso di etichette. GLiNER, un transformer bidirezionale compatto, riceve in input i nomi dei tipi di entità e individua le porzioni corrispondenti anche per tipi mai visti in addestramento, mentre i modelli linguistici di grandi dimensioni estraggono entità quando ricevono uno schema nel prompt e viene chiesto loro di produrre output strutturati.
NER a confronto con attività correlate#
- Collegamento delle entità: Collega ogni menzione riconosciuta a una voce specifica di una base di conoscenza come Wikidata, così «Parigi» viene associata alla città oppure a Paris Hilton.
- Estrazione di relazioni: Individua i legami tra entità, ad esempio quale persona lavora per quale organizzazione, spesso a partire dall'output del NER.
- Analisi del sentiment: Misura l'opinione espressa da un testo. Il NER identifica l'argomento di una recensione, mentre l'analisi del sentiment misura ciò che ne pensa chi l'ha scritta.
- Rilevamento di oggetti: L'equivalente visivo del NER: individua regioni di un'immagine e assegna a ciascuna una classe.
L'idea di etichette aperte di GLiNER ha un equivalente diretto nella visione: YOLOE-26, la versione a vocabolario aperto di Ultralytics YOLO26, riceve i nomi delle classi come prompt testuali al momento dell'inferenza e rileva e segmenta gli oggetti di quelle classi, anche se non appartengono alle categorie di addestramento.
Applicazioni nel mondo reale#
L'elaborazione dei documenti combina il NER con il riconoscimento ottico dei caratteri (OCR): fatture, contratti e moduli vengono scansionati, l'OCR legge il testo e il NER estrae campi come fornitore, data e importo totale per i sistemi di contabilità e conformità. Le pipeline di produzione inviano le previsioni incerte alle persone e apprendono dalle loro correzioni:
- Oscuramento dei dati personali (PII): Strumenti per la privacy come Presidio, il progetto open source di Microsoft, usano il NER insieme a regole basate su pattern per individuare e mascherare nomi, indirizzi e numeri di conto prima che il testo venga condiviso o usato per l'addestramento.
- Estrazione di informazioni cliniche: Il NER clinico estrae farmaci, dosaggi, sintomi e diagnosi dalle note dei medici, consentendo a ospedali e ricercatori di cercare e analizzare record su larga scala.
- Ricerca e consigli: I siti di notizie e le piattaforme di contenuti assegnano agli articoli tag con le persone, le aziende e i luoghi che menzionano, rendendo possibili la ricerca per entità e i consigli su storie correlate.










