Guida pratica alla correzione di lemmatizzazione e POS-tagging del KIParla

1. Contesto del lavoro

Il tuo compito non è annotare da zero, ma:

  • partire da un file già lemmatizzato e POS-taggato automaticamente;

  • verificare e correggere manualmente lemma e POS quando necessario;

  • seguire in modo coerente le linee guida di Universal Dependencies (UD).

L’obiettivo è migliorare la qualità dell’annotazione, soprattutto nei casi tipici dell’italiano parlato.

2. Riferimenti fondamentali (da consultare spesso)

Framework generale - Universal Dependencies:

Ci basiamo sul framework Universal Dependencies (UD), che fornisce:

  • un insieme standard di parts of speech (POS);

  • regole di annotazione morfosintattica;

  • linee guida per la lemmatizzazione.

Universal Dependencies è un progetto per creare treebank annotati comparabili tra lingue. I principali concetti:

  • Lemma: forma di base di una parola (es. andare per andavo);

  • POS tag: categoria grammaticale (es. VERB, NOUN, ADJ, …);

  • Morfologia: attributi aggiuntivi (numero, genere, tempo, modo, …). NB. per ora non la annotiamo!

Risorse utili:

Parts of Speech in UD

Le categorie POS usate in UD sono standardizzate e relativamente poche: ADJ, ADP, ADV, AUX, CCONJ, DET, INTJ, NOUN, NUM, PART, PRON, PROPN, PUNCT, SCONJ, SYM, VERB, X

Per ogni tag trovi:

  • una descrizione;

  • esempi;

  • indicazioni di uso.

3. Dal file EAF al formato verticale

I file sorgente del KIParla sono in formato .eaf, il formato nativo di ELAN. Internamente un EAF è un file XML: ogni blocco di trascrizione corrisponde a un tag <ALIGNABLE_ANNOTATION> con timestamp di inizio/fine e il testo trascritto.

<ALIGNABLE_ANNOTATION ANNOTATION_ID="a42" TIME_SLOT_REF1="ts83" TIME_SLOT_REF2="ts84">
  <ANNOTATION_VALUE>mi chiamo rossi, anna: giulia</ANNOTATION_VALUE>
</ALIGNABLE_ANNOTATION>

Questo formato è comodo per lavorare in ELAN, ma non è adatto all’analisi linguistica: il testo è una stringa continua, i simboli Jefferson (prolungamenti, sovrapposizioni, intonazione…) sono mescolati alle parole, e non c’è modo di cercare per lemma o parte del discorso.

La verticalizzazione

Per rendere il corpus interrogabile, i file EAF vengono convertiti in un formato verticale (.vert.tsv): ogni parola occupa una riga, e le informazioni che in Jefferson erano simboli inline diventano colonne separate.

Colonna Contenuto

token_id

Identificatore unico del token (unità-posizione, es. 4-2)

speaker

Codice del parlante (es. BO020)

tu_id

Indice dell’unità di trascrizione (turno)

span

La trascrizione originale, con notazione Jefferson intatta (es. preparo:,)

form

La forma ortografica ripulita dai simboli prosodici (es. preparo)

lemma

Forma citazionale — da completare/correggere

upos

Parte del discorso UD — da completare/correggere

jefferson_feats

Feature prosodiche estratte (es. Intonation=WeaklyRising)

Per esempio, il blocco EAF sopra diventa:

token_id speaker tu_id span form lemma upos jefferson_feats

4-0

BO020

4

mi

mi

mi

PRON

_

4-1

BO020

4

chiamo

chiamo

chiamare

VERB

_

4-2

BO020

4

rossi,

rossi

Rossi

PROPN

Intonation=WeaklyRising

4-3

BO020

4

anna:

anna

Anna

PROPN

_

4-4

BO020

4

giulia

giulia

Giulia

PROPN

_

Il ruolo della lemmatizzazione in questo processo

Il formato verticale viene prodotto automaticamente. Le colonne lemma e upos vengono pre-compilate da un parser statistico, ma il parser fa errori — in particolare sull’italiano parlato (prima persona dei verbi, nomi propri, interiezioni, parole troncate).

