UNIVERSITÀ DEGLI STUDI DI TRIESTE
Dipartimento di Ingegneria e Architettura
Corso di Studi in Ingegneria informatica
Progetto e realizzazione di un'interfaccia
web interattiva per un sistema di
generazione automatica di espressioni
regolari
Tesi di Laurea Magistrale
Laureando:
Pieredoardo GABUTTI
Relatore:
prof. Alberto BARTOLI
Correlatore:
prof. Eric MEDVET
_____________________________________
ANNO ACCADEMICO 2017-2018
1
Sommario
Introduzione 4
Analisi del problema 6
Istanza del problema 6
Procedura iterativa 7
Risposta ad una query 8
Progettazione del sistema 9
Fase di estrazione 9
Criterio della F-measure 9
Fase di selezione query 10
Tokenizzazione del testo 11
Uncertainty sampling 12
Fase di risposta query 12
Descrizione dell’interfaccia 13
Aspetto dell’interfaccia 13
Descrizione dei componenti 15
Pannello estrattori 15
Legenda 16
Timer 17
Istruzioni di utilizzo 17
Procedura iterativa 17
Rispondere ad una query 17
Conclusione della ricerca 18
Documentazione 19
Architettura dell’applicazione 19
Codice importato 20
Tipi di oggetti definiti 20
Substring 20
Extraction 20
Extractor 20
Variabili principali definite 21
Text 21
Extractors 21
Queries 21
Desired 21
Undesired 21
Rgx 21
2
To show 21
Funzioni principali definite 22
First selection 22
Stub iterative step 22
Ready extractors 23
Create queries 23
Select extractor 23
Mark substrings 23
Yes 23
No 24
Edit 24
Find query 24
Selection reset 24
Cambiare il back end 24
Esperimenti 25
Panoramica 25
Testi e utenti 25
Risultati analizzati 27
Considerazioni sui risultati 29
Comportamenti degli utenti 31
Tabelle e grafici di approfondimento 32
Conclusioni 38
Bibliografia 39
3
Introduzione
L’estrazione da un documento di frammenti di testo aventi in comune un ​pattern ​specificato
da un utente è un problema pratico molto comune nell’informatica. Per esempio, i programmi di
editing e di visualizzazione di testi e i browser web permettono la ricerca di una determinata parola o
sezione di testo specificata dall’utente, con la possibilità di aggiungere alcuni vincoli (caratteri
speciali, ​case-insensitive​…). Strumenti di questo genere sono molto utili ed immediati da utilizzare,
però non sono in grado di estrarre frammenti che pur avendo un pattern comune sono differenti, né
sono in grado di estrarre segmenti per i quali l’utente non è in grado di descrivere esattamente il
pattern ma ne possa solo fornire ​esempi​. Il primo dei problemi appena descritti può essere risolto
utilizzando un’espressione regolare che descriva il pattern che le estrazioni desiderate devono seguire,
mentre il secondo problema è oggetto del presente lavoro di tesi.
Lo scopo di questa tesi consiste nella realizzazione di un’interfaccia web interattiva in grado
di selezionare espressioni regolari da un insieme predefinito, sulla base di esempi di estrazioni
desiderate e non desiderate fornite da un utente. L’interfaccia è integrata con un back end che realizza
una forma di ​active learning​: le espressioni regolari disponibili (più di 3700) sono le possibili
soluzioni ed il back end costruisce delle interrogazioni da sottoporre all’utente al fine di raccogliere
informazioni utili per la scelta della soluzione migliore. L’interfaccia deve essere semplice da
utilizzare e l’utente deve poterne intuire rapidamente il modo di utilizzo, riuscendo a trovare una
soluzione che lo soddisfi il più velocemente possibile e con meno interazioni possibili.
L’ambiente in cui si sono svolti la progettazione e la realizzazione è stato il ​Machine Learning
Lab​ dell’università di Trieste, il quale ha anche fornito materiale utile ai fini della realizzazione degli
algoritmi di selezione delle espressioni regolari e di gestione delle interazioni fra l’interfaccia e
l’utente, nonché gli insiemi di espressioni regolari e di testi da utilizzare in fase di testing e
sperimentazione.
L’interfaccia è stata realizzata in modo da essere composta dal solo lato client, contenente un
front end incaricato di scambiare le informazioni a disposizione con l’utente e un back end che si
occupa della selezione delle espressioni regolari e delle gestione delle informazioni ricevute o da
mandare all’utente. L’applicazione è stata progettata in modo tale che il back end possa essere
sostituito con un qualsiasi altro codice che si occupi di gestire tali incarichi. I linguaggi di
programmazione utilizzati sono stati HTML, CSS e Javascript, con l’aiuto dei framework di Bootstrap
e AngularJS.
L’approccio utilizzato per questa tesi è stato suddiviso in più fasi consecutive, ognuna di esse
è stata descritta in un capitolo separato e sono le seguenti:
1) Analisi del problema: viene definita un’istanza del problema, i suoi input e l’output
desiderato. Viene inoltre descritta sommariamente la procedura iterativa e le variabili
interne necessarie per arrivare alla soluzione. Infine viene introdotto il concetto di
query​ generata dall’interfaccia per l’utente e le risposte che l’utente può fornire ad
una di esse.
4
2) Progettazione del sistema: facendo riferimento a risultati già ottenuti in [1,2,3],
vengono definite nel dettaglio le varie fasi della procedura iterativa di estrazione,
selezione query e risposta a query, oltre ai criteri di ​f-measure​, ​tokenizzazione​ e
uncertainty sampling​ utilizzati all’interno di queste fasi.
3) Descrizione dell’interfaccia: viene descritto l’aspetto grafico dell’interfaccia e il
funzionamento di tutti i componenti realizzati per la stessa. Vengono inoltre fornite
delle istruzioni per l’esecuzione corretta di una ricerca.
4) Documentazione: viene fornita una descrizione dell’architettura con cui è stata
realizzata l’applicazione e la definizione delle variabili e delle funzioni principali
create per la stessa. Si può trovare anche una spiegazione su come sostituire l’attuale
back end di ​stub​ con altro codice scritto esternamente.
5) Esperimenti: vengono descritti gli esperimenti effettuati per testare le funzionalità
dell’interfaccia ed analizzati i risultati ottenuti alla fine dei test.
Il capitolo Conclusioni, infine, contiene le considerazioni finali sul lavoro svolto.
5
Analisi del problema
Il problema analizzato da questa tesi consiste nel trovare frammenti di testo che siano coerenti
con quelli forniti dall’utente come esempi. La comunicazione di informazioni tra utente e applicazione
avviene tramite interazioni con un’interfaccia grafica, che si aggiorna costantemente ad ogni nuova
informazione ricevuta. Nella formulazione delle definizioni ci si riferirà ai frammenti di testo
desiderati dall’utente come sottostringhe, mentre quelli trovati dall’applicazione saranno chiamati
estrazioni.
Istanza del problema
Un’istanza del problema è definita da una stringa , un insieme (ideale) di sottostringhe dis X*
e una sottostringa . Tutte le sottostringhe sono descritte tramite i loro indici di inizio es x0
m ∈ X*
fine all’interno di , mentre le estrazioni sono sottostringhe a cui viene associato un valores
chiamato confidenza.c ∈ ℜ : 0 ≤ c ≤ 1
L’input di un’istanza del problema è dato dalla coppia . La stringa contiene il testos, )( x0
m s
dal quale l’utente sceglie gli esempi da fornire all’applicazione e dal quale l’applicazione ricava le
estrazioni da mostrare all’utente. La sottostringa corrisponde alla prima fra quelle desideratex0
m
dall’utente che viene fornita all’interfaccia.
L’insieme rappresenta l’insieme di sottostringhe del testo che l’utente si aspetta diX*
ricevere, si tratta dunque dell’output ideale di un’istanza del problema ed in un caso d’uso effettivo è
inizialmente ignoto sia all’utente che all’applicazione.
Figura 1: Schema di un’istanza del problema.
6
Procedura iterativa
Il sistema attraverso cui elaborare l’istanza del problema consiste nella procedura iterativa
descritta di seguito e riassunta nello schema in figura 2.
Figura 2: Schema di un passo della procedura iterativa del sistema. Il riquadro con sfondo grigio corrisponde ad
un’azione effettuata dall’utente, le altre vengono completate dal sistema.
7
Si definiscono gli insiemi di sottostringhe e come gli insiemi rispettivamente delleXm
Xu
sottostringhe etichettate dall’utente come estrazioni desiderate e come non desiderate)(xm
∈ X*
fornite all’interfaccia fino a una certa iterazione. All’inizio della prima iterazione avremo∈ )(xu
/ X*
e .x }Xm
= { 0
m }Xu
= {
La procedura iterativa è poi composta dai seguenti passaggi:
1) (Estrazione) Vengono appresi estrattori dall’input della singola iterazionen ≥ 1 E
ed applicati ad per ottenere i relativi insiemi di estrazioni . Tutti gli estrattoris, , )( Xm
Xu
s X
vengono ordinati per un criterio di confidenza (descritto nel capitolo dedicato allac
progettazione) e quelli con il punteggio più elevato vengono mostrati all’utente con le relative
estrazioni dal testo tramite interfaccia grafica.
2) (Selezione query) Gli insiemi di estrazioni degli estrattori vengono utilizzati perX E
generare una singola estrazione chiamata ​query​ che viene poi sottomessa al giudizioxq
dell’utente. Il criterio con cui viene selezionata tale query è descritto nel capitolo dedicato alla
progettazione.
3) (Risposta a query) L’utente ispeziona la query e ne fornisce una risposta al sistema, chexq
sostituisce di conseguenza gli insiemi e con gli insiemi aggiornati e . LeXm
Xu
Xq
m
Xu
q
diverse possibili risposte ad una query e i conseguenti aggiornamenti del sistema sono
descritti nella prossima sezione di questo capitolo e in quello dedicato alla progettazione.
Questi tre passaggi vengono ripetuti fino a che l’utente non è soddisfatto di uno degli
estrattori ricevuti, il che di solito avviene quando il relativo insieme di estrazioni coincide il piùE X
possibile all’insieme di sottostringhe .X*
Risposta ad una query
Ogni query può essere classificata dall’utente in una delle seguenti categorie:xq
a) La sottostringa contenuta in corrisponde esattamente ad una di quelle desideratexq
dall’utente .x )( q ∈ X*
b) La sottostringa contenuta in non corrisponde a nessuna di quelle desiderate dall’utentexq
.x ∈ )( q / X*
c) L’utente desidera modificare la sottostringa contenuta in liberamente secondo le suexq
necessità.
Le risposte di tipo (a) e (b) sono chiamate per definizione risposte binarie, le risposte di tipo
(c) vengono definite risposte ​edit​. L’utente può fornire una risposta binaria semplicemente segnalando
all’interfaccia se la sottostringa di appartiene o meno al suo insieme di sottostringhe desideratexq
, mentre per una risposta di tipo edit l’interfaccia fornisce all’utente la possibilità di modificare ilX*
contenuto della query prima di fornire una nuova risposta.
8
Progettazione del sistema
Fase di estrazione
Gli estrattori utilizzati in questo esperimento provengono dal materiale a disposizione del
Machine Learning Lab dell’Università di Trieste, che consiste in un insieme di 3721 espressioni
regolari. Tali estrattori sono stati applicati su diversi testi di prova (i quali sono descritti nel capitolo
dedicato agli esperimenti) per verificarne il tempo di esecuzione per una ricerca completa. Sono state
utilizzate solo le espressioni regolari con tempo di esecuzione su ogni testo di prova, per un00ms≤ 5
totale di 3058 elementi.
La prima fase della procedura iterativa dell’applicazione è chiamata fase di estrazione e
consiste nell’applicazione di un insieme di estrattori sul testo in modo da ottenere per ognis
estrattore il relativo insieme di estrazioni .E X
Una volta che tutte le espressioni regolari sono state applicate al testo e sono stati generati i
rispettivi insiemi di estrazioni, l’applicazione si occupa di ordinare l’insieme di estrattori secondo il
criterio della ​F-measure​ per punteggi decrescenti, in caso di valori coincidenti gli estrattori vengono
ordinati per lunghezza crescente della relativa espressione regolare (complessità).
Criterio della F-measure
Il criterio utilizzato per calcolare la confidenza con cui un estrattore asseconda gli esempiE
forniti dall’utente è chiamato ​F-measure​, il cui punteggio è calcolato usando come informazioni le
sottostringhe inserite in e . E’ importante sottolineare che si assume che e nonXm
Xu
Xm
Xu
contengano errori, cioè rappresentino fedelmente ciò che l’utente desidera e non desidera,
rispettivamente, estrarre dal testo. Negli esperimenti che saranno descritti successivamente, gli indici
di prestazione qui descritti saranno calcolati con riferimento non a e ma ai valori ottenuti daXm
Xu
un estrattore ideale già disponibile.X*
Per poter calcolare la F-measure di un estrattore è necessario prima ricavare i valori di
precision​ e ​recall​ con le seguenti formule:
recisionp =
|{true positive}|
|{true positive}| +|{false positive}|
ecallr =
|{true positive}|
|{true positive}|+|{false negative}|
Le estrazioni di tipo ​true positive​ sono quelle la cui sottostringa estratta dal testo è
esattamente presente anche nell’insieme . Le estrazioni di tipo ​false positive​ sono quelle la cuiXm
sottostringa si sovrappone in qualche modo a sottostringhe presenti in senza però coincidere conXm
9
nessuna di esse oppure la cui sottostringa si sovrappone o coincide a sottostringhe presenti in . LeXu
estrazioni di tipo ​false negative​ sono quelle la cui sottostringa è presente in ma non lo è inXm
nessuna delle estrazioni di . I delimitatori indicano che ci si riferisce alla cardinalità delE | }{ · |
relativo insieme di estrazioni.
Una volta ricavati i valori di precision e recall, si può ricavare la F-measure come media
armonica di questi due risultati:
F = 2 ·
precision · recall
precision + recall
Fase di selezione query
La seconda fase della procedura iterativa consiste nel costruire una possibile estrazione dal
testo , chiamata ​query​, da mostrare all’utente per ottenerne una risposta.xq
Questa fase è suddivisa in due sotto-fasi differenti di cui viene fornita la descrizione già formulata in
[1]:
Figura 3: Schema della fase di selezione query. Il con valore assegnato più vicino allo 0 vieneokent c
selezionato come .xq
10
1) Una fase di ​tokenizzazione​ del testo, nella quale viene partizionato in pezzi chiamati ​tokens
separati da dei delimitatori i quali vengono determinati sfruttando come informazioni le
sottostringhe presenti in .Xm
2) Una fase di classificazione dei token di testo ottenuti, assegnando un punteggio a ciascunoc
di essi mediante il criterio di ​uncertainty sampling​, che sfrutta come informazioni gli insiemi
di estrazioni dei primi estrattori ricavati e ordinati durante la fase di estrazione.X 0n = 1 E
Questo punteggio definisce il grado di incertezza sull'estrazione o meno del token da parte
degli estrattori selezionati.
A questo punto viene selezionato come query il token con punteggio assegnato il più vicino
possibile allo 0 (quindi con il grado di incertezza più elevato) che non si sovrapponga in alcun modo a
nessuna sottostringa di o .Xm
Xu
Tokenizzazione del testo
Figura 4: esempio di tokenizzazione del testo.
La procedura di ​tokenizzazione ​[1] è necessaria perché non si può affermare con certezza
assoluta che i migliori token candidabili come query si ottengano spezzando il testo semplicemente in
parole, linee, frasi o costrutti di questo tipo. La suddivisione deve essere fatta usando delimitatori
particolari e adatti all’istanza del problema in esame.
L’obiettivo di questa procedura è ricavare un insieme di caratteri che agiscano daS
separatori fra i token del testo. Per fare ciò si costruisce un insieme che includa ogni carattere cheS0
sia immediatamente precedente o successivo nel testo rispetto a ciascuna sottostringa contenuta in Xm
ad una certa iterazione. Successivamente si ordina in ordine decrescente per numero di apparizioniS0
di ogni singolo carattere. A questo punto si iterano i passi successivi partendo da : (I) sii = 1
costruisce l’insieme dei primi caratteri di ; (II) si costruisce l’insieme dei token ottenutiSi i S0 Ti
applicando in i delimitatori contenuti in . Infine si definisce dove è l’insieme ches Si =S : Si* Si*
contiene il maggior numero di token che siano anche sottostringhe presenti in , quindiXm
. In caso di pareggio, viene selezionato il valore di più piccolo.rg max |T |i* = a i i ⋂ Xm
i
11
Uncertainty sampling
Il criterio di ​uncertainty sampling​[1] dà la possibilità di classificare i token ricavati dal testo
in base al livello di incertezza che hanno gli estrattori di estrarre o meno quel determinato token.
Il metodo per assegnare il punteggio al token è il seguente: inizialmente ad ogni token vienet
associato un punteggio , dopodiché per ognuno degli estrattori selezionati si verifica se ilc = 0 n E
token è contenuto o meno nell’insieme di estrazioni relativo . Se il token coincide esattamente conX
una delle estrazioni contenute in il punteggio del token viene incrementato di 1 , altrimentiX t )( ∈ X
viene decrementato di 1 . Infine si ricava il punteggio medio dividendo il valore ottenuto dit ∈ )( / X
per ; in questo modo si ottiene un valore .c n − 1 ≤ c ≤ 1
Il valore assoluto fornisce il livello di incertezza ricercato per il token . Più questo valorec|| t
è vicino allo zero, più il grado di incertezza è elevato e il token è adeguato per essere selezionato
come query .xq
Fase di risposta query
L’ultima fase della procedura iterativa consiste nel dare la possibilità all’utente di fornire una
risposta di tipo yes, no oppure edit alla query selezionata ed aggiornare gli insiemi e dixq Xm
Xu
conseguenza.
Una risposta di tipo binario (yes/no) viene risolta semplicemente aggiungendo il contenuto di
in in caso di risposta positiva, in in caso di risposta negativa.xq Xm
Xu
Una risposta di tipo edit, invece, non aggiorna in alcun modo il contenuto di e maXm
Xu
concede all’utente di modificare il contenuto di selezionando direttamente dal testo una qualsiasixq
nuova sottostringa. Questa nuova sottostringa viene automaticamente selezionata come query nellaxq
successiva iterazione della procedura, saltando di fatto sia le fasi di estrazione (superflua dato che non
ci sono nuove informazioni in e ) che di selezione query (in quanto la query è già stataXm
Xu
selezionata). L’utente a questo punto ha la possibilità di rispondere alla così generata sia con unaxq
risposta binaria che nuovamente con una di tipo edit.
12
Descrizione dell’interfaccia
L’interfaccia web realizzata si presenta come un’unica pagina html dinamica accessibile
tramite il browser web. In sede di testing è stato utilizzato Google Chrome come browser.
Aspetto dell’interfaccia
Dopo l’inizializzazione l’interfaccia si presenta con un elenco puntato che consente all’utente
di scegliere il testo da un insieme fissato e da un pulsante che consente di confermare la proprias
scelta (Continue). Per ogni punto dell’elenco è descritto il tipo di testo e l’incarico dell’utente da
completare per quel determinato testo ai fini della fase sperimentale.
Figura 5: Elenco di selezione testo dell’interfaccia.
13
Una volta confermato il testo, l’elenco viene rimosso e vengono caricati tutti i componenti
principali della pagina. Il titolo in alto descrive l’incarico da completare per il testo selezionato, il
quale viene a sua volta mostrato in una casella dotata di barra di scorrimento verticale (se richiesta) al
centro della pagina.
Figura 6: Come si presenta la pagina subito dopo la conferma del testo.
A sinistra del testo troviamo il pannello degli estrattori e un pulsante per tornare all’elenco di
selezione testo (Change text). A destra del testo ci sono invece i pannelli del timer e della legenda. La
descrizione di ogni componente dell’interfaccia è presente nella sezione successiva di questo capitolo.
Per iniziare la procedura iterativa l’utente deve selezionare con il mouse la prima estrazione
desiderata all’interno di . A questo punto in un qualsiasi istante della procedura iterativax0
m s
l’interfaccia si presenterà come qualcosa di simile a quello che si vede in figura 7.
Figura 7: Come si presenta la pagina dopo aver avviato la procedura iterativa.
14
I pannelli degli estrattori e del timer vengono riempiti con del contenuto e sul testo compaiono
delle evidenziazioni e sottolineature in diversi colori, definiti dalla legenda. Il pulsante Change text a
sinistra viene sostituito da un pulsante per annullare la corrente procedura iterativa (Reset selection) e
da uno che permette di visualizzare la query in alto sullo schermo (Find query). A destra compare un
pulsante che permette all’utente di affermare di essere soddisfatto delle attuali estrazioni dal testo (I’m
done).
Descrizione dei componenti
Pannello estrattori
Figura 8: Il pannello degli estrattori.
Il pannello degli estrattori contiene i primi estrattori selezionati durante l’attuale0n = 1
iterazione della procedura in corso. Se non è stata ancora avviata nessuna procedura iterativa, o se è
stata annullata, il pannello risulta vuoto. L’utente può scegliere di cliccare col tasto sinistro del mouse
su uno qualsiasi degli estrattori elencati per visualizzarne le relative estrazioni direttamente sul testo,
evidenziate come descritto in legenda.
15
Legenda
Figura 9: La legenda.
La legenda permette di interpretare il significato delle varie evidenziazioni e sottolineature sul
testo. Di seguito la descrizione di ogni diversa selezione:
Selezioni dell’utente:
- Desired extraction: testo, evidenziazione e sottolineatura verdi, indica una sottostringa
appartenente a .Xm
- Undesired extraction: testo, evidenziazione e sottolineatura rossi, indica una sottostringa
appartenente a .Xu
Selezioni automatiche:
- Extraction: evidenziazione verde, indica una estrazione appartenente all’insieme X
dell’estrattore selezionato dall’utente. Se si sovrappone in qualche modo ad una selezioneE
dell’utente viene omessa.
- Query: testo nero, sottolineatura e sopralineatura gialli, indica la query .xq
- Extraction + Query: testo nero, evidenziazione verde, sottolineatura e sopralineatura gialli,
usata quando la query si sovrappone ad un’estrazione automatica.
16
Timer
Figura 10: Il timer.
Il timer viene inizializzato e inizia a scorrere nel momento in cui l’utente ha selezionato la
prima sottostringa desiderata dal testo. Si interrompe nel momento in cui l’utente clicca sulx0
m
pulsante I’m done e si resetta quando l’utente clicca sul pulsante Reset selection.
Istruzioni di utilizzo
L’interfaccia è stata progettata per essere semplice ed intuitiva da utilizzare, e si è cercato di
ridurre al minimo possibile il numero di click del mouse necessari per arrivare all’estrattore corretto in
ogni situazione.
Procedura iterativa
Una volta che è stato scelto il testo, il modo per inizializzare la procedura iterativa è
selezionare da esso una sottostringa che funga da esempio per ciò che l’utente deve trovare. La
selezione si effettua semplicemente evidenziando con il mouse il frammento di testo desiderato.
Quando la procedura iterativa è stata avviata, il modo per fornire ulteriori informazioni
all’interfaccia è rispondendo alla query che viene proposta ad ogni nuova iterazione.
Rispondere ad una query
Per rispondere ad una query, l’utente deve cliccarci sopra con il tasto sinistro del mouse. In
questo modo si aprirà un menù a tendina con tre diverse opzioni, come mostrate in figura 11.
Figura 11: Menù di risposta ad una query.
17
Le opzioni sono le seguenti:
- Yes, I want this: l’utente dovrebbe fornire questa risposta quando il testo della query
corrisponde ad una sottostringa desiderata, cioè .xq ∈ X*
- No, remove this: l’utente dovrebbe fornire questa risposta quando il testo della query non
corrisponde ad una sottostringa desiderata, cioè .xq ∈ X*
- Edit this query: l’utente dovrebbe fornire questa risposta quando il testo della query
corrisponde solo in parte con quello di una sottostringa desiderata. Può inoltre fornire questa
risposta quando ha intenzione di generare autonomamente la propria query, anche
completamente diversa da quella proposta dall’applicazione.
Quando un utente risponde ad una query con un Yes o un No, la procedura iterativa avanza
automaticamente al passo successivo. In caso di risposta Edit, l’utente ha la possibilità di selezionare
una sottostringa qualunque dal testo, la quale diventa automaticamente il contenuto della query della
successiva iterazione a meno che non si sovrapponga in qualche modo a qualche sottostringa già
etichettata come desiderata o non desiderata.
Conclusione della ricerca
La ricerca si ritiene conclusa quando l’utente clicca sul pulsante I’m done. Questo succede
quando l’utente ritiene che l’estrattore attualmente selezionato estragga (evidenziazioni verdi sul
testo) tutti e solo i frammenti di testo che lui ritiene corretti.
18
Documentazione
L’applicazione web realizzata è composta da un’interfaccia grafica scritta nei linguaggi
HTML e CSS e da funzioni implementate in Javascript. Sono inoltre stati utilizzati i framework di
Bootstrap 3 e AngularJS e la libreria di JQuery per occuparsi dell’aspetto visivo e di dinamicità e
interattività della pagina web.
Architettura dell’applicazione
L’applicazione è dotata di un solo lato client mentre quello server non è presente, è stata
progettata per funzionare come front end per un qualsiasi back end che si occupi di gestire le fasi di
estrazione e selezione query della procedura iterativa.
Il front end è composto dai seguenti componenti:
● La pagina HTML così come è descritta nel capitolo precedente.
● Le variabili necessarie per memorizzare , , , tutti gli con i relativi e .s Xm
Xu
E X xq
● Tutte le funzioni che si occupano di inizializzare, riempire e gestire i componenti descritti nel
capitolo precedente con i contenuti forniti dal back end.
● Una funzione che si occupa di evidenziare sul testo le sottostringhe etichettate dall’utente più
le estrazioni e la query forniti dal back end.
● Una funzione che si occupa di gestire la prima selezione dell’utente .x0
m
● Tutte le funzioni necessarie a inizializzare il menù a tendina delle query ed a gestire le
risposte che l’utente fornisce.
Per fare sì che l’interfaccia funzioni è sufficiente scrivere alcune ulteriori funzioni che
eseguano il compito del back end direttamente all’interno del lato client dell’applicazione. Si può
anche aggiungere un lato server all’applicazione contenente la logica del back end, in questo caso sarà
necessario scrivere nel front end delle funzioni che permettano la comunicazione con il server.
Per avere la possibilità di effettuare degli esperimenti sull’interfaccia è stato implementato un
back end di ​stub​ all’interno del client che gestisce le fasi di estrazione e selezione query come
descritto nel capitolo di progettazione del sistema.
Nelle sezioni successive si trovano maggiori informazioni sulle funzioni e variabili principali
dell’interfaccia.
19
Codice importato
● AngularJS 1.6.6​ - framework di AngularJS.
● JQuery 3.2.1​ - libreria di JQuery.
● Bootstrap 3.3.7​ - framework di Bootstrap 3.
● UI Bootstrap 2.5.0​ - direttive AngularJS per Bootstrap 3.
● Angular-bind-html-compile​ - direttiva angularJS per compilare contenuti dinamici
contenenti direttive.
Tipi di oggetti definiti
Substring
Definizione​: una sottostringa del testo definita dagli indici dei caratteri di inizio e di fine all’internos
del testo stesso.
Proprietà​:
- int start​: indice del primo carattere della sottostringa in .s
- int end​: indice del carattere successivo all’ultimo della sottostringa in .s
Extraction
Definizione​: una estrazione del testo definita dalla sottostringa estratta e da un valore di confidenza.s
Proprietà​:
- Substring substring​: oggetto di tipo ​Substring​ indicante la sottostringa estratta
dal testo.
- float confidence​: numero reale compreso tra -1 e 1 indicante il valore di confidenza
della relativa estrazione.
Extractor
Definizione​: un oggetto che contiene un estrattore, che nel caso di questa interfaccia è un’espressione
regolare, e l’insieme di estrazioni da di quel determinato estrattore.s
Proprietà​:
- RegExp extractor​: estrattore (espressione regolare) eseguito per le estrazioni dal testo.
- Extraction[ ] extractions​: insieme contenente tutte le estrazioni dal testo ottenute
eseguendo l’estrattore (espressione regolare) sul testo.
20
Variabili principali definite
Text
Tipo​: ​String​.
Descrizione​: il testo di un’istanza del problema.s
Extractors
Tipo​: ​Extractor[ ]​.
Descrizione​: insieme di oggetti di tipo ​Extractor​ corrispondenti a (e relativo ) nellaE X
procedura iterativa.
Queries
Tipo​: ​Extraction[ ]​.
Descrizione​: insieme di oggetti di tipo ​Extraction​ corrispondenti a candidati per nellaxq
procedura iterativa.
Desired
Tipo​: ​Substring[ ]​.
Descrizione​: insieme corrispondente a di oggetti di tipo ​Substring​.Xm
Undesired
Tipo​: ​Substring[ ]​.
Descrizione​: insieme corrispondente a di oggetti di tipo ​Substring​.Xu
Rgx
Tipo​: ​RegExp[ ]​.
Descrizione​: variabile creata per lo ​stub​ del back end. Insieme di espressioni regolari utilizzato dallo
stub.
To show
Tipo​: ​String​.
Descrizione​: testo formattato con le dovute evidenziazioni e sottolineature e mostrato sullo schermo
all’utente.
21
Funzioni principali definite
First selection
Input​:
- Substring selection​: oggetto di tipo ​substring​ corrispondente a , lax0
m ∈ X*
prima sottostringa selezionata dall’utente nel testo.
Descrizione​: aggiunge ​selection​ a ​Desired​ ed inizializza la prima iterazione della procedura
iterativa.
Stub iterative step
Input​:
- boolean first step​: variabile ​boolean​ che vale ​true​ quando si vuole eseguire la
prima iterazione della procedura, ​false​ altrimenti.
Descrizione​: funzione creata per lo ​stub​ del back end. Se ​first step == true​, esegue per ogni
espressione regolare presente in ​rgx​ la ricerca di estrazioni dal testo, aggiunge estrattore ed estrazioni
in un oggetto di tipo ​Extractor​ e inserisce tale oggetto in ​Extractors​. Questa procedura viene
eseguita solo alla prima iterazione poiché i risultati di ricerca di ogni espressione regolare dal testo
non cambiano in istanti successivi di tempo. Successivamente esegue le funzioni ​Ready
extractors​, ​Create queries​, ​Select extractor​ con input 0 e ​Find query​.
Figura 12: diagramma di workflow per la funzione ​Stub iterative step​.
22
Ready extractors
Descrizione​: funzione creata per lo ​stub​ del back end. Ordina gli estrattori contenuti in
Extractors​ secondo il criterio di F-measure per valori decrescenti, oppure per confidenza media
delle estrazioni per valori decrescenti (calcolo superfluo in quanto tutte le confidenze delle estrazioni
hanno lo stesso valore, ma aggiunto lo stesso per possibili utilizzi futuri), altrimenti per complessità
degli estrattori (lunghezza dell’espressione regolare) per valori crescenti.
Create queries
Descrizione​: funzione creata per lo ​stub​ del back end. Effettua la tokenizzazione del testo come
descritto nel capitolo dedicato alla progettazione del sistema. Per ogni token generato controlla se
questo è presente in ​Desired​ o ​Undesired​. Se il token non è già contenuto in nessuno dei due
insiemi, ne calcola la confidenza con il criterio di uncertainty sampling e lo aggiunge come oggetto di
tipo Extraction in ​Queries​. Infine ordina ​Queries​ secondo i valori assoluti delle confidenze in
ordine crescente.
Select extractor
Input​:
- int i​: l’indice dell’estrattore da selezionare in ​Extractors​.
Descrizione​: seleziona l’​i​-esimo elemento da ​Extractors​ e ne evidenzia le relative estrazioni in
To show​ chiamando la funzione ​Mark substrings​.
Mark substrings
Descrizione​: Evidenzia ​To show​ con i corretti colori e bordi (elencati nel capitolo di descrizione
dell’interfaccia) tutte le sottostringhe contenute in ​Desired​ e ​Undesired​, tutte le estrazioni
relative all’estrattore selezionato in ​Extractors​ che non si sovrappongono a sottostringhe scelte
dall’utente e la prima estrazione contenuta in ​Queries​. Si occupa anche di creare il menù a tendina
necessario per rispondere alla query e descritto nel capitolo di descrizione dell’interfaccia.
Yes
Input​:
- int start​: l’indice di inizio della sottostringa relativa alla query a cui l’utente ha risposto.
- int end​: l’indice di fine della sottostringa relativa alla query a cui l’utente ha risposto.
Descrizione​: invocata quando l’utente risponde “Yes, I want this” ad una query. Aggiunge in
Desired​ un nuovo oggetto di tipo ​Substring​ di indici ​start​ ed ​end​ e invoca ​Stub
iterative step​ con input ​false​.
23
No
Input​:
- int start​: l’indice di inizio della sottostringa relativa alla query a cui l’utente ha risposto.
- int end​: l’indice di fine della sottostringa relativa alla query a cui l’utente ha risposto.
Descrizione​: invocata quando l’utente risponde “No, remove this” ad una query. Aggiunge in
Undesired​ un nuovo oggetto di tipo ​Substring ​di indici ​start​ ed ​end​ e invoca ​Stub
iterative step​ con input ​false​.
Edit
Descrizione​: Invocata quando l’utente risponde “Edit this query” ad una query, è scomposta in due
fasi differenti. La prima fase cancella tutte le evidenziazioni da ​To show​ e concede all’utente la
possibilità di selezionare da esso una nuova sottostringa. La seconda fase controlla se la sottostringa
selezionata dall’utente non si sovrapponga a nessuna sottostringa contenuta in ​Desired​ o
Undesired​. Se questa condizione è rispettata, aggiunge in cima a ​Queries​ un oggetto di tipo
Extraction​ contenente la sottostringa selezionata ed esegue nuovamente ​Mark substrings​,
altrimenti viene chiesto all’utente di selezionare un’altra sottostringa. Nonostante non venga chiamata
la funzione ​Stub iterative step​, questa esecuzione conduce comunque ad un nuovo passo
della procedura iterativa.
Find query
Descrizione​: mostra sullo schermo l’attuale query evidenziata in ​To show​.
Selection reset
Descrizione​: azzera il contenuto di ​Desired​, ​Undesired​, ​Extractors​ e ​Queries​ e consente
all’utente di inizializzare una nuova istanza del problema partendo dalla prima selezione.
Cambiare il back end
Per realizzare un diverso back end da utilizzare in questa interfaccia, si deve sostituire le
funzioni ​Stub iterative step​, ​Ready extractors​ e ​Create queries​ con le proprie
implementazioni. Tutte le informazioni relative all’istanza di un problema vanno inserite nelle
variabili dell’interfaccia descritte nella sezione apposita di questo capitolo. La variabile ​Queries
può contenere anche più di una query, ma la funzione ​Mark substrings​ evidenzia sul testo
sempre e solo quella meglio classificata disponibile. Se si vuole mostrare le query in un modo o
numero diverso, bisogna scrivere una funzione apposta.
24
Esperimenti
Panoramica
Lo scopo degli esperimenti è verificare l’efficacia e la rapidità dell’applicazione web così
costruita nel trovare tutte e sole le sottostringhe appartenenti all’insieme ideale . Per fare ciò,X*
l’interfaccia è stata affidata ad alcuni utenti per l’utilizzo con l’incarico di trovare da alcuni testi
prefissati dei frammenti che seguono un pattern specifico e fissato in modo univoco per ogni testo.
Per ogni attività di un singolo utente su un singolo testo è stato memorizzato un file di log
contenente informazioni su ogni passo iterativo effettuato riguardo il tempo trascorso, la query
selezionata dall’applicazione, la risposta fornita dall’utente e i valori di ​precision​ e ​recall​ del primo
estrattore classificato dall’applicazione calcolati per ricavare la ​f-measure​ come descritto nel capitolo
relativo alla progettazione del sistema. Alla fine della procedura iterativa viene memorizzata
l’espressione regolare finale selezionata dall’utente.
Testi e utenti
In fase di sperimentazione sono stati utilizzati 6 diversi testi preventivamente selezionati da
un dataset fornito dal Machine Learning Lab dell’Università di Trieste (presenti in [4,5,6]) ed adattati
in modo che per ciascuno di essi l’insieme di sottostringhe ideale contenesse esattamente 25X*
elementi (26 per ​BibTex-Author​). Per ognuno di questi testi è presente una espressione regolare
nell’insieme delle disponibili che estrae le sottostringhe di con valori di ​precision​ e ​recall​ di 1. IX*
testi sono brevemente descritti di seguito. In tabella 1 sono fornite alcune delle informazioni più
importanti relative ai testi descritti. è la lunghezza media di una sottostringa desiderata dal(x )*
estrarre, è il rapporto tra il numero di caratteri estratti e il numero di caratteri totali e è laρ (s)l
lunghezza del testo tagliato e utilizzato per l’applicazione.
Testo l(x )* ρ (s)l
BibTex-Author 15.5 0.17 2423
Bills-Date 10.6 0.02 12484
Email-Phone 13.2 0.04 9385
Log-IP 12.9 0.24 1414
Twitter-Hashtag + Citation 11.2 0.11 3004
Web-URL 52.2 0.04 57268
Tabella 1: Tabella dei testi utilizzabili e di informazioni relative.
25
● BibTex-Author​: Un insieme di entrate bibtex in cui l’incarico è di trovare tutti i nomi
individuali completi all’interno dei campi autore. L’espressione regolare corretta per ottenere
èX*
(?<=author {0,3}= {0,3}{[^n]{0,300}?)([A-Z.{d'"()][A-Z
.a-z{}d'"-,()]*?)(?=(?= and )|(?=},s*[a-z])|n)​.
● Bills-Date​: Un insieme di fatture in cui l’incarico è di trovare tutte le date, che possono avere
diversi formati. L’espressione regolare corretta per ottenere èX*
((?:[12]?d{1,3}s*[-./]s*[012]?ds*[-./]s*[12]?d{1,3})|(?:d{1
,2},s*[A-Z][a-z]+s+[12]d{3})|(?:[A-Z][a-z]+s+d{1,2},s+[12]d{3}))
.
● Email-Phone​: Un insieme di estratti di email in cui l’incarico è di trovare tutti i numeri di
telefono. L’espressione regolare corretta per ottenere èX*
(?<=W|^)((?:[0-9](?: |-|.))?(?:(?[0-9]{3})?|[0-9]{3})(?:|/|
|-|.)?(?:[0-9]{3}(?: |-|.)[0-9]{4}))​.
● Log-IP​: Un insieme di entrate di log per il software di un firewall in cui l’incarico è di trovare
tutti gli indirizzi IP. L’espressione regolare corretta per ottenere èX*
b(?:d{1,3}.){3}d{1,3}b​.
● Twitter-Hashtag+Citation​: Un insieme di post di Twitter in cui l’incarico è di trovare tutti gli
hashtag (​#machinelearning​) e le citazioni (​@MaleLabTs​). L’espressione regolare
corretta per ottenere èX*
(?<=W|^)((?:@[A-Za-z0-9_]+)|(?:#[w]+(?<!#d{0,120})))​.
● Web-URL​: Un insieme di pagine web in HTML in cui l’incarico è di estrarre tutti gli URL.
L’espressione regolare corretta per ottenere èX*
(?<=^|b|W)((?:(https?|s?ftps?|smb|mailto)://)(?:[a-zA-Z0-9][^s:]+@
)?(?:(?:[a-zA-Z0-9-.:]+.[a-zA-Z]{2,3})|(?:[0-9]{1,3}(?:.[0-9]{1,3})
{3}))(?::d{1,5})?(?:[A-Za-z0-9.-$+!*'(),~_+%=&#/?@%;:]*)?(?<![.()=]+)
)​.
Gli esperimenti sono stati affidati ad un gruppo di 13 utenti dotati di diverse competenze in
ambito di espressioni regolari. Ad ognuno di essi è stato spiegato il funzionamento dell’interfaccia e
lasciata libertà di utilizzarla come preferissero per completare ciascuno dei 6 incarichi disponibili.
26
Risultati analizzati
I risultati medi di tutti gli utenti per ciascun testo sono stati raccolti nelle tabelle 2 e 3. La
colonna Punteggio indica la F-measure calcolata rispetto alla ground truth (non rispetto alleX*
annotazioni fornite dall’utente).
Testo Tempo Nr. risposte Tempo per risposta Punteggio
BibTex-Author 1:23 7,5 0:11 80/100
Bills-Date 2:31 13,5 0:11 98/100
Email-Phone 4:24 17 0:16 84/100
Log-IP 0:47 6,5 0:07 100/100
Twitter-Hashtag + Citation 1:19 8 0:10 90/100
Web-URL 2:43 7 0:23 85/100
Tabella 2: Dati raccolti durante l’utilizzo sperimentale dell’interfaccia (parte 1 di 2).
Testo Precision Recall % Yes % No % Edit
BibTex-Author 0,8 0,8 17,8% 64,4% 17,8%
Bills-Date 0,99 0,98 30,1% 58,7% 11,2%
Email-Phone 0,9 0,82 46,6% 25,8% 27,6%
Log-IP 1 1 18,8% 72,9% 8,3%
Twitter-Hashtag +
Citation
0,88 0,9 33,9% 45,3% 20,8%
Web-URL 0,84 0,87 36,3% 34,0% 29,7%
Tabella 3: Dati raccolti durante l’utilizzo sperimentale dell’interfaccia (parte 2 di 2).
In tabella 2 si trovano i dati relativi al tempo medio di un’esecuzione completa della ricerca,
al numero di risposte fornite in media da ogni utente, al tempo medio che passa fra una risposta e la
successiva e al punteggio medio dell’estrattore selezionato alla fine dell’esecuzione. Il punteggio è la
f-measure​ delle estrazioni rispetto all’insieme ideale .X*
In tabella 3 si trovano i dati relativi a ​precision​ e ​recall​ dell’estrattore finale selezionato
dall’utente rispetto all’insieme ideale di sottostringhe e le percentuali di risposte di tipo Yes, no edX*
Edit rispetto al numero totale di risposte fornite.
In figura 13 è presente un grafico rappresentante il rapporto fra tempo trascorso e numero di
risposte fornite durante l’esecuzione di ogni ricerca, mentre la figura 14 mostra un grafico con il
rapporto fra il tempo trascorso e il punteggio ottenuto per ogni ricerca.
27
Figura 13: rapporto tra tempo trascorso in millisecondi e numero di risposte fornite da un utente per ciascun
esperimento compiuto, con annessa linea di tendenza.
Figura 14: Rapporto tra tempo trascorso in millisecondi e punteggio ottenuto per ciascun esperimento compiuto.
28
Considerazioni sui risultati
Considerando i punteggi medi ottenuti dagli utenti i risultati si possono considerare
soddisfacenti, in quanto per ogni testo abbiamo una .easure .8f − m ≥ 0
Il testo ​Log-IP​ ha addirittura ottenuto il punteggio massimo possibile di 1, il che significa che
ogni utente ha individuato l’estrattore corretto al termine dell’esecuzione. Una delle ragioni di questo
risultato è soprattutto il fatto che tale testo fosse quello con l’incarico più semplice da portare a
termine, oltre ad essere il testo più breve e con maggiore densità di caratteri estraibili. Nonostante
queste considerazioni, il testo ​Log-IP​ è anche il secondo peggior testo per quanto riguarda i valori di
precision ​e ​recall​ delle estrazioni rispetto alle sottostringhe etichettate dagli utenti. Una spiegazione a
tale dato è dovuta al fatto che molti utenti hanno selezionato (erroneamente) segni di punteggiatura e
spazi adiacenti alle sottostringhe da estrarre.
Il testo ​BibTex-Author​ risulta essere il testo con il punteggio medio ottenuto minore (0.8). Ciò
nonostante, bisogna considerare che i singoli punteggi ottenuti dagli utenti si dividono in esattamente
due regioni: una contenente il valore massimo possibile (1) e una contenente il valore minimo
possibile (0). Inoltre, tutti gli utenti che hanno ottenuto un punteggio di 0 su questo testo, hanno
comunque ottenuto dei valori di ​precision​ e ​recall​ dell’estrattore rispetto alle proprio scelte di 1. In
conclusione si può affermare che gli utenti che hanno fallito l’incarico hanno comunque ottenuto
l’estrattore che desideravano ottenere, perciò si può pensare che abbiano sbagliato di interpretare
l’incarico.
A proposito di interpretazione dell’incarico, per quanto riguarda il testo ​Web-URL​ abbiamo,
nonostante il punteggio di 0.85, una percentuale di utenti con punteggio 1 del 0%. Nessun utente è
riuscito a trovare l’estrattore corretto per risolvere tale incarico, anche se in media tutti hanno
selezionato espressioni regolari che portano a buoni risultati, come si può vedere in figura 15.
Figura 15: Punteggio di ​f-measure​ ottenuto da ogni singolo utente per il testo ​Web-URL​.
29
Una possibile spiegazione di questi risultati può essere l’impossibilità per l’utente di
comprendere esattamente quale fosse il formato degli URL da estrarre, trovandosi così in difficoltà al
momento di fornire risposte a certe query fornite dall’interfaccia. In ogni caso i valori di ​precision​ e
recall​ dell’estrattore selezionato rispetto alle proprie scelte ottenuti sono perfettamente in linea con
quelli degli altri testi e circa il 61.5% degli utenti ha ottenuto esattamente valori di 1 e 1, il che
significa che l’espressione regolare da loro selezionata estraeva esattamente ciò che loro si
aspettavano.
Il testo ​Twitter-Hashtag+Citation​ ha la seconda percentuale più bassa di utenti con punteggio
1 (54%) nonostante l’ottimo punteggio medio di 0.9. Questo è dovuto al fatto che un’alta percentuale
di utenti ha ottenuto un punteggio di 0.98, e questo è dovuto al fatto che all’interno del testo~ 1%)( 3
era contenuto l’indirizzo email ​service@youtube.com​, contenente al suo interno la sottostringa
@youtube​ che tali utenti non hanno segnalato come indesiderata, probabilmente perché non hanno
mai ricevuto una query al riguardo.
Figura 16: Percentuale di utenti che hanno estratto o meno la sottostringa ​@youtube​ dal testo
Twitter-Hashtag+Citation​.
In questo caso ha senso introdurre una distinzione fra gli utenti che hanno fatto ampio utilizzo
della risposta edit e quelli che si sono limitati a fornire risposte di tipo binario. Tale distinzione verrà
approfondita nel prossimo paragrafo.
Il testo ​Email-Phone​ ha messo in seria difficoltà gli utenti sul comprendere quali fossero i
numeri di telefono da estrarre e quali no. E’ il testo che ha richiesto in media il maggior tempo per
concludere una ricerca (più di 4 minuti) e quello per cui in media è stato necessario dare più risposte
30
(17). Ad ogni modo, il 69% degli utenti è riuscito ad individuare l’estrattore corretto, mentre gli altri
utenti in media hanno ottenuto un punteggio di 0.45, quindi molto lontani dalla soluzione corretta.
Il testo ​Bills-Date​, nonostante l’incarico ad esso associato fosse alquanto complicato (trovare
tutte le date scritte in formati diversi) non ha dato particolari problemi agli utenti. Il 92% di essi ha
trovato l’espressione regolare corretta e il punteggio medio è di 0.98, mentre il tempo medio di una
ricerca è stato di 2 minuti e mezzo.
Comportamenti degli utenti
I comportamenti degli utenti durante gli esperimenti sono classificabili in base al modo in cui
rispondono alle query. Sono state individuate due categorie diverse:
● Una prima categoria è formata dagli utenti che tende a rispondere a tutte le query con risposte
di tipo binario. Essi tendono a fornire risposte di tipo edit solamente nei casi in cui il
contenuto della query è parzialmente coincidente con una sottostringa che desiderano estrarre
o meno. In questo modo, però, tendono ad avere bisogno di rispondere a più query prima di
trovare l’estrattore desiderato e, come spiegato per il testo ​Twitter-Hashtag+Citation​, non
riescono a notificare all’interfaccia di non estrarre sottostringhe con aspetto simile a quelle
desiderate, ma scorrette.
● Una seconda categoria è formata dagli utenti che fanno ampio utilizzo della risposta di tipo
edit, selezionandola con frequenza molto elevata e utilizzandola per andarsi a cercare nel testo
sottostringhe ben precise che vogliono etichettare come desiderate o meno. Oltre a ciò che è
già stato descritto, il vantaggio di questa categoria è che utenti con una percentuale più alta di
risposte di tipo edit tendono ad avere un punteggio finale leggermente più elevato, come si
può vedere seguendo la linea di tendenza del grafico in figura 17.
Figura 17: Rapporto fra percentuale di risposte di tipo edit e punteggio finale di ogni singolo esperimento, con
annessa linea di tendenza.
31
Per valutare la correttezza delle risposte fornite dagli utenti sono stati ricavati dai log delle
attività due ulteriori indici di prestazioni, descritti di seguito:
● Char answer accuracy​: Sia l’insieme di tutti i caratteri delle sottostringhe annotate nelleS
query, e sia il sottoinsieme di contenente tutti i caratteri annotati correttamente (caratteriS′ S
annotati con risposta yes che vengono estratti dall’espressione regolare corretta e caratteri
annotati con risposta no che non vengono estratti dall’espressione regolare corretta). Questo
indice contiene il rapporto in percentuale./SS′
● Answer accuracy​: Sia l’insieme di tutte le query a cui l’utente ha fornito come risposta unaQ
sottostringa da annotare, e sia l’insieme di tutte le query la cui sottostringa è stata annotataQ′
correttamente dall’utente (risposta yes quando la sottostringa viene estratta dall’espressione
regolare corretta, oppure risposta no quando la sottostringa non viene estratta dall’espressione
regolare corretta). Questo indice contiene il rapporto in percentuale./QQ′
Tali indici sono analizzati approfonditamente nelle tabelle seguenti, assieme agli indici di
precision​, ​recall​ e tempo di esecuzione descritti in precedenza.
Tabelle e grafici di approfondimento
Testo: tutti
Indice Valore medio Deviazione standard Valore minimo Valore massimo
tempo 2:06 1:12 0:29 4:53
precision 0.90 0.11 0.59 0.98
recall 0.89 0.14 0.49 0.99
Char answer
accuracy
96% 4% 85% 100%
Answer
accuracy
87% 9% 71% 98%
Tabella 4: Approfondimento sugli indici medi di tutti i testi per tutti gli utenti.
32
Testo: ​Bibtex-Author
Indice Valore medio Deviazione
standard
Valore minimo Valore massimo
tempo 1:23 0:47 0:11 2:42
precision 0.8 0.41 0 1
recall 0.8 0.41 0 1
Char answer
accuracy
95% 7% 83% 100%
Answer accuracy 79% 26% 0% 100%
Tabella 5: Approfondimento sugli indici di tutti gli utenti per il testo ​BibTex-Author.
Testo: ​Bills-Date
Indice Valore medio Deviazione
standard
Valore minimo Valore massimo
tempo 2:31 3:03 0:24 11:53
precision 0.99 0.05 0.82 1
recall 0.98 0.08 0.72 1
Char answer
accuracy
96% 10% 67% 100%
Answer accuracy 96% 6% 85% 100%
Tabella 6: Approfondimento sugli indici di tutti gli utenti per il testo ​Bills-Date.
Testo: ​Email-Phone
Indice Valore medio Deviazione
standard
Valore minimo Valore massimo
tempo 4:24 3:24 0:28 12:12
precision 0.9 0.23 0.34 1
recall 0.82 0.28 0.28 1
Char answer
accuracy
88% 13% 60% 100%
Answer accuracy 76% 23% 33% 100%
Tabella 7: Approfondimento sugli indici di tutti gli utenti per il testo ​Email-Phone.
33
Testo: ​Log-IP
Indice Valore medio Deviazione
standard
Valore minimo Valore massimo
tempo 0:47 0:28 0:09 1:49
precision 1 0 1 1
recall 1 0 1 1
Char answer
accuracy
99% 1% 97% 100%
Answer accuracy 94% 7% 80% 100%
Tabella 8: Approfondimento sugli indici di tutti gli utenti per il testo ​Log-IP.
Testo: ​Twitter-Hashtag+Citation
Indice Valore medio Deviazione
standard
Valore minimo Valore massimo
tempo 1:19 0:39 0:30 2:20
precision 0.88 0.27 0 1
recall 0.9 0.28 0 1
Char answer
accuracy
99% 2% 94% 100%
Answer accuracy 91% 22% 33% 100%
Tabella 9: Approfondimento sugli indici di tutti gli utenti per il testo ​Twitter-Hashtag+Citation.
Testo: ​Web-URL
Indice Valore medio Deviazione
standard
Valore minimo Valore massimo
tempo 2:43 1:49 1:00 6:36
precision 0.84 0.06 0.74 0,95
recall 0.87 0.06 0.76 0,92
Char answer
accuracy
98% 4% 86% 100%
Answer accuracy 84% 19% 50% 100%
Tabella 10: Approfondimento sugli indici di tutti gli utenti per il testo ​Web-URL.
34
Figura 18: Valori del tempo medio di esecuzione su tutti i testi per ogni utente.
Figura 19: Valori della ​precision​ media su tutti i testi per ogni utente.
35
Figura 20: Valori della ​recall​ media su tutti i testi per ogni utente.
Figura 21: Valori della ​char answer accuracy​ media su tutti i testi per ogni utente.
36
Figura 22: Valori della ​answer accuracy​ media su tutti i testi per ogni utente.
37
Conclusioni
Il lavoro di questa tesi si conclude con la realizzazione di un prototipo funzionante di
un’interfaccia web in grado di selezionare automaticamente espressioni regolari partendo dagli esempi
forniti dal richiedente. I risultati ottenuti in fase di sperimentazione si sono rivelati soddisfacenti sia in
termini di tempo di esecuzione che di ​precision​ e ​recall​, soprattutto considerando l'accuratezza non
sempre perfetta delle annotazioni e risposte date dagli utenti.
Durante l’esecuzione dei test sono anche state raccolte informazioni su come il prototipo
possa essere modificato in futuro per correggerne i difetti che sono emersi o per migliorarne
ulteriormente le prestazioni. Buona parte di queste informazioni sono state inserite nel capitolo
dedicato agli esperimenti.
Tale prototipo, dunque, verrà affidato ad altri sviluppatori in futuro per poterne risolvere i
dubbi emersi e per poterne estendere ulteriormente le funzionalità. Essendo il prototipo scomposto in
front end e back end sostituibile, esiste la possibilità di utilizzare altri algoritmi di selezione estrattori
e generazione query e verificarne i risultati confrontandoli con quelli ottenuti dallo ​stub​ attuale.
Per quanto riguarda la semplicità di utilizzo, tutti gli utenti coinvolti nell’esperimento sono
stati in grado di utilizzare l’interfaccia senza bisogno di leggere le istruzioni scritte, semplicemente
seguendo delle brevi spiegazioni a voce fornite dal sottoscritto a ciascuno di essi. Alcuni utenti hanno
familiarizzato immediatamente con i comandi diventando dei veri e propri esperti di gestione query da
rispondere, altri hanno avuto bisogno di un po’ di tempo in più e di qualche tentativo extra ma alla
fine tutti gli utenti sono riusciti a portare a termine con successo tutti gli incarichi iniziati. Un
fastidioso particolare riferito da gran parte degli utenti durante gli esperimenti e non evidenziato
nell’apposito capitolo è stata la difficoltà a selezionare col mouse esattamente la sottostringa
desiderata senza “dimenticarsi” i primi o ultimi caratteri o senza selezionarne involontariamente
qualcuno in eccesso. Tale problema viene segnalato in questo ultimo capitolo in quanto non è
tecnicamente un errore di come è stata scritta l’applicazione, ma è piuttosto un problema di
accuratezza delle selezioni effettuate dagli utenti.
Ad ogni modo, un sentito ringraziamento per la disponibilità va alle 13 “cavie” che si sono
offerte di sottoporsi all’esperimento con grande serietà e pazienza. Altri ringraziamenti vanno ai
membri del Machine Learning Lab per avermi fornito e aiutato a comprendere il materiale che mi
hanno fornito e ai docenti relatori per la chiarezza con cui hanno spiegato ogni incarico che mi hanno
affidato per poter realizzare un buon lavoro.
38
Bibliografia
[1] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, Fabiano Tarlao. Interactive Example-Based
Finding of Text Items. 2018. ​[citato a p. 18]
[2] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, Fabiano Tarlao. Active Learning of Regular
Expressions for Entity Extraction. 2017.
[3] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, Fabiano Tarlao. Inference of Regular
Expressions for Text Extraction from Examples. 2016.
[4] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, and Fabiano Tarlao. Active learning
approaches for learning regular expressions with genetic programming. 2016. ​[citato a p. 25]
[5] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, and Fabiano Tarlao. Learning text patterns
using separate-and-conquer genetic programming. 2015. ​[citato a p. 25]
[6] Alberto Bartoli, Giorgio Davanzo, Andrea De Lorenzo, Eric Medvet, and Enrico Sorio. Automatic
Synthesis of Regular Expressions from Examples. 2014. ​[citato a p. 25]
[7] Sonal Gupta, Christopher D. Manning. SPIED: Stanford Pattern-based Information Extraction and
Diagnostics.
[8] Thomas Rebele, Katerina Tzompanaki, Fabian Suchanek. Visualizing the addition of missing
words to regular expressions.
[9] Burr Settles. Active Learning Literature Survey. Computer Sciences Technical Report 1648. 2009.
39

Progetto e realizzazione di un'interfaccia web interattiva per un sistema di generazione automatica di espressioni regolari

  • 1.
    UNIVERSITÀ DEGLI STUDIDI TRIESTE Dipartimento di Ingegneria e Architettura Corso di Studi in Ingegneria informatica Progetto e realizzazione di un'interfaccia web interattiva per un sistema di generazione automatica di espressioni regolari Tesi di Laurea Magistrale Laureando: Pieredoardo GABUTTI Relatore: prof. Alberto BARTOLI Correlatore: prof. Eric MEDVET _____________________________________ ANNO ACCADEMICO 2017-2018
  • 2.
  • 3.
    Sommario Introduzione 4 Analisi delproblema 6 Istanza del problema 6 Procedura iterativa 7 Risposta ad una query 8 Progettazione del sistema 9 Fase di estrazione 9 Criterio della F-measure 9 Fase di selezione query 10 Tokenizzazione del testo 11 Uncertainty sampling 12 Fase di risposta query 12 Descrizione dell’interfaccia 13 Aspetto dell’interfaccia 13 Descrizione dei componenti 15 Pannello estrattori 15 Legenda 16 Timer 17 Istruzioni di utilizzo 17 Procedura iterativa 17 Rispondere ad una query 17 Conclusione della ricerca 18 Documentazione 19 Architettura dell’applicazione 19 Codice importato 20 Tipi di oggetti definiti 20 Substring 20 Extraction 20 Extractor 20 Variabili principali definite 21 Text 21 Extractors 21 Queries 21 Desired 21 Undesired 21 Rgx 21 2
  • 4.
    To show 21 Funzioniprincipali definite 22 First selection 22 Stub iterative step 22 Ready extractors 23 Create queries 23 Select extractor 23 Mark substrings 23 Yes 23 No 24 Edit 24 Find query 24 Selection reset 24 Cambiare il back end 24 Esperimenti 25 Panoramica 25 Testi e utenti 25 Risultati analizzati 27 Considerazioni sui risultati 29 Comportamenti degli utenti 31 Tabelle e grafici di approfondimento 32 Conclusioni 38 Bibliografia 39 3
  • 5.
    Introduzione L’estrazione da undocumento di frammenti di testo aventi in comune un ​pattern ​specificato da un utente è un problema pratico molto comune nell’informatica. Per esempio, i programmi di editing e di visualizzazione di testi e i browser web permettono la ricerca di una determinata parola o sezione di testo specificata dall’utente, con la possibilità di aggiungere alcuni vincoli (caratteri speciali, ​case-insensitive​…). Strumenti di questo genere sono molto utili ed immediati da utilizzare, però non sono in grado di estrarre frammenti che pur avendo un pattern comune sono differenti, né sono in grado di estrarre segmenti per i quali l’utente non è in grado di descrivere esattamente il pattern ma ne possa solo fornire ​esempi​. Il primo dei problemi appena descritti può essere risolto utilizzando un’espressione regolare che descriva il pattern che le estrazioni desiderate devono seguire, mentre il secondo problema è oggetto del presente lavoro di tesi. Lo scopo di questa tesi consiste nella realizzazione di un’interfaccia web interattiva in grado di selezionare espressioni regolari da un insieme predefinito, sulla base di esempi di estrazioni desiderate e non desiderate fornite da un utente. L’interfaccia è integrata con un back end che realizza una forma di ​active learning​: le espressioni regolari disponibili (più di 3700) sono le possibili soluzioni ed il back end costruisce delle interrogazioni da sottoporre all’utente al fine di raccogliere informazioni utili per la scelta della soluzione migliore. L’interfaccia deve essere semplice da utilizzare e l’utente deve poterne intuire rapidamente il modo di utilizzo, riuscendo a trovare una soluzione che lo soddisfi il più velocemente possibile e con meno interazioni possibili. L’ambiente in cui si sono svolti la progettazione e la realizzazione è stato il ​Machine Learning Lab​ dell’università di Trieste, il quale ha anche fornito materiale utile ai fini della realizzazione degli algoritmi di selezione delle espressioni regolari e di gestione delle interazioni fra l’interfaccia e l’utente, nonché gli insiemi di espressioni regolari e di testi da utilizzare in fase di testing e sperimentazione. L’interfaccia è stata realizzata in modo da essere composta dal solo lato client, contenente un front end incaricato di scambiare le informazioni a disposizione con l’utente e un back end che si occupa della selezione delle espressioni regolari e delle gestione delle informazioni ricevute o da mandare all’utente. L’applicazione è stata progettata in modo tale che il back end possa essere sostituito con un qualsiasi altro codice che si occupi di gestire tali incarichi. I linguaggi di programmazione utilizzati sono stati HTML, CSS e Javascript, con l’aiuto dei framework di Bootstrap e AngularJS. L’approccio utilizzato per questa tesi è stato suddiviso in più fasi consecutive, ognuna di esse è stata descritta in un capitolo separato e sono le seguenti: 1) Analisi del problema: viene definita un’istanza del problema, i suoi input e l’output desiderato. Viene inoltre descritta sommariamente la procedura iterativa e le variabili interne necessarie per arrivare alla soluzione. Infine viene introdotto il concetto di query​ generata dall’interfaccia per l’utente e le risposte che l’utente può fornire ad una di esse. 4
  • 6.
    2) Progettazione delsistema: facendo riferimento a risultati già ottenuti in [1,2,3], vengono definite nel dettaglio le varie fasi della procedura iterativa di estrazione, selezione query e risposta a query, oltre ai criteri di ​f-measure​, ​tokenizzazione​ e uncertainty sampling​ utilizzati all’interno di queste fasi. 3) Descrizione dell’interfaccia: viene descritto l’aspetto grafico dell’interfaccia e il funzionamento di tutti i componenti realizzati per la stessa. Vengono inoltre fornite delle istruzioni per l’esecuzione corretta di una ricerca. 4) Documentazione: viene fornita una descrizione dell’architettura con cui è stata realizzata l’applicazione e la definizione delle variabili e delle funzioni principali create per la stessa. Si può trovare anche una spiegazione su come sostituire l’attuale back end di ​stub​ con altro codice scritto esternamente. 5) Esperimenti: vengono descritti gli esperimenti effettuati per testare le funzionalità dell’interfaccia ed analizzati i risultati ottenuti alla fine dei test. Il capitolo Conclusioni, infine, contiene le considerazioni finali sul lavoro svolto. 5
  • 7.
    Analisi del problema Ilproblema analizzato da questa tesi consiste nel trovare frammenti di testo che siano coerenti con quelli forniti dall’utente come esempi. La comunicazione di informazioni tra utente e applicazione avviene tramite interazioni con un’interfaccia grafica, che si aggiorna costantemente ad ogni nuova informazione ricevuta. Nella formulazione delle definizioni ci si riferirà ai frammenti di testo desiderati dall’utente come sottostringhe, mentre quelli trovati dall’applicazione saranno chiamati estrazioni. Istanza del problema Un’istanza del problema è definita da una stringa , un insieme (ideale) di sottostringhe dis X* e una sottostringa . Tutte le sottostringhe sono descritte tramite i loro indici di inizio es x0 m ∈ X* fine all’interno di , mentre le estrazioni sono sottostringhe a cui viene associato un valores chiamato confidenza.c ∈ ℜ : 0 ≤ c ≤ 1 L’input di un’istanza del problema è dato dalla coppia . La stringa contiene il testos, )( x0 m s dal quale l’utente sceglie gli esempi da fornire all’applicazione e dal quale l’applicazione ricava le estrazioni da mostrare all’utente. La sottostringa corrisponde alla prima fra quelle desideratex0 m dall’utente che viene fornita all’interfaccia. L’insieme rappresenta l’insieme di sottostringhe del testo che l’utente si aspetta diX* ricevere, si tratta dunque dell’output ideale di un’istanza del problema ed in un caso d’uso effettivo è inizialmente ignoto sia all’utente che all’applicazione. Figura 1: Schema di un’istanza del problema. 6
  • 8.
    Procedura iterativa Il sistemaattraverso cui elaborare l’istanza del problema consiste nella procedura iterativa descritta di seguito e riassunta nello schema in figura 2. Figura 2: Schema di un passo della procedura iterativa del sistema. Il riquadro con sfondo grigio corrisponde ad un’azione effettuata dall’utente, le altre vengono completate dal sistema. 7
  • 9.
    Si definiscono gliinsiemi di sottostringhe e come gli insiemi rispettivamente delleXm Xu sottostringhe etichettate dall’utente come estrazioni desiderate e come non desiderate)(xm ∈ X* fornite all’interfaccia fino a una certa iterazione. All’inizio della prima iterazione avremo∈ )(xu / X* e .x }Xm = { 0 m }Xu = { La procedura iterativa è poi composta dai seguenti passaggi: 1) (Estrazione) Vengono appresi estrattori dall’input della singola iterazionen ≥ 1 E ed applicati ad per ottenere i relativi insiemi di estrazioni . Tutti gli estrattoris, , )( Xm Xu s X vengono ordinati per un criterio di confidenza (descritto nel capitolo dedicato allac progettazione) e quelli con il punteggio più elevato vengono mostrati all’utente con le relative estrazioni dal testo tramite interfaccia grafica. 2) (Selezione query) Gli insiemi di estrazioni degli estrattori vengono utilizzati perX E generare una singola estrazione chiamata ​query​ che viene poi sottomessa al giudizioxq dell’utente. Il criterio con cui viene selezionata tale query è descritto nel capitolo dedicato alla progettazione. 3) (Risposta a query) L’utente ispeziona la query e ne fornisce una risposta al sistema, chexq sostituisce di conseguenza gli insiemi e con gli insiemi aggiornati e . LeXm Xu Xq m Xu q diverse possibili risposte ad una query e i conseguenti aggiornamenti del sistema sono descritti nella prossima sezione di questo capitolo e in quello dedicato alla progettazione. Questi tre passaggi vengono ripetuti fino a che l’utente non è soddisfatto di uno degli estrattori ricevuti, il che di solito avviene quando il relativo insieme di estrazioni coincide il piùE X possibile all’insieme di sottostringhe .X* Risposta ad una query Ogni query può essere classificata dall’utente in una delle seguenti categorie:xq a) La sottostringa contenuta in corrisponde esattamente ad una di quelle desideratexq dall’utente .x )( q ∈ X* b) La sottostringa contenuta in non corrisponde a nessuna di quelle desiderate dall’utentexq .x ∈ )( q / X* c) L’utente desidera modificare la sottostringa contenuta in liberamente secondo le suexq necessità. Le risposte di tipo (a) e (b) sono chiamate per definizione risposte binarie, le risposte di tipo (c) vengono definite risposte ​edit​. L’utente può fornire una risposta binaria semplicemente segnalando all’interfaccia se la sottostringa di appartiene o meno al suo insieme di sottostringhe desideratexq , mentre per una risposta di tipo edit l’interfaccia fornisce all’utente la possibilità di modificare ilX* contenuto della query prima di fornire una nuova risposta. 8
  • 10.
    Progettazione del sistema Fasedi estrazione Gli estrattori utilizzati in questo esperimento provengono dal materiale a disposizione del Machine Learning Lab dell’Università di Trieste, che consiste in un insieme di 3721 espressioni regolari. Tali estrattori sono stati applicati su diversi testi di prova (i quali sono descritti nel capitolo dedicato agli esperimenti) per verificarne il tempo di esecuzione per una ricerca completa. Sono state utilizzate solo le espressioni regolari con tempo di esecuzione su ogni testo di prova, per un00ms≤ 5 totale di 3058 elementi. La prima fase della procedura iterativa dell’applicazione è chiamata fase di estrazione e consiste nell’applicazione di un insieme di estrattori sul testo in modo da ottenere per ognis estrattore il relativo insieme di estrazioni .E X Una volta che tutte le espressioni regolari sono state applicate al testo e sono stati generati i rispettivi insiemi di estrazioni, l’applicazione si occupa di ordinare l’insieme di estrattori secondo il criterio della ​F-measure​ per punteggi decrescenti, in caso di valori coincidenti gli estrattori vengono ordinati per lunghezza crescente della relativa espressione regolare (complessità). Criterio della F-measure Il criterio utilizzato per calcolare la confidenza con cui un estrattore asseconda gli esempiE forniti dall’utente è chiamato ​F-measure​, il cui punteggio è calcolato usando come informazioni le sottostringhe inserite in e . E’ importante sottolineare che si assume che e nonXm Xu Xm Xu contengano errori, cioè rappresentino fedelmente ciò che l’utente desidera e non desidera, rispettivamente, estrarre dal testo. Negli esperimenti che saranno descritti successivamente, gli indici di prestazione qui descritti saranno calcolati con riferimento non a e ma ai valori ottenuti daXm Xu un estrattore ideale già disponibile.X* Per poter calcolare la F-measure di un estrattore è necessario prima ricavare i valori di precision​ e ​recall​ con le seguenti formule: recisionp = |{true positive}| |{true positive}| +|{false positive}| ecallr = |{true positive}| |{true positive}|+|{false negative}| Le estrazioni di tipo ​true positive​ sono quelle la cui sottostringa estratta dal testo è esattamente presente anche nell’insieme . Le estrazioni di tipo ​false positive​ sono quelle la cuiXm sottostringa si sovrappone in qualche modo a sottostringhe presenti in senza però coincidere conXm 9
  • 11.
    nessuna di esseoppure la cui sottostringa si sovrappone o coincide a sottostringhe presenti in . LeXu estrazioni di tipo ​false negative​ sono quelle la cui sottostringa è presente in ma non lo è inXm nessuna delle estrazioni di . I delimitatori indicano che ci si riferisce alla cardinalità delE | }{ · | relativo insieme di estrazioni. Una volta ricavati i valori di precision e recall, si può ricavare la F-measure come media armonica di questi due risultati: F = 2 · precision · recall precision + recall Fase di selezione query La seconda fase della procedura iterativa consiste nel costruire una possibile estrazione dal testo , chiamata ​query​, da mostrare all’utente per ottenerne una risposta.xq Questa fase è suddivisa in due sotto-fasi differenti di cui viene fornita la descrizione già formulata in [1]: Figura 3: Schema della fase di selezione query. Il con valore assegnato più vicino allo 0 vieneokent c selezionato come .xq 10
  • 12.
    1) Una fasedi ​tokenizzazione​ del testo, nella quale viene partizionato in pezzi chiamati ​tokens separati da dei delimitatori i quali vengono determinati sfruttando come informazioni le sottostringhe presenti in .Xm 2) Una fase di classificazione dei token di testo ottenuti, assegnando un punteggio a ciascunoc di essi mediante il criterio di ​uncertainty sampling​, che sfrutta come informazioni gli insiemi di estrazioni dei primi estrattori ricavati e ordinati durante la fase di estrazione.X 0n = 1 E Questo punteggio definisce il grado di incertezza sull'estrazione o meno del token da parte degli estrattori selezionati. A questo punto viene selezionato come query il token con punteggio assegnato il più vicino possibile allo 0 (quindi con il grado di incertezza più elevato) che non si sovrapponga in alcun modo a nessuna sottostringa di o .Xm Xu Tokenizzazione del testo Figura 4: esempio di tokenizzazione del testo. La procedura di ​tokenizzazione ​[1] è necessaria perché non si può affermare con certezza assoluta che i migliori token candidabili come query si ottengano spezzando il testo semplicemente in parole, linee, frasi o costrutti di questo tipo. La suddivisione deve essere fatta usando delimitatori particolari e adatti all’istanza del problema in esame. L’obiettivo di questa procedura è ricavare un insieme di caratteri che agiscano daS separatori fra i token del testo. Per fare ciò si costruisce un insieme che includa ogni carattere cheS0 sia immediatamente precedente o successivo nel testo rispetto a ciascuna sottostringa contenuta in Xm ad una certa iterazione. Successivamente si ordina in ordine decrescente per numero di apparizioniS0 di ogni singolo carattere. A questo punto si iterano i passi successivi partendo da : (I) sii = 1 costruisce l’insieme dei primi caratteri di ; (II) si costruisce l’insieme dei token ottenutiSi i S0 Ti applicando in i delimitatori contenuti in . Infine si definisce dove è l’insieme ches Si =S : Si* Si* contiene il maggior numero di token che siano anche sottostringhe presenti in , quindiXm . In caso di pareggio, viene selezionato il valore di più piccolo.rg max |T |i* = a i i ⋂ Xm i 11
  • 13.
    Uncertainty sampling Il criteriodi ​uncertainty sampling​[1] dà la possibilità di classificare i token ricavati dal testo in base al livello di incertezza che hanno gli estrattori di estrarre o meno quel determinato token. Il metodo per assegnare il punteggio al token è il seguente: inizialmente ad ogni token vienet associato un punteggio , dopodiché per ognuno degli estrattori selezionati si verifica se ilc = 0 n E token è contenuto o meno nell’insieme di estrazioni relativo . Se il token coincide esattamente conX una delle estrazioni contenute in il punteggio del token viene incrementato di 1 , altrimentiX t )( ∈ X viene decrementato di 1 . Infine si ricava il punteggio medio dividendo il valore ottenuto dit ∈ )( / X per ; in questo modo si ottiene un valore .c n − 1 ≤ c ≤ 1 Il valore assoluto fornisce il livello di incertezza ricercato per il token . Più questo valorec|| t è vicino allo zero, più il grado di incertezza è elevato e il token è adeguato per essere selezionato come query .xq Fase di risposta query L’ultima fase della procedura iterativa consiste nel dare la possibilità all’utente di fornire una risposta di tipo yes, no oppure edit alla query selezionata ed aggiornare gli insiemi e dixq Xm Xu conseguenza. Una risposta di tipo binario (yes/no) viene risolta semplicemente aggiungendo il contenuto di in in caso di risposta positiva, in in caso di risposta negativa.xq Xm Xu Una risposta di tipo edit, invece, non aggiorna in alcun modo il contenuto di e maXm Xu concede all’utente di modificare il contenuto di selezionando direttamente dal testo una qualsiasixq nuova sottostringa. Questa nuova sottostringa viene automaticamente selezionata come query nellaxq successiva iterazione della procedura, saltando di fatto sia le fasi di estrazione (superflua dato che non ci sono nuove informazioni in e ) che di selezione query (in quanto la query è già stataXm Xu selezionata). L’utente a questo punto ha la possibilità di rispondere alla così generata sia con unaxq risposta binaria che nuovamente con una di tipo edit. 12
  • 14.
    Descrizione dell’interfaccia L’interfaccia webrealizzata si presenta come un’unica pagina html dinamica accessibile tramite il browser web. In sede di testing è stato utilizzato Google Chrome come browser. Aspetto dell’interfaccia Dopo l’inizializzazione l’interfaccia si presenta con un elenco puntato che consente all’utente di scegliere il testo da un insieme fissato e da un pulsante che consente di confermare la proprias scelta (Continue). Per ogni punto dell’elenco è descritto il tipo di testo e l’incarico dell’utente da completare per quel determinato testo ai fini della fase sperimentale. Figura 5: Elenco di selezione testo dell’interfaccia. 13
  • 15.
    Una volta confermatoil testo, l’elenco viene rimosso e vengono caricati tutti i componenti principali della pagina. Il titolo in alto descrive l’incarico da completare per il testo selezionato, il quale viene a sua volta mostrato in una casella dotata di barra di scorrimento verticale (se richiesta) al centro della pagina. Figura 6: Come si presenta la pagina subito dopo la conferma del testo. A sinistra del testo troviamo il pannello degli estrattori e un pulsante per tornare all’elenco di selezione testo (Change text). A destra del testo ci sono invece i pannelli del timer e della legenda. La descrizione di ogni componente dell’interfaccia è presente nella sezione successiva di questo capitolo. Per iniziare la procedura iterativa l’utente deve selezionare con il mouse la prima estrazione desiderata all’interno di . A questo punto in un qualsiasi istante della procedura iterativax0 m s l’interfaccia si presenterà come qualcosa di simile a quello che si vede in figura 7. Figura 7: Come si presenta la pagina dopo aver avviato la procedura iterativa. 14
  • 16.
    I pannelli degliestrattori e del timer vengono riempiti con del contenuto e sul testo compaiono delle evidenziazioni e sottolineature in diversi colori, definiti dalla legenda. Il pulsante Change text a sinistra viene sostituito da un pulsante per annullare la corrente procedura iterativa (Reset selection) e da uno che permette di visualizzare la query in alto sullo schermo (Find query). A destra compare un pulsante che permette all’utente di affermare di essere soddisfatto delle attuali estrazioni dal testo (I’m done). Descrizione dei componenti Pannello estrattori Figura 8: Il pannello degli estrattori. Il pannello degli estrattori contiene i primi estrattori selezionati durante l’attuale0n = 1 iterazione della procedura in corso. Se non è stata ancora avviata nessuna procedura iterativa, o se è stata annullata, il pannello risulta vuoto. L’utente può scegliere di cliccare col tasto sinistro del mouse su uno qualsiasi degli estrattori elencati per visualizzarne le relative estrazioni direttamente sul testo, evidenziate come descritto in legenda. 15
  • 17.
    Legenda Figura 9: Lalegenda. La legenda permette di interpretare il significato delle varie evidenziazioni e sottolineature sul testo. Di seguito la descrizione di ogni diversa selezione: Selezioni dell’utente: - Desired extraction: testo, evidenziazione e sottolineatura verdi, indica una sottostringa appartenente a .Xm - Undesired extraction: testo, evidenziazione e sottolineatura rossi, indica una sottostringa appartenente a .Xu Selezioni automatiche: - Extraction: evidenziazione verde, indica una estrazione appartenente all’insieme X dell’estrattore selezionato dall’utente. Se si sovrappone in qualche modo ad una selezioneE dell’utente viene omessa. - Query: testo nero, sottolineatura e sopralineatura gialli, indica la query .xq - Extraction + Query: testo nero, evidenziazione verde, sottolineatura e sopralineatura gialli, usata quando la query si sovrappone ad un’estrazione automatica. 16
  • 18.
    Timer Figura 10: Iltimer. Il timer viene inizializzato e inizia a scorrere nel momento in cui l’utente ha selezionato la prima sottostringa desiderata dal testo. Si interrompe nel momento in cui l’utente clicca sulx0 m pulsante I’m done e si resetta quando l’utente clicca sul pulsante Reset selection. Istruzioni di utilizzo L’interfaccia è stata progettata per essere semplice ed intuitiva da utilizzare, e si è cercato di ridurre al minimo possibile il numero di click del mouse necessari per arrivare all’estrattore corretto in ogni situazione. Procedura iterativa Una volta che è stato scelto il testo, il modo per inizializzare la procedura iterativa è selezionare da esso una sottostringa che funga da esempio per ciò che l’utente deve trovare. La selezione si effettua semplicemente evidenziando con il mouse il frammento di testo desiderato. Quando la procedura iterativa è stata avviata, il modo per fornire ulteriori informazioni all’interfaccia è rispondendo alla query che viene proposta ad ogni nuova iterazione. Rispondere ad una query Per rispondere ad una query, l’utente deve cliccarci sopra con il tasto sinistro del mouse. In questo modo si aprirà un menù a tendina con tre diverse opzioni, come mostrate in figura 11. Figura 11: Menù di risposta ad una query. 17
  • 19.
    Le opzioni sonole seguenti: - Yes, I want this: l’utente dovrebbe fornire questa risposta quando il testo della query corrisponde ad una sottostringa desiderata, cioè .xq ∈ X* - No, remove this: l’utente dovrebbe fornire questa risposta quando il testo della query non corrisponde ad una sottostringa desiderata, cioè .xq ∈ X* - Edit this query: l’utente dovrebbe fornire questa risposta quando il testo della query corrisponde solo in parte con quello di una sottostringa desiderata. Può inoltre fornire questa risposta quando ha intenzione di generare autonomamente la propria query, anche completamente diversa da quella proposta dall’applicazione. Quando un utente risponde ad una query con un Yes o un No, la procedura iterativa avanza automaticamente al passo successivo. In caso di risposta Edit, l’utente ha la possibilità di selezionare una sottostringa qualunque dal testo, la quale diventa automaticamente il contenuto della query della successiva iterazione a meno che non si sovrapponga in qualche modo a qualche sottostringa già etichettata come desiderata o non desiderata. Conclusione della ricerca La ricerca si ritiene conclusa quando l’utente clicca sul pulsante I’m done. Questo succede quando l’utente ritiene che l’estrattore attualmente selezionato estragga (evidenziazioni verdi sul testo) tutti e solo i frammenti di testo che lui ritiene corretti. 18
  • 20.
    Documentazione L’applicazione web realizzataè composta da un’interfaccia grafica scritta nei linguaggi HTML e CSS e da funzioni implementate in Javascript. Sono inoltre stati utilizzati i framework di Bootstrap 3 e AngularJS e la libreria di JQuery per occuparsi dell’aspetto visivo e di dinamicità e interattività della pagina web. Architettura dell’applicazione L’applicazione è dotata di un solo lato client mentre quello server non è presente, è stata progettata per funzionare come front end per un qualsiasi back end che si occupi di gestire le fasi di estrazione e selezione query della procedura iterativa. Il front end è composto dai seguenti componenti: ● La pagina HTML così come è descritta nel capitolo precedente. ● Le variabili necessarie per memorizzare , , , tutti gli con i relativi e .s Xm Xu E X xq ● Tutte le funzioni che si occupano di inizializzare, riempire e gestire i componenti descritti nel capitolo precedente con i contenuti forniti dal back end. ● Una funzione che si occupa di evidenziare sul testo le sottostringhe etichettate dall’utente più le estrazioni e la query forniti dal back end. ● Una funzione che si occupa di gestire la prima selezione dell’utente .x0 m ● Tutte le funzioni necessarie a inizializzare il menù a tendina delle query ed a gestire le risposte che l’utente fornisce. Per fare sì che l’interfaccia funzioni è sufficiente scrivere alcune ulteriori funzioni che eseguano il compito del back end direttamente all’interno del lato client dell’applicazione. Si può anche aggiungere un lato server all’applicazione contenente la logica del back end, in questo caso sarà necessario scrivere nel front end delle funzioni che permettano la comunicazione con il server. Per avere la possibilità di effettuare degli esperimenti sull’interfaccia è stato implementato un back end di ​stub​ all’interno del client che gestisce le fasi di estrazione e selezione query come descritto nel capitolo di progettazione del sistema. Nelle sezioni successive si trovano maggiori informazioni sulle funzioni e variabili principali dell’interfaccia. 19
  • 21.
    Codice importato ● AngularJS1.6.6​ - framework di AngularJS. ● JQuery 3.2.1​ - libreria di JQuery. ● Bootstrap 3.3.7​ - framework di Bootstrap 3. ● UI Bootstrap 2.5.0​ - direttive AngularJS per Bootstrap 3. ● Angular-bind-html-compile​ - direttiva angularJS per compilare contenuti dinamici contenenti direttive. Tipi di oggetti definiti Substring Definizione​: una sottostringa del testo definita dagli indici dei caratteri di inizio e di fine all’internos del testo stesso. Proprietà​: - int start​: indice del primo carattere della sottostringa in .s - int end​: indice del carattere successivo all’ultimo della sottostringa in .s Extraction Definizione​: una estrazione del testo definita dalla sottostringa estratta e da un valore di confidenza.s Proprietà​: - Substring substring​: oggetto di tipo ​Substring​ indicante la sottostringa estratta dal testo. - float confidence​: numero reale compreso tra -1 e 1 indicante il valore di confidenza della relativa estrazione. Extractor Definizione​: un oggetto che contiene un estrattore, che nel caso di questa interfaccia è un’espressione regolare, e l’insieme di estrazioni da di quel determinato estrattore.s Proprietà​: - RegExp extractor​: estrattore (espressione regolare) eseguito per le estrazioni dal testo. - Extraction[ ] extractions​: insieme contenente tutte le estrazioni dal testo ottenute eseguendo l’estrattore (espressione regolare) sul testo. 20
  • 22.
    Variabili principali definite Text Tipo​:​String​. Descrizione​: il testo di un’istanza del problema.s Extractors Tipo​: ​Extractor[ ]​. Descrizione​: insieme di oggetti di tipo ​Extractor​ corrispondenti a (e relativo ) nellaE X procedura iterativa. Queries Tipo​: ​Extraction[ ]​. Descrizione​: insieme di oggetti di tipo ​Extraction​ corrispondenti a candidati per nellaxq procedura iterativa. Desired Tipo​: ​Substring[ ]​. Descrizione​: insieme corrispondente a di oggetti di tipo ​Substring​.Xm Undesired Tipo​: ​Substring[ ]​. Descrizione​: insieme corrispondente a di oggetti di tipo ​Substring​.Xu Rgx Tipo​: ​RegExp[ ]​. Descrizione​: variabile creata per lo ​stub​ del back end. Insieme di espressioni regolari utilizzato dallo stub. To show Tipo​: ​String​. Descrizione​: testo formattato con le dovute evidenziazioni e sottolineature e mostrato sullo schermo all’utente. 21
  • 23.
    Funzioni principali definite Firstselection Input​: - Substring selection​: oggetto di tipo ​substring​ corrispondente a , lax0 m ∈ X* prima sottostringa selezionata dall’utente nel testo. Descrizione​: aggiunge ​selection​ a ​Desired​ ed inizializza la prima iterazione della procedura iterativa. Stub iterative step Input​: - boolean first step​: variabile ​boolean​ che vale ​true​ quando si vuole eseguire la prima iterazione della procedura, ​false​ altrimenti. Descrizione​: funzione creata per lo ​stub​ del back end. Se ​first step == true​, esegue per ogni espressione regolare presente in ​rgx​ la ricerca di estrazioni dal testo, aggiunge estrattore ed estrazioni in un oggetto di tipo ​Extractor​ e inserisce tale oggetto in ​Extractors​. Questa procedura viene eseguita solo alla prima iterazione poiché i risultati di ricerca di ogni espressione regolare dal testo non cambiano in istanti successivi di tempo. Successivamente esegue le funzioni ​Ready extractors​, ​Create queries​, ​Select extractor​ con input 0 e ​Find query​. Figura 12: diagramma di workflow per la funzione ​Stub iterative step​. 22
  • 24.
    Ready extractors Descrizione​: funzionecreata per lo ​stub​ del back end. Ordina gli estrattori contenuti in Extractors​ secondo il criterio di F-measure per valori decrescenti, oppure per confidenza media delle estrazioni per valori decrescenti (calcolo superfluo in quanto tutte le confidenze delle estrazioni hanno lo stesso valore, ma aggiunto lo stesso per possibili utilizzi futuri), altrimenti per complessità degli estrattori (lunghezza dell’espressione regolare) per valori crescenti. Create queries Descrizione​: funzione creata per lo ​stub​ del back end. Effettua la tokenizzazione del testo come descritto nel capitolo dedicato alla progettazione del sistema. Per ogni token generato controlla se questo è presente in ​Desired​ o ​Undesired​. Se il token non è già contenuto in nessuno dei due insiemi, ne calcola la confidenza con il criterio di uncertainty sampling e lo aggiunge come oggetto di tipo Extraction in ​Queries​. Infine ordina ​Queries​ secondo i valori assoluti delle confidenze in ordine crescente. Select extractor Input​: - int i​: l’indice dell’estrattore da selezionare in ​Extractors​. Descrizione​: seleziona l’​i​-esimo elemento da ​Extractors​ e ne evidenzia le relative estrazioni in To show​ chiamando la funzione ​Mark substrings​. Mark substrings Descrizione​: Evidenzia ​To show​ con i corretti colori e bordi (elencati nel capitolo di descrizione dell’interfaccia) tutte le sottostringhe contenute in ​Desired​ e ​Undesired​, tutte le estrazioni relative all’estrattore selezionato in ​Extractors​ che non si sovrappongono a sottostringhe scelte dall’utente e la prima estrazione contenuta in ​Queries​. Si occupa anche di creare il menù a tendina necessario per rispondere alla query e descritto nel capitolo di descrizione dell’interfaccia. Yes Input​: - int start​: l’indice di inizio della sottostringa relativa alla query a cui l’utente ha risposto. - int end​: l’indice di fine della sottostringa relativa alla query a cui l’utente ha risposto. Descrizione​: invocata quando l’utente risponde “Yes, I want this” ad una query. Aggiunge in Desired​ un nuovo oggetto di tipo ​Substring​ di indici ​start​ ed ​end​ e invoca ​Stub iterative step​ con input ​false​. 23
  • 25.
    No Input​: - int start​:l’indice di inizio della sottostringa relativa alla query a cui l’utente ha risposto. - int end​: l’indice di fine della sottostringa relativa alla query a cui l’utente ha risposto. Descrizione​: invocata quando l’utente risponde “No, remove this” ad una query. Aggiunge in Undesired​ un nuovo oggetto di tipo ​Substring ​di indici ​start​ ed ​end​ e invoca ​Stub iterative step​ con input ​false​. Edit Descrizione​: Invocata quando l’utente risponde “Edit this query” ad una query, è scomposta in due fasi differenti. La prima fase cancella tutte le evidenziazioni da ​To show​ e concede all’utente la possibilità di selezionare da esso una nuova sottostringa. La seconda fase controlla se la sottostringa selezionata dall’utente non si sovrapponga a nessuna sottostringa contenuta in ​Desired​ o Undesired​. Se questa condizione è rispettata, aggiunge in cima a ​Queries​ un oggetto di tipo Extraction​ contenente la sottostringa selezionata ed esegue nuovamente ​Mark substrings​, altrimenti viene chiesto all’utente di selezionare un’altra sottostringa. Nonostante non venga chiamata la funzione ​Stub iterative step​, questa esecuzione conduce comunque ad un nuovo passo della procedura iterativa. Find query Descrizione​: mostra sullo schermo l’attuale query evidenziata in ​To show​. Selection reset Descrizione​: azzera il contenuto di ​Desired​, ​Undesired​, ​Extractors​ e ​Queries​ e consente all’utente di inizializzare una nuova istanza del problema partendo dalla prima selezione. Cambiare il back end Per realizzare un diverso back end da utilizzare in questa interfaccia, si deve sostituire le funzioni ​Stub iterative step​, ​Ready extractors​ e ​Create queries​ con le proprie implementazioni. Tutte le informazioni relative all’istanza di un problema vanno inserite nelle variabili dell’interfaccia descritte nella sezione apposita di questo capitolo. La variabile ​Queries può contenere anche più di una query, ma la funzione ​Mark substrings​ evidenzia sul testo sempre e solo quella meglio classificata disponibile. Se si vuole mostrare le query in un modo o numero diverso, bisogna scrivere una funzione apposta. 24
  • 26.
    Esperimenti Panoramica Lo scopo degliesperimenti è verificare l’efficacia e la rapidità dell’applicazione web così costruita nel trovare tutte e sole le sottostringhe appartenenti all’insieme ideale . Per fare ciò,X* l’interfaccia è stata affidata ad alcuni utenti per l’utilizzo con l’incarico di trovare da alcuni testi prefissati dei frammenti che seguono un pattern specifico e fissato in modo univoco per ogni testo. Per ogni attività di un singolo utente su un singolo testo è stato memorizzato un file di log contenente informazioni su ogni passo iterativo effettuato riguardo il tempo trascorso, la query selezionata dall’applicazione, la risposta fornita dall’utente e i valori di ​precision​ e ​recall​ del primo estrattore classificato dall’applicazione calcolati per ricavare la ​f-measure​ come descritto nel capitolo relativo alla progettazione del sistema. Alla fine della procedura iterativa viene memorizzata l’espressione regolare finale selezionata dall’utente. Testi e utenti In fase di sperimentazione sono stati utilizzati 6 diversi testi preventivamente selezionati da un dataset fornito dal Machine Learning Lab dell’Università di Trieste (presenti in [4,5,6]) ed adattati in modo che per ciascuno di essi l’insieme di sottostringhe ideale contenesse esattamente 25X* elementi (26 per ​BibTex-Author​). Per ognuno di questi testi è presente una espressione regolare nell’insieme delle disponibili che estrae le sottostringhe di con valori di ​precision​ e ​recall​ di 1. IX* testi sono brevemente descritti di seguito. In tabella 1 sono fornite alcune delle informazioni più importanti relative ai testi descritti. è la lunghezza media di una sottostringa desiderata dal(x )* estrarre, è il rapporto tra il numero di caratteri estratti e il numero di caratteri totali e è laρ (s)l lunghezza del testo tagliato e utilizzato per l’applicazione. Testo l(x )* ρ (s)l BibTex-Author 15.5 0.17 2423 Bills-Date 10.6 0.02 12484 Email-Phone 13.2 0.04 9385 Log-IP 12.9 0.24 1414 Twitter-Hashtag + Citation 11.2 0.11 3004 Web-URL 52.2 0.04 57268 Tabella 1: Tabella dei testi utilizzabili e di informazioni relative. 25
  • 27.
    ● BibTex-Author​: Uninsieme di entrate bibtex in cui l’incarico è di trovare tutti i nomi individuali completi all’interno dei campi autore. L’espressione regolare corretta per ottenere èX* (?<=author {0,3}= {0,3}{[^n]{0,300}?)([A-Z.{d'"()][A-Z .a-z{}d'"-,()]*?)(?=(?= and )|(?=},s*[a-z])|n)​. ● Bills-Date​: Un insieme di fatture in cui l’incarico è di trovare tutte le date, che possono avere diversi formati. L’espressione regolare corretta per ottenere èX* ((?:[12]?d{1,3}s*[-./]s*[012]?ds*[-./]s*[12]?d{1,3})|(?:d{1 ,2},s*[A-Z][a-z]+s+[12]d{3})|(?:[A-Z][a-z]+s+d{1,2},s+[12]d{3})) . ● Email-Phone​: Un insieme di estratti di email in cui l’incarico è di trovare tutti i numeri di telefono. L’espressione regolare corretta per ottenere èX* (?<=W|^)((?:[0-9](?: |-|.))?(?:(?[0-9]{3})?|[0-9]{3})(?:|/| |-|.)?(?:[0-9]{3}(?: |-|.)[0-9]{4}))​. ● Log-IP​: Un insieme di entrate di log per il software di un firewall in cui l’incarico è di trovare tutti gli indirizzi IP. L’espressione regolare corretta per ottenere èX* b(?:d{1,3}.){3}d{1,3}b​. ● Twitter-Hashtag+Citation​: Un insieme di post di Twitter in cui l’incarico è di trovare tutti gli hashtag (​#machinelearning​) e le citazioni (​@MaleLabTs​). L’espressione regolare corretta per ottenere èX* (?<=W|^)((?:@[A-Za-z0-9_]+)|(?:#[w]+(?<!#d{0,120})))​. ● Web-URL​: Un insieme di pagine web in HTML in cui l’incarico è di estrarre tutti gli URL. L’espressione regolare corretta per ottenere èX* (?<=^|b|W)((?:(https?|s?ftps?|smb|mailto)://)(?:[a-zA-Z0-9][^s:]+@ )?(?:(?:[a-zA-Z0-9-.:]+.[a-zA-Z]{2,3})|(?:[0-9]{1,3}(?:.[0-9]{1,3}) {3}))(?::d{1,5})?(?:[A-Za-z0-9.-$+!*'(),~_+%=&#/?@%;:]*)?(?<![.()=]+) )​. Gli esperimenti sono stati affidati ad un gruppo di 13 utenti dotati di diverse competenze in ambito di espressioni regolari. Ad ognuno di essi è stato spiegato il funzionamento dell’interfaccia e lasciata libertà di utilizzarla come preferissero per completare ciascuno dei 6 incarichi disponibili. 26
  • 28.
    Risultati analizzati I risultatimedi di tutti gli utenti per ciascun testo sono stati raccolti nelle tabelle 2 e 3. La colonna Punteggio indica la F-measure calcolata rispetto alla ground truth (non rispetto alleX* annotazioni fornite dall’utente). Testo Tempo Nr. risposte Tempo per risposta Punteggio BibTex-Author 1:23 7,5 0:11 80/100 Bills-Date 2:31 13,5 0:11 98/100 Email-Phone 4:24 17 0:16 84/100 Log-IP 0:47 6,5 0:07 100/100 Twitter-Hashtag + Citation 1:19 8 0:10 90/100 Web-URL 2:43 7 0:23 85/100 Tabella 2: Dati raccolti durante l’utilizzo sperimentale dell’interfaccia (parte 1 di 2). Testo Precision Recall % Yes % No % Edit BibTex-Author 0,8 0,8 17,8% 64,4% 17,8% Bills-Date 0,99 0,98 30,1% 58,7% 11,2% Email-Phone 0,9 0,82 46,6% 25,8% 27,6% Log-IP 1 1 18,8% 72,9% 8,3% Twitter-Hashtag + Citation 0,88 0,9 33,9% 45,3% 20,8% Web-URL 0,84 0,87 36,3% 34,0% 29,7% Tabella 3: Dati raccolti durante l’utilizzo sperimentale dell’interfaccia (parte 2 di 2). In tabella 2 si trovano i dati relativi al tempo medio di un’esecuzione completa della ricerca, al numero di risposte fornite in media da ogni utente, al tempo medio che passa fra una risposta e la successiva e al punteggio medio dell’estrattore selezionato alla fine dell’esecuzione. Il punteggio è la f-measure​ delle estrazioni rispetto all’insieme ideale .X* In tabella 3 si trovano i dati relativi a ​precision​ e ​recall​ dell’estrattore finale selezionato dall’utente rispetto all’insieme ideale di sottostringhe e le percentuali di risposte di tipo Yes, no edX* Edit rispetto al numero totale di risposte fornite. In figura 13 è presente un grafico rappresentante il rapporto fra tempo trascorso e numero di risposte fornite durante l’esecuzione di ogni ricerca, mentre la figura 14 mostra un grafico con il rapporto fra il tempo trascorso e il punteggio ottenuto per ogni ricerca. 27
  • 29.
    Figura 13: rapportotra tempo trascorso in millisecondi e numero di risposte fornite da un utente per ciascun esperimento compiuto, con annessa linea di tendenza. Figura 14: Rapporto tra tempo trascorso in millisecondi e punteggio ottenuto per ciascun esperimento compiuto. 28
  • 30.
    Considerazioni sui risultati Considerandoi punteggi medi ottenuti dagli utenti i risultati si possono considerare soddisfacenti, in quanto per ogni testo abbiamo una .easure .8f − m ≥ 0 Il testo ​Log-IP​ ha addirittura ottenuto il punteggio massimo possibile di 1, il che significa che ogni utente ha individuato l’estrattore corretto al termine dell’esecuzione. Una delle ragioni di questo risultato è soprattutto il fatto che tale testo fosse quello con l’incarico più semplice da portare a termine, oltre ad essere il testo più breve e con maggiore densità di caratteri estraibili. Nonostante queste considerazioni, il testo ​Log-IP​ è anche il secondo peggior testo per quanto riguarda i valori di precision ​e ​recall​ delle estrazioni rispetto alle sottostringhe etichettate dagli utenti. Una spiegazione a tale dato è dovuta al fatto che molti utenti hanno selezionato (erroneamente) segni di punteggiatura e spazi adiacenti alle sottostringhe da estrarre. Il testo ​BibTex-Author​ risulta essere il testo con il punteggio medio ottenuto minore (0.8). Ciò nonostante, bisogna considerare che i singoli punteggi ottenuti dagli utenti si dividono in esattamente due regioni: una contenente il valore massimo possibile (1) e una contenente il valore minimo possibile (0). Inoltre, tutti gli utenti che hanno ottenuto un punteggio di 0 su questo testo, hanno comunque ottenuto dei valori di ​precision​ e ​recall​ dell’estrattore rispetto alle proprio scelte di 1. In conclusione si può affermare che gli utenti che hanno fallito l’incarico hanno comunque ottenuto l’estrattore che desideravano ottenere, perciò si può pensare che abbiano sbagliato di interpretare l’incarico. A proposito di interpretazione dell’incarico, per quanto riguarda il testo ​Web-URL​ abbiamo, nonostante il punteggio di 0.85, una percentuale di utenti con punteggio 1 del 0%. Nessun utente è riuscito a trovare l’estrattore corretto per risolvere tale incarico, anche se in media tutti hanno selezionato espressioni regolari che portano a buoni risultati, come si può vedere in figura 15. Figura 15: Punteggio di ​f-measure​ ottenuto da ogni singolo utente per il testo ​Web-URL​. 29
  • 31.
    Una possibile spiegazionedi questi risultati può essere l’impossibilità per l’utente di comprendere esattamente quale fosse il formato degli URL da estrarre, trovandosi così in difficoltà al momento di fornire risposte a certe query fornite dall’interfaccia. In ogni caso i valori di ​precision​ e recall​ dell’estrattore selezionato rispetto alle proprie scelte ottenuti sono perfettamente in linea con quelli degli altri testi e circa il 61.5% degli utenti ha ottenuto esattamente valori di 1 e 1, il che significa che l’espressione regolare da loro selezionata estraeva esattamente ciò che loro si aspettavano. Il testo ​Twitter-Hashtag+Citation​ ha la seconda percentuale più bassa di utenti con punteggio 1 (54%) nonostante l’ottimo punteggio medio di 0.9. Questo è dovuto al fatto che un’alta percentuale di utenti ha ottenuto un punteggio di 0.98, e questo è dovuto al fatto che all’interno del testo~ 1%)( 3 era contenuto l’indirizzo email ​service@youtube.com​, contenente al suo interno la sottostringa @youtube​ che tali utenti non hanno segnalato come indesiderata, probabilmente perché non hanno mai ricevuto una query al riguardo. Figura 16: Percentuale di utenti che hanno estratto o meno la sottostringa ​@youtube​ dal testo Twitter-Hashtag+Citation​. In questo caso ha senso introdurre una distinzione fra gli utenti che hanno fatto ampio utilizzo della risposta edit e quelli che si sono limitati a fornire risposte di tipo binario. Tale distinzione verrà approfondita nel prossimo paragrafo. Il testo ​Email-Phone​ ha messo in seria difficoltà gli utenti sul comprendere quali fossero i numeri di telefono da estrarre e quali no. E’ il testo che ha richiesto in media il maggior tempo per concludere una ricerca (più di 4 minuti) e quello per cui in media è stato necessario dare più risposte 30
  • 32.
    (17). Ad ognimodo, il 69% degli utenti è riuscito ad individuare l’estrattore corretto, mentre gli altri utenti in media hanno ottenuto un punteggio di 0.45, quindi molto lontani dalla soluzione corretta. Il testo ​Bills-Date​, nonostante l’incarico ad esso associato fosse alquanto complicato (trovare tutte le date scritte in formati diversi) non ha dato particolari problemi agli utenti. Il 92% di essi ha trovato l’espressione regolare corretta e il punteggio medio è di 0.98, mentre il tempo medio di una ricerca è stato di 2 minuti e mezzo. Comportamenti degli utenti I comportamenti degli utenti durante gli esperimenti sono classificabili in base al modo in cui rispondono alle query. Sono state individuate due categorie diverse: ● Una prima categoria è formata dagli utenti che tende a rispondere a tutte le query con risposte di tipo binario. Essi tendono a fornire risposte di tipo edit solamente nei casi in cui il contenuto della query è parzialmente coincidente con una sottostringa che desiderano estrarre o meno. In questo modo, però, tendono ad avere bisogno di rispondere a più query prima di trovare l’estrattore desiderato e, come spiegato per il testo ​Twitter-Hashtag+Citation​, non riescono a notificare all’interfaccia di non estrarre sottostringhe con aspetto simile a quelle desiderate, ma scorrette. ● Una seconda categoria è formata dagli utenti che fanno ampio utilizzo della risposta di tipo edit, selezionandola con frequenza molto elevata e utilizzandola per andarsi a cercare nel testo sottostringhe ben precise che vogliono etichettare come desiderate o meno. Oltre a ciò che è già stato descritto, il vantaggio di questa categoria è che utenti con una percentuale più alta di risposte di tipo edit tendono ad avere un punteggio finale leggermente più elevato, come si può vedere seguendo la linea di tendenza del grafico in figura 17. Figura 17: Rapporto fra percentuale di risposte di tipo edit e punteggio finale di ogni singolo esperimento, con annessa linea di tendenza. 31
  • 33.
    Per valutare lacorrettezza delle risposte fornite dagli utenti sono stati ricavati dai log delle attività due ulteriori indici di prestazioni, descritti di seguito: ● Char answer accuracy​: Sia l’insieme di tutti i caratteri delle sottostringhe annotate nelleS query, e sia il sottoinsieme di contenente tutti i caratteri annotati correttamente (caratteriS′ S annotati con risposta yes che vengono estratti dall’espressione regolare corretta e caratteri annotati con risposta no che non vengono estratti dall’espressione regolare corretta). Questo indice contiene il rapporto in percentuale./SS′ ● Answer accuracy​: Sia l’insieme di tutte le query a cui l’utente ha fornito come risposta unaQ sottostringa da annotare, e sia l’insieme di tutte le query la cui sottostringa è stata annotataQ′ correttamente dall’utente (risposta yes quando la sottostringa viene estratta dall’espressione regolare corretta, oppure risposta no quando la sottostringa non viene estratta dall’espressione regolare corretta). Questo indice contiene il rapporto in percentuale./QQ′ Tali indici sono analizzati approfonditamente nelle tabelle seguenti, assieme agli indici di precision​, ​recall​ e tempo di esecuzione descritti in precedenza. Tabelle e grafici di approfondimento Testo: tutti Indice Valore medio Deviazione standard Valore minimo Valore massimo tempo 2:06 1:12 0:29 4:53 precision 0.90 0.11 0.59 0.98 recall 0.89 0.14 0.49 0.99 Char answer accuracy 96% 4% 85% 100% Answer accuracy 87% 9% 71% 98% Tabella 4: Approfondimento sugli indici medi di tutti i testi per tutti gli utenti. 32
  • 34.
    Testo: ​Bibtex-Author Indice Valoremedio Deviazione standard Valore minimo Valore massimo tempo 1:23 0:47 0:11 2:42 precision 0.8 0.41 0 1 recall 0.8 0.41 0 1 Char answer accuracy 95% 7% 83% 100% Answer accuracy 79% 26% 0% 100% Tabella 5: Approfondimento sugli indici di tutti gli utenti per il testo ​BibTex-Author. Testo: ​Bills-Date Indice Valore medio Deviazione standard Valore minimo Valore massimo tempo 2:31 3:03 0:24 11:53 precision 0.99 0.05 0.82 1 recall 0.98 0.08 0.72 1 Char answer accuracy 96% 10% 67% 100% Answer accuracy 96% 6% 85% 100% Tabella 6: Approfondimento sugli indici di tutti gli utenti per il testo ​Bills-Date. Testo: ​Email-Phone Indice Valore medio Deviazione standard Valore minimo Valore massimo tempo 4:24 3:24 0:28 12:12 precision 0.9 0.23 0.34 1 recall 0.82 0.28 0.28 1 Char answer accuracy 88% 13% 60% 100% Answer accuracy 76% 23% 33% 100% Tabella 7: Approfondimento sugli indici di tutti gli utenti per il testo ​Email-Phone. 33
  • 35.
    Testo: ​Log-IP Indice Valoremedio Deviazione standard Valore minimo Valore massimo tempo 0:47 0:28 0:09 1:49 precision 1 0 1 1 recall 1 0 1 1 Char answer accuracy 99% 1% 97% 100% Answer accuracy 94% 7% 80% 100% Tabella 8: Approfondimento sugli indici di tutti gli utenti per il testo ​Log-IP. Testo: ​Twitter-Hashtag+Citation Indice Valore medio Deviazione standard Valore minimo Valore massimo tempo 1:19 0:39 0:30 2:20 precision 0.88 0.27 0 1 recall 0.9 0.28 0 1 Char answer accuracy 99% 2% 94% 100% Answer accuracy 91% 22% 33% 100% Tabella 9: Approfondimento sugli indici di tutti gli utenti per il testo ​Twitter-Hashtag+Citation. Testo: ​Web-URL Indice Valore medio Deviazione standard Valore minimo Valore massimo tempo 2:43 1:49 1:00 6:36 precision 0.84 0.06 0.74 0,95 recall 0.87 0.06 0.76 0,92 Char answer accuracy 98% 4% 86% 100% Answer accuracy 84% 19% 50% 100% Tabella 10: Approfondimento sugli indici di tutti gli utenti per il testo ​Web-URL. 34
  • 36.
    Figura 18: Valoridel tempo medio di esecuzione su tutti i testi per ogni utente. Figura 19: Valori della ​precision​ media su tutti i testi per ogni utente. 35
  • 37.
    Figura 20: Valoridella ​recall​ media su tutti i testi per ogni utente. Figura 21: Valori della ​char answer accuracy​ media su tutti i testi per ogni utente. 36
  • 38.
    Figura 22: Valoridella ​answer accuracy​ media su tutti i testi per ogni utente. 37
  • 39.
    Conclusioni Il lavoro diquesta tesi si conclude con la realizzazione di un prototipo funzionante di un’interfaccia web in grado di selezionare automaticamente espressioni regolari partendo dagli esempi forniti dal richiedente. I risultati ottenuti in fase di sperimentazione si sono rivelati soddisfacenti sia in termini di tempo di esecuzione che di ​precision​ e ​recall​, soprattutto considerando l'accuratezza non sempre perfetta delle annotazioni e risposte date dagli utenti. Durante l’esecuzione dei test sono anche state raccolte informazioni su come il prototipo possa essere modificato in futuro per correggerne i difetti che sono emersi o per migliorarne ulteriormente le prestazioni. Buona parte di queste informazioni sono state inserite nel capitolo dedicato agli esperimenti. Tale prototipo, dunque, verrà affidato ad altri sviluppatori in futuro per poterne risolvere i dubbi emersi e per poterne estendere ulteriormente le funzionalità. Essendo il prototipo scomposto in front end e back end sostituibile, esiste la possibilità di utilizzare altri algoritmi di selezione estrattori e generazione query e verificarne i risultati confrontandoli con quelli ottenuti dallo ​stub​ attuale. Per quanto riguarda la semplicità di utilizzo, tutti gli utenti coinvolti nell’esperimento sono stati in grado di utilizzare l’interfaccia senza bisogno di leggere le istruzioni scritte, semplicemente seguendo delle brevi spiegazioni a voce fornite dal sottoscritto a ciascuno di essi. Alcuni utenti hanno familiarizzato immediatamente con i comandi diventando dei veri e propri esperti di gestione query da rispondere, altri hanno avuto bisogno di un po’ di tempo in più e di qualche tentativo extra ma alla fine tutti gli utenti sono riusciti a portare a termine con successo tutti gli incarichi iniziati. Un fastidioso particolare riferito da gran parte degli utenti durante gli esperimenti e non evidenziato nell’apposito capitolo è stata la difficoltà a selezionare col mouse esattamente la sottostringa desiderata senza “dimenticarsi” i primi o ultimi caratteri o senza selezionarne involontariamente qualcuno in eccesso. Tale problema viene segnalato in questo ultimo capitolo in quanto non è tecnicamente un errore di come è stata scritta l’applicazione, ma è piuttosto un problema di accuratezza delle selezioni effettuate dagli utenti. Ad ogni modo, un sentito ringraziamento per la disponibilità va alle 13 “cavie” che si sono offerte di sottoporsi all’esperimento con grande serietà e pazienza. Altri ringraziamenti vanno ai membri del Machine Learning Lab per avermi fornito e aiutato a comprendere il materiale che mi hanno fornito e ai docenti relatori per la chiarezza con cui hanno spiegato ogni incarico che mi hanno affidato per poter realizzare un buon lavoro. 38
  • 40.
    Bibliografia [1] Alberto Bartoli,Andrea De Lorenzo, Eric Medvet, Fabiano Tarlao. Interactive Example-Based Finding of Text Items. 2018. ​[citato a p. 18] [2] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, Fabiano Tarlao. Active Learning of Regular Expressions for Entity Extraction. 2017. [3] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, Fabiano Tarlao. Inference of Regular Expressions for Text Extraction from Examples. 2016. [4] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, and Fabiano Tarlao. Active learning approaches for learning regular expressions with genetic programming. 2016. ​[citato a p. 25] [5] Alberto Bartoli, Andrea De Lorenzo, Eric Medvet, and Fabiano Tarlao. Learning text patterns using separate-and-conquer genetic programming. 2015. ​[citato a p. 25] [6] Alberto Bartoli, Giorgio Davanzo, Andrea De Lorenzo, Eric Medvet, and Enrico Sorio. Automatic Synthesis of Regular Expressions from Examples. 2014. ​[citato a p. 25] [7] Sonal Gupta, Christopher D. Manning. SPIED: Stanford Pattern-based Information Extraction and Diagnostics. [8] Thomas Rebele, Katerina Tzompanaki, Fabian Suchanek. Visualizing the addition of missing words to regular expressions. [9] Burr Settles. Active Learning Literature Survey. Computer Sciences Technical Report 1648. 2009. 39