Scritto da Annalisa Creazzo e Martina Fieromonte (Area Valorizzazione Dati RES)
Se avere accesso ai dati rappresenta senza dubbio un incoraggiante punto di partenza nella realizzazione di un progetto di Intelligenza Artificiale, avere accesso a dati annotati, ovvero a dei dati che contengono un “segnale” apprendibile dalla macchina, costituisce un vantaggio seriamente competitivo.
Prima di cimentarsi però in quella che viene spesso definita un’impresa titanica, l’annotazione dei dati, è importante conoscere gli aspetti più profondi di questo processo. Solo attraverso una pianificazione accurata sarà infatti possibile ridurne costi, tempi e fatiche, renderla, insomma, un’impresa umana.
Data Annotation: diamo voce ai dati
In Machine Learning annotare significa associare delle etichette ai dati, le quali forniscono qualche tipo di informazione sui dati stessi. Dati + Etichette rappresentano degli esempi da cui un algoritmo può apprendere un task e riprodurlo. L’annotazione interessa diversi tipi di dati: immagini, video e, ovviamente, il testo. Proprio per la sua applicabilità a contesti diversi, la “kick-off phase” del processo di annotazione ha l’arduo compito di strutturare i passi che comporranno il task. I fattori su cui è bene basarsi prima di iniziare ad annotare sono:
- contesto di applicabilità del modello (ambito editoriale, automotive, salute, istruzione, legale, finanziario)
- task da portare a termine (classificazione, predizione, clustering…)
- algoritmo ML scelto (supervisionato, non supervisionato, semi-supervisionato…)
- quantità dei dati disponibili
- accuratezza delle performance finali
La strutturazione di questi fattori non deve essere sottovalutata: infatti, senza una pianificazione consapevole, l’annotazione rischia di diventare un processo dispendioso in termini di tempo e costi, capace di rallentare in modo incisivo il workflow di un progetto.
Continuando a esplorare le fasi di Data Preprocessing introdotte nell’articolo sulla pulizia dei dati, nelle prossime sezioni, individueremo scopi e motivazione del processo di annotazione in ambito NLP. Cercheremo di rispondere a domande come:
- È sempre necessario annotare?
- Quali tipi di annotazione sono possibili per i dati linguistici?
- Esistono degli strumenti che permettono di velocizzare il task di annotazione?
A chiosa dell’articolo, getteremo luce sulle “qualità” del buon annotatore, l’Atlante titano della Data Science che ha il compito di annotare i dati.
È sempre necessario annotare in NLP?
Si tratta di una delle domande tipiche che ci si pone prima di intraprendere il processo di annotazione. Due fattori possono, infatti, determinare la necessità di questo processo: il task che si vuole svolgere e il tipo di apprendimento automatico scelto. Esistono almeno quattro modelli di apprendimento automatico i quali, tra le altre cose, si differenziano soprattutto per la quantità e la qualità dei dati annotati che richiedono.
Apprendimento supervisionato: in questo modello di apprendimento sono presenti una variabile di input (i dati annotati) e una di output (i risultati desiderati). Compito dell’algoritmo è di imparare ad approssimare al meglio la funzione di relazione tra le due variabili, al fine di predire l’output corretto in presenza di nuovi dati. Usati nella maggior parte dei task ML (soprattutto task di classificazione e predizione), i modelli supervisionati, a fronte di performance più accurate, richiedono dati annotati.
Apprendimento non supervisionato: al polo opposto, si trova l’apprendimento non supervisionato. Lo scopo di questo tipo di apprendimento è quello di inferire pattern nascosti in grandi dataset di dati non annotati. Poco affidabile nell’esecuzione di task complessi e che richiedono un alto tasso di accuratezza, i modelli non supervisionati si prestano invece molto bene alla risoluzione di task di clustering e riduzione della dimensionalità.
Apprendimento semi-supervisionato: a metà tra le modalità di apprendimento presentate sopra, l’apprendimento semi-supervisionato utilizza sia dati annotati che dati non annotati. Si tratta di modelli molto popolari oggi, in quanto capaci di moderare i limiti dell’apprendimento super-non supervisionato e di catalizzarne i punti di forza.
Reinforcement learning: è un modello di apprendimento che non necessita di dati. Ciò di cui ha bisogno per imparare un task sono: un ambiente, un agente con scopo, una serie di “punizioni” e “ricompense” che guidano l’agente allo scopo desiderato. I modelli di reinforcement learning sono spesso utilizzati nella simulazione di giochi, per insegnare ai robot le mansioni domestiche o guidare macchine.
Perché annotare i dati
Se esistono delle alternative all’apprendimento supervisionato, allora perché annotare i dati? La risposta è stata in parte fornita nel paragrafo precedente: la maggior parte degli algoritmi ML ottiene performance migliori con dati annotati; inoltre, ci sono task che richiedono necessariamente questo tipo di dati per esseri portati a termine.
Annotare i dati non strutturati rimane, quindi, ancora la strada più battuta per allenare un modello. A dispetto infatti dello sforzo che potrebbe richiedere la loro produzione, i dati annotati possiedono un valore maggiore in quanto forniscono una descrizione accurata del contesto analizzato. L’annotazione mostra chiaramente i pattern possibili e indica alla macchina a cosa prestare attenzione. Questo “aiuto” risulta essere molto utile nei task di classificazione avanzati e nella costruzione di complessi modelli di predizione. L’uso di dati annotati, oltre ad apportare direttamente dei benefici all’algoritmo, in termini di accuratezza delle performance, migliora la user experience in quanto permette all’utente di usufruire di un servizio IA accurato ed efficiente. Dando voce ai dati, l’annotazione svela il loro potenziale nascosto, suggerendo come e quanto questo può apportare valore aggiunto.
I tipi di annotazione
L’annotazione può essere applicata a qualunque tipo di dato: immagini, video, dati tipici in ambito Computer Vision, testi e audio, basi di partenza per il NLP. Tra i più comuni task di annotazione NLP troviamo:
Annotazione delle entità: è il processo di localizzazione, estrazione e annotazione di entità dal testo. All’interno di questa categoria sono presenti alcuni sottotipi di annotazione: la Named Entity Recognition (NER), l’annotazione di entità quali persone, organizzazioni o entità scelte ad hoc sui dati e la Keyword tagging, ovvero l’annotazione di parole chiave all’interno di un testo.
Entity Linking: con questo termine si intende il processo di annotazione delle relazioni tra le parti del testo etichettate. I collegamenti possono essere interni al testo (end-to-end entity linking), o esterni (collegamento tra le entità nel testo e database esterni).
Annotazione del testo: implica il tagging di un intero testo o di alcune sue parti. Subtask di questo tipo di annotazione sono:
- l’annotazione dei documenti che permette di suddividere e classificare i documenti in base al loro contenuto;
- la categorizzazione dei prodotti che consiste nella suddivisione dei prodotti e dei servizi in classi e categorie;
- l’annotazione di domande e risposte o delle intenzioni contenute in un testo.
Annotazione delle emozioni: ad essere taggate in questo caso sono le emozioni, i sentimenti e le opinioni (positive, negative, neutre) presenti nel testo.
Annotazione linguistica: l’annotazione linguistica si interessa di taggare il linguaggio nei suoi diversi livelli di analisi. In questo caso, scopo dell’annotatore è quello di identificare e etichettare gli elementi grammaticali (Part of Speech tagging PoS), sintattici (Parsing sintattico), semantici (Parsing Semantico) o fonetici presenti nel testo o nei dati audio.
Annotare: le strategie per farlo bene
Stabilire delle linee guida
Stabilire delle linee guida, delle convenzioni da seguire durante il processo di annotazione, rappresenta un primo fondamentale step per garantire dati annotati consistenti e coerenti. Le principali linee guida sono:
i) decidere le entità che devono essere taggate;
ii) stabilire delle etichette chiare e comprensibili;
iii) definire quanto più possibile i confini dell’entità da taggare, ovvero la quantità di testo che le etichette possono inglobare al proprio interno.
Sebbene le convenzioni vadano stabilite prima di iniziare ad annotare, queste possono essere modificate in corso d’opera, a patto che venga mantenuta la coerenza nel processo.
Scelta del formato di annotazione
Esistono due formati principali per annotare i dati linguistici:
Formato IOB: il formato IOB (inside-outside-beginning) è un metodo di annotazione in cui le etichette sono direttamente attaccate alla parola da taggare. In tale formato, B indica l’inizio dell’entità, mentre I le sue restanti parti. O indica, invece, tutti gli elementi che non devono essere taggati. Per permettere l’intercambiabilità con altri sistemi, le entità taggate in formato IOB vengono poi convertite in JSON. Il vantaggio di questo formato è che esso include tutto il testo, indipendentemente che si tratti di entità taggate o no. |
TESTO ENTITÀ’ B-PERS Mario |
N. ENTITA’ ENTITA’ TESTO
—————————————— T1 NAM Mario |
Formato Standoff: questo formato differisce da quello IOB in quanto mostra solo le entità che sono state taggate. Il testo nella sua interezza si trova in documento a parte. Nell’immagine T indica il numero dell’entità, le tre lettere della seconda colonna, il tipo di entità annotata (nome, luogo, organizzazione). Infine l’ultima colonna contiene il testo delle entità taggate. Contenendo solo queste ultime entità, lo standoff si presta bene ad essere usato in altri servizi. |
Modalità di annotazione
Stabiliti convenzioni e formato, è tempo di annotare. Indipendentemente dalle tecniche adottate, l’annotazione può essere affrontata in modalità:
- in-house, con assegnazione del task di annotazione ad un Data Annotator interno al team Data Science aziendale;
- outsourcing, affidando il compito di annotazione ad aziende che si occupano specificamente di annotare i dati;
- crowdsourcing, dove persone da remoto reperibili attraverso piattaforme adibite, taggano i dati.
La possibilità di tracciare meglio i progressi, così come la disponibilità di specialisti per tutto il processo di costruzione del modello sono i punti forti della prima modalità, che richiede comunque un investimento di tempo e personale adatto. L’outsourcing rappresenta una valida alternativa per le aziende che, pur volendo cimentarsi in un progetto IA, non hanno o non ritengono opportuno assumere annotatori a tempo indeterminato. L’opzione crowdsourcing permette, infine, un’annotazione veloce ed economica, seppur qualità, coerenza e tracciabilità dei risultati non sono sempre garantite.
Metodi di annotazione
Annotazione Manuale: al giorno d’oggi raramente l’annotazione è completamente manuale. Il data annotator dispone, infatti, di strumenti e tecnologie che gli permettono di moderare gli sforzi e il tempo impiegato per annotare i dati. Ci sono però task che un annotatore umano porta a termine più facilmente di un computer: si pensi al task di annotazione delle espressioni facciali o delle emozioni presenti in un testo. Nella tabella sono riassunti i vantaggi e gli svantaggi di un’annotazione manuale.
Vantaggi dell’annotazione manuale |
Svantaggi dell’annotazione manuale |
Qualità: diversamente da un algoritmo, la mente umana non è una struttura rigida. Essa è capace di fare inferenze profonde sui dati e operare di conseguenza, soprattutto di fronte alle ambiguità del linguaggio. L’annotazione umana è quindi più accurata. | Possibilità di errore: se da una parte l’annotatore umano garantisce dati annotati accurati, dall’altra questi potrebbero non essere precisi o sempre coerenti. Per questo è importante intervallare il processo di annotazione con fasi di revisione. |
Flessibilità: un annotatore umano è capace di modellare l’annotazione in caso di particolarità dei dati o di eccezioni. | Quantità: l’annotatore umano ha dei limiti in termini di quantità di dati che riesce ad annotare. |
Costi: sebbene l’annotazione manuale possa risultare costosa, in caso di progetti singoli ad hoc, essa risulta meno dispendiosa rispetto lo sviluppo o l’acquisto di uno strumento di annotazione automatico. | Tempi e sforzi intensi: l’annotazione manuale richiede tempo e sforzi intensi. Per questo la modalità outsourcing permette oggi di delegare il task di annotazione a personale qualificato il cui compito è proprio quello di annotare. |
Per sopperire alle mancanze dell’annotazione manuale, si stanno cercando dei metodi alternativi, o per meglio dire, integrativi capaci di portare a termine il task. La filosofia alla base di questi metodi è quella dell’Human in the Loop, ovvero un processo di annotazione che, per quanto automatizzato, non rinuncia all’intervento umano. Di seguito alcuni dei metodi di annotazione non manuale più comuni.
Data programming: per data programming si intende la creazione di script che, seguendo delle istruzioni, annotano i dati. I dati annotati tramite Data Programming non risultano completamente accurati, ma rappresentano una buona base di partenza da far revisionare ad un annotatore umano.
Annotazione sintetica: l’annotazione sintetica genera dati “sintetici” che imitano quelli reali. Questi dati vengono prodotti e validati su un dataset originale. Tra i metodi più utilizzati per produrre questo tipo di dati ci sono le reti generative avversiali (generative adversial network, GAN.) Si tratta di un insieme di reti, che, sfruttando modelli statistici diversi, producono dati sintetici e testano quanto questi dati si differenziano dai dati reali. In termini di vantaggi, l’annotazione sintetica fa risparmiare tempo e soldi. Siccome prodotti ex novo, questi dati non richiedono, inoltre, particolari permessi per essere usati. L’approccio sintetico, tuttavia, richiede un alto sforzo computazionale per essere sviluppato. Inoltre l’accuratezza dei dati non è sempre garantita.
Active Learning: l’annotazione in modalità Active Learning è intesa come una serie di step interattivi tra l’algoritmo e il data annotator. In tale scenario, un algoritmo ML allenato su un piccolo dataset di dati annotati viene testato su un dataset non annotato. I risultati dell’annotazione vengono poi analizzati per individuare i punti di incertezza dell’algoritmo, ovvero quei punti in cui l’algoritmo non è stato “bravo” ad annotare. Questi punti critici verranno quindi presi in carico e annotati dall’annotatore umano.
Il tallone d’Achille dell’annotazione in NLP: il linguaggio umano
Per quanto paradossale possa sembrare, il limite più grande quando si annotano i dati linguistici o si cerca di automatizzare la loro annotazione è imposto proprio dal linguaggio umano. Esso è, infatti, ambiguo, ovvero, una parola può significare più cose. Si pensi alla parola “rossi” che nell’espressione “Sig. Rossi” è un’entità nominata mentre non lo è in “pomodori rossi”. Il processo di annotazione dovrebbe quindi prevedere, o quantomeno saper gestire queste problematiche, che se lasciate irrisolte potrebbero compromettere la robustezza del modello finale.
Non solo l’ambiguità, ma anche la possibilità di esprimere uno stesso concetto in modo diverso: “il film è orribile”, “il film è tutt’altro che stupendo”, significano pressoché la stessa cosa (opinione negativa nei confronti del film). Nel primo caso, però, l’opinione è stata espressa in modo esplicito usando un termine di valore negativo (orribile), mentre nel secondo caso attraverso la negazione di un termine di valore positivo (non stupendo). L’ultimo esempio mette in evidenza un principio fondamentale del processo di annotazione: esso non può e non deve. per risultare efficace, limitarsi ad un semplice matching tra parole, del tipo → se nel testo è presente la parola “stupendo” allora etichetta l’opinione come positiva.
L’annotazione NLP competenza del GRUPPO RES
Vi presentiamo alcuni dei punti salienti di un task di annotazione, condotto dal team Data Science del Gruppo RES nell’ambito del progetto Smart Recipe sviluppato per Condé Nast:
Task di annotazione: si è trattato dell’annotazione di entità in un dataset di ricette di cucina. Le entità da taggare sono state gli ingredienti insieme alle loro rispettive quantità e unità di misura.
Metodo di annotazione: l’annotazione è stata portata avanti con il metodo Data Programming corredato da revisione manuale. È stato creato uno script capace di:
- Fare un match tra le entità presenti in delle liste e quelle presenti nei dati da annotare.
- Assegnare ai dati delle etichette.
- Collegare (entity linking) i dati tra di loro, in modo che ad ogni ingrediente venissero associate le rispettive quantità e unità di misura.
I testi annotati tramite questa modalità sono stati revisionati manualmente. Scopo della revisione è stato quello di correggere eventuali errori e insieme, tramite l’osservazione dei dati, individuare strategie ed euristiche per automatizzare quanto più possibile il task di annotazione.
Due “shortcut” adottate per automatizzare il task di annotazione:
- Tagging delle quantità: i caratteri numerici nel dataset potevano rappresentare tanto dei dati numerici a sé stanti, quanto le quantità degli ingredienti. Per assicurarci che venissero taggati solo in quest’ultimo caso, abbiamo individuato una lista di strutture linguistiche vincolate dalla presenza di un ingrediente. Per cui “4” in espressioni del tipo “4 carote” è stato taggato come quantificatore, mentre non lo è stato in “4 piatti di plastica”, in quanto nella struttura non era presente un ingrediente.
- Parole ambigue grammaticalmente: nella versione inglese del dataset, parole come “flour”, “bread”, “oil” potevano significare “farina”, “pane”, “olio” se sostantivi, “infarinare”, “impastare”, “oleare” se verbi. Abbiamo usato il PoS tagging (vedi sopra) per distinguere i due casi e taggare come ingredienti solo le istanze di sostantivi.
Le qualità del buon annotatore
L’articolo ha presentato vari aspetti del processo di annotazione, dalle modalità di apprendimento automatico che richiedono o no dati annotati, ai tipi di annotazione in ambito NLP, per concludere poi con modalità e metodi per eseguire il processo.
C’è una figura però che, seppur nominata varie volte nel corso dell’articolo, non è stata presentata ufficialmente: il Data Annotator. L’annotatore è la figura professionale che si occupa di preparare e annotare i dati che servono per allenare un modello. Ma quali sono le competenze e le soft skill che un buon annotatore dovrebbe avere per essere definito tale? Pazienza, flessibilità mentale e amore per i dettagli sono sicuramente elementi importanti per temprare l’animo professionale di questa figura spesso sottovalutata, ma sul cui operato si basa buona parte del successo o fallimento di un modello ML.
Tuttavia ci sono altre competenze che un annotatore, nel nostro caso in ambito NLP, dovrebbe possedere. Siccome annotare, non è solo un esercizio linguistico, ma anche culturale, un annotatore competente dovrebbe possedere, oltre che una conoscenza profonda degli aspetti del linguaggio, una propensione alla cultura. I dati che si troverà ad annotare, infatti, potrebbero provenire dai contesti più disparati: ambito legale, medico, finanziario, ecc. È tra i suoi compiti quindi formarsi al fine di ottenere le conoscenze necessarie per padroneggiare i dati da taggare. L’annotatore deve, inoltre, costruirsi delle competenze tecnologiche. Stando a così stretto contatto con i dati, l’annotatore è la figura che più di tutte conosce e può interpretare i dati. Il suo ruolo non si esaurisce al termine del processo di annotazione, ma rimane una figura di riferimento anche in fase di training/testing del modello. Per questo motivo, anche se non sempre richieste, un buon annotatore dovrebbe costruirsi delle competenze/conoscenze informatiche e in ambito Machine Learning che gli permettano non solo di dotarsi di strumenti necessari per l’annotazione, ma anche di comprendere e seguire il resto del team Data Science per l’intero workflow del progetto.
Per quanto il processo di annotazione possa andare incontro all’automatizzazione, nel Gruppo RES riteniamo che “the human touch” conferito dall’annotatore sia sempre indispensabile non solo per avviare, supervisionare e garantire una corretta annotazione dei dati, ma anche per rafforzare il legame esistente tra personale esperto che comprende e interpreta i dati e cliente che vuole usare questi dati per aiutare il proprio business ad esplorare nuove opportunità.