Il tuo compito è correggere queste due colonne. Una volta corrette, le informazioni vengono integrate nel corpus e rendono possibile cercare per lemma o per parte del discorso in NoSketchEngine.

4. File di lavoro (Excel / CSV)

Il lavoro principale si svolge su un file excel ma alla fine della correzione l’informazione verrà trasportata nel formato standard delle UD, ovvero CoNLL-U

I file sono in formato tabulare (TSV) e contengono almeno:

  • forma (token così come appare nel parlato);

  • lemma;

  • POS tag UD.

Del nostro file di lavoro ci interessano principalmente le colonne:

  • token_id: identificatore unico del token

  • span: la trascrizione originale (notazione Jefferson)

  • form: la trascrizione in versione ortografica (senza simboli prosodici)

  • lemma

  • upos

  • jefferson_feats: attributi prosodici aggiuntivi (di solito non va toccata, tranne per code switching — vedi Code switching e dialetto)

Il sistema degli ID token

Ogni token ha un token_id unico che codifica l’unità di trascrizione e la posizione all’interno di essa. Gli ID devono rimanere unici all’interno del file: lo script di integrazione li usa per collegare lemma/POS ai file sorgente

  • Token divisi (preposizioni articolate, clitici): usa il formato 5-7a / 5-7b per i sotto-token.

  • Token aggiunto (parola saltata in trascrizione): usa il primo ID numerico non ancora assegnato nell’unità (es. se l’unità 8 ha token 8-08-4, aggiungi 8-5). L’importante è che l’ID non esista già nel file.

  • Token rimosso (parola di troppo in trascrizione): elimina semplicemente la riga.

Esempio: aggiungere un token mancante

Riascoltando l’audio, ti accorgi che nell’unità 8 manca la parola moderne. L’unità ha già i token 8-08-4. Aggiungi una riga con il primo ID libero:

token_id speaker tu_id span form lemma upos

8-3

BO026

8

lingue

lingue

lingua

NOUN

8-4

BO026

8

modern]e?

moderne

moderno

ADJ

8-5

BO026

8

straniere

straniere

straniero

ADJ ← riga aggiunta

5. Cosa correggere

Approccio del progetto KIParla Forest

La lemmatizzazione ed annotazione del KIParla è stata brevemente descritta nel progetto "KIParla Forest", la treebank sintattica del KIParla: articolo

Lemmatizzazione

Il lemma è la forma citazionale del token (quella che cercheresti nel dizionario).

Controlla che il lemma sia una forma canonica (infinito per i verbi, singolare maschile per nomi/aggettivi, quando appropriato).

Cose da tenere a mente:

  • I nomi propri vanno lemmatizzati con la lettera maiuscola

  • sigle (es. RSA o CGIL): nella trascrizione a volte vengono trascritte con uno spazio tra le lettere (erre esse a), altre volte univerbate (cigielle). Vanno riportate alla forma univerbata e lemmatizzate come da standard italiano (es. R.S.A., CGIL)

POS tagging

  • Usa sempre solo i POS UD ufficiali.

  • Verifica in particolare:

    • VERB vs AUX

    • NOUN vs PROPN

    • ADV

    • INTJ per segnali discorsivi (eh, mh, boh, sì, no)

  • Dizionario di riferimento

Criterio morfologico per il POS

In caso di dubbio, basati su indizi morfologici, non su come la parola si comporta nel contesto. Esempi:

  • dai — anche se usato come segnale discorsivo ("dai, basta"), morfologicamente è la seconda persona singolare del verbo dare. POS: VERB, lemma: dare.

  • madonna — anche se usato come esclamazione, conserva proprietà nominali (una madonna, due madonne). POS: NOUN, lemma: Madonna.

Consulta sempre il dizionario De Mauro per verificare la categoria grammaticale originaria.

Esempi di correzione: lemma e POS errati prodotti dal parser

Il file BOA1001 contiene questi errori tipici. La parlante si presenta dicendo "io mi chiamo rossi anna giulia":

token_id form lemma (parser) upos (parser) Correzione Note

0-1

mh

mh

NOUN

lemma invariato, upos → INTJ

