Sviluppo di un validatore visuale di annotazioni semantiche automatiche Roberto Navigli
Annotazioni semantiche It was a wrong number that started it, the telephone ringing three times in the dead of night, and the voice on the other end asking for someone he was not. City of Glass – Paul Auster algoritmo di WSD annotatore umano It was a wrong number that started it, the telephone ringing three times in the dead of night, and the voice on the other end asking for someone he was not.
Word Sense Disambiguation Risoluzione dell’ambiguità di una parola w contenuta in un contesto T rispetto a un dizionario di riferimento It was a wrong number that started it, the telephone ringing three times… C = { wrong, number, start, telephone, ring, time } w = number = selezione del senso più appropriato per w rispetto al contesto T, tra i sensi disponibili nel dizionario di riferimento
Analizzare i sensi del dizionario di riferimento
Algoritmi di WSD Basati su apprendimento automatico e “addestrati” su ampi corpora di documenti annotati a mano Richiedono un forte addestramento sul dominio di interesse Basati sulla conoscenza (knowledge-based) Richiedono un’ampia quantità di risorse lessicali (ad es. WordNet, CyC, ecc.)
Structural Semantic Interconnections (SSI) Un algoritmo knowledge-based ideato e sviluppato nel Dipartimento di Informatica de “La Sapienza” Basato sul concetto di “interconnessione semantica”: due concetti sono semanticamente interconnessi se esistono uno o più cammini “significativi” che li collegano
SSI (2) Dato un contesto di parole T = [w1, w2, …, wn] SSI sceglie per ciascuna parola wi il senso nel dizionario che massimizza le interconnessioni semantiche con gli altri sensi scelti He drank a coffee with milk at the bar T=[drink, coffee, milk, bar]
Il progetto Uno strumento visuale di ausilio all’utente per validare i risultati della disambiguazione automatica: Visualizza i grafi di interconnessione tra i sensi scelti da SSI Permette l’analisi dei cammini che collegano tali sensi cliccando sui singoli nodi Consente la validazione di ciascun senso e, in caso di responso negativo, permette all’utente di selezionare un senso differente
I grafi in input Memorizzati sotto forma di file xml. Esempio: <?xml version=“1.0” ?> <wordnet version=“2.0”> <context> <term name=“drink” pos=“v”>01134068</term> <term name=“coffee” pos=“n”>07452170</term> <term name=“milk” pos=“n”>07370228</term> <term name=“bar” pos=“n”>02692036</term> <path>01134068@02692036</path> … <path>01134068r>02774862r07370228</path> </context> </wordnet> Offset del senso di WordNet scelto Cammini tra S e S’, rispettivamente sensi di due parole, w e w’, tali che w ≠ w’
Formato dei cammini I cammini collegano due sensi arbitrari di due parole w e w’ specificate con il tag <term> Nota bene: sono presenti tutti i cammini, non solo quelli tra i sensi scelti da SSI Ad esempio: <path> 07452170r04209815#04212274~03003536~02692036 </path> codifica (i nodi “interni” hanno un colore differente): simboli del tipo di arco
Legenda delle relazioni All’inizio del file del grafo troviamo la legenda dei tipi di relazioni: <wordnet version=“2.0”> <legenda> <relation symbol=“@”>kind-of</relation> <relation symbol=“r”>related-to</relation> <relation symbol=“#”>has-part</relation> … </legenda> <context> </context> </wordnet>
Strumenti di base Xerces XML Jgraph JWNL Libreria per il parsing e la gestione di file XML Disponibile all’indirizzo: http://xml.apache.org/xerces2-j/download.cgi Documentazione di base (DOM): http://xml.apache.org/xerces2-j/dom.html Jgraph Libreria per la visualizzazione, la gestione e la memorizzazione di grafi http://www.jgraph.com Documentazione di base: http://www.jgraph.com/docs.html JWNL Libreria Java per l’accesso a WordNet http:// bla bla bla bla bla Documentazione di base: bla bla bla bla
Partire da un esempio Un buon esempio su cui costruire il tool è GraphEd.java che si trova nella cartella: examples\org\jgraph\example
Interfaccia utente Eliminate: L’opzione per l’inserimento di un nuovo nodo L’opzione per l’abilitazione/disabilitazione della modalità di disegno degli archi Fissate la modalità di spostamento dei nodi (eliminando la possibilità di aggiungere archi) senza possibilità di ingrandire i nodi del grafo Eliminate le opzioni di undo e redo, taglia/copia/incolla Mantenete le opzioni di ingrandimento/riduzione, ma aggiungete una barra di scorrimento nel caso in cui il grafo non entri per intero nella finestra e gestite lo scorrimento
Le prime modifiche Forma e colore dei nodi e degli archi Estendendo BasicGraphUI: class MyGraphUI extends BasicGraphUI { Scrivendo il metodo paintCell e lavorando sui tipi di cella DefaultGraphCell, DefaultEdge, DefaultPort: Una porta è un’area interna al nodo a partire da cui è possibile disegnare un arco che collega il nodo a un altro nodo. DefaultGraphCell DefaultEdge DefaultPort
Le prime modifiche (segue) public void paintCell(java.awt.Graphics g, CellView view, java.awt.geom.Rectangle2D bounds, boolean preview) { if (!(view.getCell() instanceof DefaultEdge)) g.setColor(Color.GREEN); g.fillOval((int)bounds.getX(), (int)bounds.getY(), (int)bounds.getWidth(), (int)bounds.getHeight()); g.setColor(Color.BLACK); g.drawOval((int)bounds.getX(), (int)bounds.getY(), (int)bounds.getWidth(), (int)bounds.getHeight()); } else super.paintCell(g, view, bounds, preview); Impostando dentro il costruttore della classe MyGraph: setUI(new MyGraphUI());
Salvataggio del grafo visualizzato in formato SVG Formato SVG (Scalable Vector Graphics) W3C: www.w3.org/TR/SVG/ Adobe SVG viewer: http://www.adobe.com/svg/ Potete basarvi su JGraphPad, che carica e salva SVG www.jgraph.com/jgraphpad.html <svg> <circle x=“10” y=“1”></circle> <circle x=“25” y=“24”></circle> <circle x=“30” y=“33”></circle> </svg>
Contesti con layout dei nodi modificato E’ possibile salvare la disposizione dei nodi del grafo all’interno del file xml dei contesti. Tale disposizione può quindi essere ricaricata dal medesimo file in seguito. E’ sufficiente memorizzare nel file xml le informazioni di posizione di ciascun termine: <term name=“coffee” pos=“n” x=“10” y=“20”> 07452170 </term> Se al caricamento di un contesto nessuna posizione è specificata per i vari termini (di norma o tutti hanno una posizione o nessuno la possiede) viene applicato il layout automatico (vedi diapositiva seguente): <term name=“coffee” pos=“n”>07452170</term>
Disposizione automatica dei nodi Al caricamento di un grafo, se non è presente alcuna informazione di layout nel file xml, deve essere applicata una disposizione automatica dei nodi sul piano in modo da minimizzare il numero di archi incrociati (possibilmente = 0) http://java.sun.com/applets/jdk/1.1/demo/GraphLayout/ http://directory.google.com/Top/Science/Math/Combinatorics/Software/Graph_Drawing/
Evidenziazione di cammini Cliccando su un nodo, il nodo deve essere evidenziato e i pattern (specificati in input) che collegano quel nodo ad altri nodi del grafo devono essere anch’essi messi in evidenza (ad es., più spessi o di un altro colore)
Evidenziazione di cammini Cliccando su un nodo, il nodo deve essere evidenziato e i pattern (specificati in input) che collegano quel nodo ad altri nodi del grafo devono essere anch’essi messi in evidenza (ad es., più spessi o di un altro colore)
Validazione Possibilità di modificare il senso di un concetto (tasto destro sul nodo elenco dei sensi possibili in WordNet per la parola selezionata) il grafo viene modificato sulla base della nuova selezione Quando l’utente modifica il senso di una parola, appare una x accanto al concetto: coffee#1 x coffee#4 coffee#1 – “a beverage consisting of an infusion of ground coffee beans” coffee#2 – “any of several small trees and shrubs native to the tropical...” coffee#3 – “a seed of the coffee tree; ground to make coffee” coffee#4 – “a medium to dark brown color”
Salvataggio della validazione Il file salvato è ancora un file di contesti e può essere aperto successivamente per un’ulteriore validazione Esempio: <?xml version=“1.0” ?> <wordnet version=“2.0”> <context> <term name=“drink” pos=“v”>01134068</term> <term name=“coffee” pos=“n” correct=“04714068” > 07452170 </term> <term name=“milk” pos=“n”>07370228</term> <term name=“bar” pos=“n”>02692036</term> </context> </wordnet> Indica la correzione apportata dal validatore con il tasto destro del mouse
Struttura del progetto Caricamento, memorizzazione e salvataggio dei contesti validati Interfaccia grafica (menu, toolbar, menu contestuale) Salvataggio del grafo in SVG Disposizione automatica dei nodi Evidenziazione dei cammini