API: ANNOTAZIONE DEL LIVELLO
PRAGMATICO
UNA SPERIMENTAZIONE
GIACOMO FERRARI
UNIVERSITA' DEL PIEMONTE ORIENTALE
DIPARTIMENTO DI STUDI UMANISTICI
1. Raccordo con la precedente sperimentazione
Nel corso del progetto AVIP è stata condotta, a titolo di sperimentazione, l'annotazione di
tre dialoghi ai livelli seguenti
Napoli C01
ann. DialActs MapTask
ann.DialActs DAMSL
Napoli B02
ann. DialActs MapTask
Pisa C03
DialActs MapTask
ann.coreferenza
ann. Parte del discorso
L'annotazione è stata condotta totalmente a mano, inclusa la fase d'identificazione e
numerazione delle parole del testo. Inoltre, nel dialogo Pisa_C03, le tre annotazioni concorrenti
sono state riportate tutte su uno stesso file e i tags sono stati posti nella loro collocazione fisica
corretta, eccetto alcune indicazioni di coreferenza. Questo porta ad una leggibilità immediata del
file annotato, in quanto le uità linguistiche annotate risultato delimitate fisicamente dai tags stessi.
2. Procedura di annotazione semiautomatica
La necessità di annotare una quantità estesa di dati impone la ricerca di metodologie il più possibile
automatiche. In mancanza di un sistema a ciclo completo, si è proceduto con un metodo ibrido. Il
ciclo ideale si configura come segue:
POS-tagging
procedure (semi)automatiche
tokenizzazione
annotazione
procedura manuale
dialogica
Il parallelismo delle operazioni induce a superare la linearità del file unico, a favore di una struttura
più vicina alla filosofia dell'XML, il linguaggio di mark-up, di file multipli, stratificati e riferiti ad
un file unico che fa da base, il file tokenizzato, come segue:
file tokenizzato
href
href
POS-tags
dialogue
moves/games..
3. La tokenizzazione
La tokenizzazione è un'operazione meccanica di isolamento delle unità base del testo e numerazione
progressiva delle stesse. In forma banale, si può dire che tokenizzare significa isolare ciascuna
parola del testo e darle un numero progressivo del tipo <word id="w_00n"> parola </word>.
A parte l'ovvia disputa su che cosa si intende per parola o unità lessicale, il processo di
tokenzzazione richiede una preliminare "ripulitura" del file originario di trascrizione.
Esemplifichiamo quello che si intende. Il file di trascrizione si presenta come segue:
ING: Alessia, età 23, sesso F, luogo di nascita Pisa INF: Andrea, età 23, sesso M, luogo di nascita Pisa LOC: Pisa, SNS, 15/4/99
DUR: 7 min. 40 sec.
CON: le condizioni della registrazione sono buone
CMT: il dialogo scorre velocemente sia perché i due informatori sembrano affiatati, sia perché soprattutto G si comporta come se stesse facendo una sorta di gara e dovesse portare F all'arrivo il più velocemente possibile
G001: #[ridendo] vai , #<F002> Sae##
"Sae" dovrebbe essere l'abbreviazione del cognome di F
F002: #<G001> allora# senti , per arrivare<ee> alla valle limpida G003: <mh> #<F004> okay#
F004: #<G003> la strada# che devo fare
G005: <mh> , allora <inspirazione> parti<ii> <f.vocale> ce l'hai il colibrì , no?
F006: sì
G007: <mh> , allora , da lì<ii> F008: <mh>
G009: <inspirazione> vai un pochino<oo> in su<uu>
Esso riporta il dialogo effettivo e tutte le annotazioni del trascrittore, tra cui l'indicazione del turno
(G00n, F00n), i commenti, le indicazioni di articolazione, i vocoidi ecc. L'operazione di
tokenizzazione dovrebbe essere predisposta per distingue tutti i tipi diversi di indicazione, ad
esempio, isolando ed escludendo dalla numerazione il commento introduttivo, assegnando uno
statuto speciale all'indicazione di turno (es.: <turn id="G001"…) e isolando i commenti. Vi è infine
il problema di evidenziare le sovrapposizioni, indicando esattamente quali parole di un turno si
sovrappongono con quali del turno precedente e successivo. Per ottenere questo genere di
tokenizzazione occorre un programma specifico che sappia riconoscere i simboli usati dai
trascrittori per ogni specifico caso. Un file così ripulito può essere annotato anche con il sistema dei
tags compresenti (vedi AVIP), anche se sincronizzare le operazioni automatiche e quelle manuali
non è semplice.
4. Procedura effettiva
4.1. Tokenizzazione
L'unità di Vercelli ha ricevuto dall'Università di Venezia i file parzialmente ripuliti e tokenizzati
automaticamente con un programma di tipo generale. Per cui il brano sopra riportato prende la
forma:
<orthotranscription id="a03_p"> <turn id="G001">
<w id=" w_13279 " case="cap"> G001 </w> <w id=" w_13280 " case="cap"> Vai </w> <w id=" w_13281 " case="punt"> , </w> <w id=" w_13282 " case="punt"> { </w> <w id=" w_13283 " case="low"> allora </w> <w id=" w_13284 " case="low"> senti </w> <w id=" w_13285 " case="punt"> } </w> <w id=" w_13286 " case="cap"> Sae </w> <w id=" w_13287 " case="punt"> '.' </w> </turn>
<turn id="F002">
<w id=" w_13289 " case="cap"> Per </w> <w id=" w_13290 " case="low"> arivare </w> <w id=" w_13291 " case="low"> alla </w> <w id=" w_13292 " case="low"> valle </w> <w id=" w_13293 " case="low"> limpida </w> <w id=" w_13294 " case="punt"> '.' </w> </turn> <turn id="G003"> <w id=" w_13295 " case="cap"> G003 </w> <w id=" w_13296 " case="cap"> Mh </w> <w id=" w_13297 " case="punt"> , </w> <w id=" w_13298 " case="punt"> { </w> <w id=" w_13299 " case="low"> la </w> <w id=" w_13300 " case="low"> strada </w> <w id=" w_13301 " case="punt"> } </w> <w id=" w_13302 " case="low"> okay </w> <w id=" w_13303 " case="punt"> '.' </w> </turn>
<turn id="F004">
<w id=" w_13304 " case="cap"> F004 </w> <w id=" w_13305 " case="cap"> Che </w> <w id=" w_13306 " case="low"> devo </w> <w id=" w_13307 " case="low"> fare </w> <w id=" w_13308 " case="punt"> '.' </w> </turn> <turn id="G005"> <w id=" w_13309 " case="cap"> G005 </w> <w id=" w_13310 " case="cap"> Mh </w> <w id=" w_13311 " case="punt"> , </w> <w id=" w_13312 " case="low"> allora </w> <w id=" w_13313 " case="punt"> , </w> <w id=" w_13314 " case="low"> parti </w> <w id=" w_13315 " case="punt"> , </w> <w id=" w_13316 " case="low"> ce </w> <w id=" w_13317 " case="low"> l </w> <w id=" w_13318 " case="low"> hai </w> <w id=" w_13319 " case="low"> il </w> <w id=" w_13320 " case="low"> colibri </w> <w id=" w_13321 " case="punt"> , </w> <w id=" w_13322 " case="low"> no </w> <w id=" w_13323 " case="punt"> ? </w> </turn> <turn id="F006"> <w id=" w_13324 " case="cap"> F006 </w> <w id=" w_13325 " case="cap"> Si </w> <w id=" w_13326 " case="punt"> '.' </w> </turn> <turn id="G007"> <w id=" w_13327 " case="cap"> G007 </w> <w id=" w_13328 " case="cap"> Mh </w> <w id=" w_13329 " case="punt"> , </w> <w id=" w_13330 " case="low"> allora </w> <w id=" w_13331 " case="punt"> , </w> <w id=" w_13332 " case="low"> da </w> <w id=" w_13333 " case="low"> li </w> <w id=" w_13334 " case="punt"> ... </w> </turn>
<turn id="F008"> <w id=" w_13335 " case="cap"> F008 </w> <w id=" w_13336 " case="cap"> Mh </w> <w id=" w_13337 " case="punt"> '.' </w> </turn> <turn id="G009"> <w id=" w_13338 " case="cap"> G009 </w> <w id=" w_13339 " case="cap"> Vai </w> <w id=" w_13340 " case="low"> un </w> <w id=" w_13341 " case="low"> pochino </w> <w id=" w_13342 " case="low"> in </w> <w id=" w_13343 " case="low"> su </w> <w id=" w_13344 " case="punt"> '.' </w> </turn>
I caratteri salienti di questa tokenizzazione sono:
- i contatori di turno (G00n, F00m) sono trattati come parole
- i segni d'interpunzione, che nell'annotazione API erano stati soppressi, vengono contati come
parole ed evidenziati come case="punt"
- i commenti sono stati soppressi
- le sovrapposizioni sono risolte sovrapponendo fisicamente i segmenti, al caso usando le parentesi
per segnalare le inclusioni.
4.2. Informazioni automatizzate
Su questo file l'Università di Venezia ha prodotto un'annotazione automatica, come segue:
<mword_file id="api.a03_p"><mw id="mw_0" pos="I" sfeats="turn" href="a03_p.xml#id(w_13279)"> G001</mw> <mw id="mw_1" pos="V" mfeats="KL2s" lemma="andare" sfeats="vin" sems="intr" href="a03_p.xml#id(w_13280)"> Vai</mw>
<mw id="mw_2" pos="PU" sfeats="punt" href="a03_p.xml#id(w_13281)"> ,</mw> <mw id="mw_3" pos="PU" sfeats="par" href="a03_p.xml#id(w_13282)"> <</mw> <mw id="mw_4" pos="C" mfeats="NN" lemma="allora" sfeats="congf" sems="sum" href="a03_p.xml#id(w_13283)"> allora</mw>
<mw id="mw_5" pos="V" mfeats="KL2s" lemma="sentire" sfeats="vin" sems="intr" href="a03_p.xml#id(w_13284)"> senti</mw>
<mw id="mw_6" pos="PU" sfeats="par" href="a03_p.xml#id(w_13285)"> ></mw> <mw id="mw_7" pos="N" mfeats="ms" lemma="Saè" sfeats="nh" sems="hum" href="a03_p.xml#id(w_13286)"> Saè</mw>
<mw id="mw_8" pos="PU" sfeats="punto" href="a03_p.xml#id(w_13287)"> .</mw> <mw id="mw_9" pos="I" sfeats="turn" href="a03_p.xml#id(w_13288)"> F002</mw> <mw id="mw_10" pos="P" sfeats="p" href="a03_p.xml#id(w_13289)"> Per</mw> <mw id="mw_11" pos="V" mfeats="FL" lemma="arrivare" sfeats="viin" sems="intr" href="a03_p.xml#id(w_13290)"> arivare</mw>
<mw id="mw_12" pos="P" mfeats="fs" lemma="a" sfeats="part" sems="def" href="a03_p.xml#id(w_13291)"> alla</mw>
<mw id="mw_13" pos="N" mfeats="fs" lemma="valle" sfeats="n" sems="com" href="a03_p.xml#id(w_13292)"> valle</mw>
<mw id="mw_14" pos="A" mfeats="fs" lemma="limpido" sfeats="ag" href="a03_p.xml#id(w_13293)"> limpida</mw>
<mw id="mw_15" pos="PU" sfeats="punto" href="a03_p.xml#id(w_13294)"> .</mw> <mw id="mw_16" pos="I" sfeats="turn" href="a03_p.xml#id(w_13295)"> G003</mw> <mw id="mw_17" pos="I" mfeats="NN" lemma="mh" sfeats="intj"
href="a03_p.xml#id(w_13296)"> Mh</mw>
<mw id="mw_18" pos="PU" sfeats="punt" href="a03_p.xml#id(w_13297)"> ,</mw> <mw id="mw_19" pos="PU" sfeats="par" href="a03_p.xml#id(w_13298)"> <</mw>
<mw id="mw_20" pos="D" mfeats="fs" lemma="il" sfeats="art" sems="def" href="a03_p.xml#id(w_13299)"> la</mw>
<mw id="mw_21" pos="N" mfeats="fs" lemma="strada" sfeats="n" sems="com" href="a03_p.xml#id(w_13300)"> strada</mw>
<mw id="mw_22" pos="PU" sfeats="par" href="a03_p.xml#id(w_13301)"> ></mw> <mw id="mw_23" pos="I" mfeats="NN" lemma="okay" sfeats="intj"
href="a03_p.xml#id(w_13302)"> okay</mw>
<mw id="mw_24" pos="PU" sfeats="punto" href="a03_p.xml#id(w_13303)"> .</mw> <mw id="mw_25" pos="I" sfeats="turn" href="a03_p.xml#id(w_13304)"> F004</mw> <mw id="mw_26" pos="W" mfeats="NN" lemma="che" sfeats="rel"
href="a03_p.xml#id(w_13305)"> Che</mw>
<mw id="mw_27" pos="V" mfeats="KL1s" lemma="dovere" sfeats="vsupp" sems="tr" href="a03_p.xml#id(w_13306)"> devo</mw>
<mw id="mw_28" pos="V" mfeats="FL" lemma="fare" sfeats="vit" sems="tr" href="a03_p.xml#id(w_13307)"> fare</mw>
<mw id="mw_29" pos="PU" sfeats="punto" href="a03_p.xml#id(w_13308)"> .</mw> <mw id="mw_30" pos="I" sfeats="turn" href="a03_p.xml#id(w_13309)"> G005</mw> <mw id="mw_31" pos="I" mfeats="NN" lemma="mh" sfeats="intj"
href="a03_p.xml#id(w_13310)"> Mh</mw>
<mw id="mw_32" pos="PU" sfeats="punt" href="a03_p.xml#id(w_13311)"> ,</mw> <mw id="mw_33" pos="C" mfeats="NN" lemma="allora" sfeats="congf" sems="sum" href="a03_p.xml#id(w_13312)"> allora</mw>
<mw id="mw_34" pos="PU" sfeats="punt" href="a03_p.xml#id(w_13313)"> ,</mw> <mw id="mw_35" pos="V" mfeats="ML2s" lemma="partire" sfeats="virin" sems="intr" href="a03_p.xml#id(w_13314)"> parti</mw>
<mw id="mw_36" pos="PU" sfeats="punt" href="a03_p.xml#id(w_13315)"> ,</mw> <mw id="mw_37" pos="E" mfeats="1mfp" lemma="ce" sfeats="clitdat" sems="dat" href="a03_p.xml#id(w_13316)"> ce</mw>
<mw id="mw_38" pos="E" mfeats="3mfs" lemma="l" sfeats="clitac" sems="acc" href="a03_p.xml#id(w_13317)"> l</mw>
<mw id="mw_39" pos="V" mfeats="KL2s" lemma="avere" sfeats="vc" sems="cop" href="a03_p.xml#id(w_13318)"> hai</mw>
<mw id="mw_40" pos="D" mfeats="ms" lemma="il" sfeats="art" sems="def" href="a03_p.xml#id(w_13319)"> il</mw>
<mw id="mw_41" pos="N" mfeats="m" lemma="colibrì" sfeats="n" sems="invar" href="a03_p.xml#id(w_13320)"> colibrì</mw>
<mw id="mw_42" pos="PU" sfeats="punt" href="a03_p.xml#id(w_13321)"> ,</mw> <mw id="mw_43" pos="I" mfeats="NN" lemma="no" sfeats="intj"
href="a03_p.xml#id(w_13322)"> no</mw>
<mw id="mw_44" pos="PU" sfeats="puntint" href="a03_p.xml#id(w_13323)"> ?</mw> <mw id="mw_45" pos="I" sfeats="turn" href="a03_p.xml#id(w_13324)"> F006</mw> <mw id="mw_46" pos="I" mfeats="NN" lemma="sì" sfeats="intj"
href="a03_p.xml#id(w_13325)"> Sì</mw>
<mw id="mw_47" pos="PU" sfeats="punto" href="a03_p.xml#id(w_13326)"> .</mw> <mw id="mw_48" pos="I" sfeats="turn" href="a03_p.xml#id(w_13327)"> G007</mw> <mw id="mw_49" pos="I" mfeats="NN" lemma="mh" sfeats="intj"
href="a03_p.xml#id(w_13328)"> Mh</mw>
<mw id="mw_50" pos="PU" sfeats="punt" href="a03_p.xml#id(w_13329)"> ,</mw> <mw id="mw_51" pos="C" mfeats="NN" lemma="allora" sfeats="congf" sems="sum" href="a03_p.xml#id(w_13330)"> allora</mw>
<mw id="mw_52" pos="PU" sfeats="punt" href="a03_p.xml#id(w_13331)"> ,</mw> <mw id="mw_53" pos="P" sfeats="pd" href="a03_p.xml#id(w_13332)"> da</mw> <mw id="mw_54" pos="B" mfeats="NN" lemma="lì" sfeats="avv" sems="l" href="a03_p.xml#id(w_13333)"> lì</mw>
<mw id="mw_55" pos="PU" sfeats="da_riempire" href="a03_p.xml#id(w_13334)"> ...</mw>
<mw id="mw_56" pos="I" sfeats="turn" href="a03_p.xml#id(w_13335)"> F008</mw> <mw id="mw_57" pos="I" mfeats="NN" lemma="mh" sfeats="intj"
href="a03_p.xml#id(w_13336)"> Mh</mw>
<mw id="mw_58" pos="PU" sfeats="punto" href="a03_p.xml#id(w_13337)"> .</mw> <mw id="mw_59" pos="I" sfeats="turn" href="a03_p.xml#id(w_13338)"> G009</mw> <mw id="mw_60" pos="V" mfeats="KL2s" lemma="andare" sfeats="vin" sems="intr" href="a03_p.xml#id(w_13339)"> Vai</mw>
<mw id="mw_61" pos="D" mfeats="ms" lemma="un" sfeats="art" sems="ind" href="a03_p.xml#id(w_13340)"> un</mw>
<mw id="mw_62" pos="A" mfeats="ms" lemma="pochino" sfeats="ag" href="a03_p.xml#id(w_13341)"> pochino</mw>
<mw id="mw_63" pos="P" sfeats="p" href="a03_p.xml#id(w_13342)"> in</mw> <mw id="mw_64" pos="P" sfeats="p" href="a03_p.xml#id(w_13343)"> su</mw> <mw id="mw_65" pos="PU" sfeats="punto" href="a03_p.xml#id(w_13344)"> .</mw>