segnale discorsivo

0-2

eh

eh

NOUN

lemma invariato, upos → INTJ

segnale discorsivo

4-3

chiamo

chare

VERB

lemma → chiamare

il parser ha inventato un lemma

4-4

rossi

rosso

ADJ

PROPN, lemma → Rossi

nome proprio: maiuscola, non aggettivo

4-6

anna

anno

ADJ

PROPN, lemma → Anna

nome proprio: maiuscola, non nome comune

4-7

giulia

giulia

NOUN

PROPN, lemma → Giulia

nome proprio: maiuscola

Token speciali

Parole troncate / interruzioni

Il parlante può interrompere una parola a metà. In questi casi:

  • Completa il lemma solo se la stessa base lessicale appare in un contesto vicino (es. il parlante riprende e ripete la stessa parola).

  • Non completare se il parlante cambia lessema (es. qui a Bologna conosco molte per~ famiglie del sud inizia a dire persone ma si corregge con famiglie): in quel caso non sappiamo cosa volesse dire, e non facciamo ipotesi semantiche.

  • Se non è possibile determinare il lemma, usa x come lemma e X come POS.

Esempio: parola troncata con ripetizione vicina → lemma completabile

Il token 7-5 contiene abili~ (troncato con ~). Poco dopo, nell’unità 10, lo stesso parlante dice abilitato. La base lessicale è la stessa: si può completare.

token_id speaker tu_id span form lemma upos jefferson_feats

7-1

BO020

7

lei

lei

lei

PRON

_

7-2

BO020

7

non

non

non

ADV

_

7-3

BO020

7

ha

ha

avere

VERB

_

7-4

BO020

7

ancora

ancora

ancora

ADV

_

7-5

BO020

7

abili~]

abili~

abili~

PROPN

Interrupted=Yes

8-0

BO026

8

[di

di

di

ADP

_

8-1

BO026

8

didattica

didattica

didattica

NOUN

_

8-2

BO026

8

delle

delle

_

_

_

8-2a

_

_

_

di

di

ADP

_

8-2b

_

_

_

le

il

DET

_

8-3

BO026

8

lingue

lingue

lingua

NOUN

_

8-4

BO026

8

modern]e?

moderne

moderno

ADJ

Intonation=Rising

9-0

BO020

9

sì.

ADV

Intonation=Falling

10-0

BO020

10

non

non

non

ADV

_

10-1

BO020

10

ha

ha

avere

AUX

_

10-2

BO020

10

ancora

ancora

ancora

ADV

_

10-3

BO020

10

abilitato

abilitato

abilitare

VERB

_

10-4

BO020

10

per

per

per

ADP

ProsodicLink=Yes

10-5

BO020

10

eh,

eh

eh

NOUN

Intonation=WeaklyRising

11-0

BO020

11

per

per

Correggi 7-5:

token_id speaker tu_id span form lemma upos jefferson_feats

7-5

BO020

7

abili~]

abili~

abilitare

VERB

Interrupted=Yes

Parole incomprensibili (XXX)

I token trascritti come XXX (o con grafia simile) indicano parole non comprensibili.

  • Lemma: x

  • POS: X

Durante la lemmatizzazione puoi riascoltare l’audio. Se riesci a trascrivere parole che erano state marcate come incomprensibili, puoi correggerle nella colonna form (e span). Vedi Correzioni alla trascrizione.

Token divisi: preposizioni articolate e verbi con clitici

Il parser divide automaticamente alcune forme in più token:

  • Preposizioni articolate: sullasu (ADP) + la (DET)

  • Verbi con clitici: averloavere (AUX) + lo (PRON)

Quando avviene la divisione, la riga originale (es. sulla) rimane con lemma e POS vuoti, e vengono aggiunte due righe con ID del tipo 5-7a e 5-7b.

Esempio: divisione già fatta correttamente dal parser

Il token sulla nell’unità 5 è stato diviso correttamente:

token_id speaker tu_id span form lemma upos

5-7

BO020

5

sulla:

sulla

_

_

5-7a

_

_

_

su

su

ADP

5-7b

_

_

_

la

la

DET

La riga 5-7 conserva span e form originali; lemma e upos restano vuoti (_). Le righe 5-7a e 5-7b portano lemma e POS dei sotto-token.

Esempio: divisione mancante — aggiungere sotto-token a mano

Il parser non ha diviso averlo. La situazione nel file è:

token_id speaker tu_id span form lemma upos

12-3

BO020

12

averlo

averlo

avere

VERB

Va corretta così:

token_id speaker tu_id span form lemma upos

12-3

BO020

12

averlo

averlo

_

_

12-3a

_

_

_

aver

avere

AUX

12-3b

_

_

_

lo

lo

PRON

Esempio: divisione errata — rimuovere sotto-token

Il parser ha diviso del (ho comprato del pane) come preposizione articolata, ma è un articolo partitivo. La situazione nel file:

token_id speaker tu_id span form lemma upos

15-2

BO020

15

del

del

_

_

15-2a

_

_

_

di

di

ADP

15-2b

_

_

_

il

il

DET

Elimina le righe 15-2a e 15-2b e completa la riga originale:

token_id speaker tu_id span form lemma upos

15-2

BO020

15

del

del

del

DET

Errori nella trascrizione originale

Le colonne span e form in linea di principio non andrebbero toccate, perché rispecchiano la trascrizione originale. Tuttavia, se riascoltando l’audio individui un errore di battitura o una tokenizzazione sbagliata, puoi intervenire anche su queste colonne.

Ogni modifica a span o form verrà poi essere propagata al file sorgente del corpus in automatico tramite una patch. Vedi Correzioni alla trascrizione. È importante fare particolare attenzione durante queste operazioni

Esempio: errore di battitura (bibliotrechebiblioteche)

Il trascrittore ha scritto una parola in modo errato. Nel file trovi:

token_id speaker tu_id span form lemma upos

22-3

BO020

22

bibliotreche

bibliotreche

biblioteca

NOUN

Correggi span e form:

token_id speaker tu_id span form lemma upos

22-3

BO020

22

biblioteche

biblioteche

biblioteca

NOUN

Esempio: tokenizzazione errata — parole unite (casamiacasa + mia)

Il trascrittore ha unito due parole in un unico token. Nel file trovi:

token_id speaker tu_id span form lemma upos

14-1

BO020

14

casamia

casamia

casa

NOUN

Sostituisci la riga con due righe. Per la seconda, usa il primo ID libero nell’unità:

token_id speaker tu_id span form lemma upos

14-1

BO020

14

casa

casa

casa

NOUN

14-2

BO020

14

mia

mia

mio

DET

Se nell’unità esistono già token con ID 14-2, 14-3 ecc., gli ID di quei token non vanno rinumerati: aggiungi solo la nuova riga con un ID non ancora usato (es. 14-1bis oppure un ID numerico libero successivo all’ultimo esistente, es. 14-101).

Code switching e dialetto

Se nella conversazione compaiono parole in un’altra lingua (inglese, francese, spagnolo…) o in dialetto:

  • Lemmatizza secondo la lingua di quella parola (es. un verbo inglese va lemmatizzato all’infinito inglese).

  • Nella colonna jefferson_feats, aggiungi la stringa Lang=XXX con il codice lingua ISO:

    • Lang=eng per l’inglese

    • Lang=spa per lo spagnolo

    • Lang=fre per il francese

    • Lang=dia per il dialetto italiano

  • Se la parola è in dialetto e non è lemmatizzabile con certezza, usa il corrispondente italiano come lemma.

6. Uso di GREW per i dubbi

GREW serve per:

  • cercare come casi simili sono annotati in altri corpora UD;

  • confrontare lemma e POS in contesti simili.

Link utili:

Per ora è sufficiente:

  • cercare per form

  • cercare per lemma

  • cercare per upos

  • osservare esempi annotati correttamente

7. Buone pratiche

  • Sii coerente: stessi casi → stesse soluzioni

  • Prendi note dei casi problematici ricorrenti

  • Meglio segnalare un dubbio che introdurre un errore sistematico

  • In caso di dubbio, tieni traccia del token_id in modo da ritrovare velocemente i punti da discutere