ESTRAZIONE DI ENTITÀ NON NOTE
DA CORPUS DI DOCUMENTI
NON STRUTTURATI UTILIZZANDO LA
TECNOLOGIA COGITO
Relatore:
Chiar.mo prof. Sonia Bergamaschi
Candidato:
Fabio Manganiello
~ Contesto
> Realizzazione di un software in grado di riconoscere e classificare in
base al contesto d'uso entità non note all'interno di corpus di
documenti non strutturati di grandi dimensioni
> Contesto: tirocinio trimestrale presso Expert System S.p.a., azienda
leader nel campo delle tecnologie semantiche
> Sviluppo del software sulla base delle librerie aziendali [e sulla
tecnologia proprietaria COGITO]
> Sviluppo del task di tirocinio: integrazione come modulo all'interno
del progetto Okkam, progetto semantico finanziato dall'UE
~ Obiettivo del software
> Realizzazione di un database di entità non note a priori (nomi propri di
persone, aziende, prodotti, luoghi...) con relativa classificazione in
base ai casi d'uso e potenziale definizione
ENTITÀ DI
PARTENZA
Apache
Tomcat
OBIETTIVO FINALE
> web server
> java
> installare
> open source
> software
~ Perché i corpus
> Non ha senso lavorare su singoli documenti o piccoli gruppi di
documenti
> Pochi elementi di classificazione
> Poche potenziali entità da classificare
> Potenziali occorrenze di entità usate al di fuori dei loro contesti
usuali
> Corpus usati in fase di test
>
>
>
>
Newton – utilme 5 annate (ca. 1500 articoli)
Enciclopedia della Storia del Cinema (ca. 100 000 voci)
Enciclopedia Encarta (ca. 200 000 voci)
Corriere della Sera – ultime 15 annate (ca. 1 000 000 articoli)
~ Architettura del sistema
XML
disambiguazione
client
documenti
dispatcher
database
risorsa opportuna
[server GSL]
~ Linguaggi utilizzati
> C++ [sviluppo del server GSL]
> Perl [sviluppo del client]
> XML [scambio delle informazioni server -> client]
> SQL [inserimento e analisi dei dati su database]
~ Client
Analizza struttura directory
Ci sono file f da processare?
[no]
[si]
Leggi f
Invia f al dispatcher
Leggi XML di risposta
Parsing XML
Salvataggio su DB
~ Server GSL
Associazione al dispatcher
Comando di disambiguazione arrivato?
[no]
[si]
Leggi documento
Costruisci tree di disambiguazione
Ottieni domini del documento
Ci sono word w da esaminare?
[no]
[si]
Ottieni supernomen virtuale, predicato,
soggetto/complemento di w e loro domini
Costruisci XML e invialo al dispatcher
~ Robustezza del codice
> Non conoscendo a priori il tipo di entità che verranno esaminate e
le dimensioni dei corpus da esaminare, è richiesto che
l'applicazione sia il più robusta possibile e operi con stretti margini
di errore in ogni situazione.
> XML generato sempre valido (parsing di eventuali doppi apici)
> Query SQL sempre valide (parsing di eventuali apici singoli,
misure contro SQL injection)
> Minimizzare l'allocazione di memoria dinamica per evitare
potenziali memory leak
> Ottimizzazione delle operazioni su DB (effettuare inserimenti o
aggiornamenti su database solo quando la cache di INSERT è
piena)
> Ottimizzazione delle query su DB (indicizzazione per ridurre I
tempi di query)
~ Analisi dei dati su Newton – 1
mysql> select dom,count(*)
> Risultati dell'analisi effettuata
sul corpus della rivista scientifica
Newton (visualizzazione dei domini
dei documenti associati all'entità
non nota “Hubble”
from doc_domains d join entity e
on d.id_doc=e.id_doc and e.ent='Hubble'
group by 1
order by 2 desc
limit 12;
+-------------------------+----------+
| dom
| count(*) |
+-------------------------+----------+
| aeronautica
|
15 |
| commercio
|
15 |
| astronautica
|
15 |
|
|
|
|
|
|
|
|
economia
astronomia
spettacolo
ingegneria aerospaziale
termini tecnici
architettura
diplomazia
missilistica
|
|
|
|
|
|
|
|
15
15
11
11
11
11
11
11
|
|
|
|
|
|
|
|
| astrofisica
|
11 |
+-------------------------+----------+
12 rows in set (0.00 sec)
~ Analisi dei dati su Newton – 2
mysql> select domain1,count(*) as num
> Risultati dell'analisi effettuata
sul corpus della rivista scientifica
Newton (visualizzazione dei domini
dei documenti associati ai lemmi
collegati all'entità non nota
“Hubble”
from entity_domains d join entity_synsets s join entity e
on e.id_occ=s.id_occ
and s.id_ent=d.id_ent
and ent='Hubble'
group by 1
order by 2 desc
limit 20;
+--------------+-----+
| domain1
| num |
+--------------+-----+
| astronautica | 14 |
| fotografia
|
1 |
| diplomazia
|
1 |
+--------------+-----+
3 rows in set (0.00 sec)
~ Progetto Okkam
> Progetto finanziato dalla UE per la creazione di una base di dati in
grado di gestire in modo automatizzato la conoscenza disponibile
in rete
output in XML
Modulo Okkam
documenti
disambiguazione
Database
distribuito
Okkam
~ Come opera il modulo
> Trova entità non note nel documento
> Per ogni entità non nota, memorizza lemmi
>
>
>
>
Usati nella stessa frase
Usati nelle due frasi adiacenti
...
Fino a una distanza in frasi d
> Peso dell'occorrenza i-esima della coppia (e,l)i :
− di
wi e , l = 2
> Peso complessivo della coppia (e,l):
w e ,l = ∑ i= 0 w i e ,l = ∑ i= 0 2
N
N
− di
~ Analisi dei dati – Corpus Corriere
mysql> select ent,lemma,score
from lemmas
order by score desc
limit 20;
> Risultati dell'analisi effettuata
sul corpus del biennio 2006-2007
del Corriere della Sera (coppie
entità-lemma più ricorrenti)
+-----------------+-----------+--------+
| ent
| lemma | score |
+-----------------+-----------+--------+
| Moratti
| sindaco | 686.5 |
| Prodi
| governo | 568 |
| Letizia Moratti | sindaco | 530.5 |
| Berlusconi
| governo | 356 |
| Moratti
| Milano | 284.75 |
| Letizia Moratti | Milano | 280 |
| Berlusconi
| Prodi | 237 |
| Palazzo Marino | Comune | 230.5 |
| Romano Prodi | governo | 208.75 |
| Vittorio Sgarbi | assessore | 193.25 |
| Moratti
| città | 177 |
| Romano Prodi | premier | 177 |
| Prodi
| premier | 159.25 |
| Sforzesco
| Castello | 157.25 |
| Veltroni
| sindaco | 156.5 |
| Lambro
| Parco | 140.75 |
| Palazzo Marino | assessore | 133 |
| Pirelli
| Telecom | 130.25 |
| Palazzo Marino | sindaco | 127.25 |
| Vittorio Sgarbi | Cultura | 124.5 |
+-----------------+-----------+--------+
20 rows in set (0.08 sec)
~ Considerazioni sull'analisi
> ...tuttavia lo score medio di pertinenza è sorprendentemente
basso...
mysql> select avg(score)
as "score medio"
from lemmas;
+-----------------+
| score medio |
+-----------------+
| 3.2243184912657 |
+-----------------+
1 row in set (0.02 sec)
> è quindi necessario fare una
scrematura post-analisi sul database
per eliminare il “rumore”
~ Conclusioni
> Le tecnologie semantiche sono il futuro dell'informatica
> in particolare del web (rilvoluzione del web 3.0 alle porte)
> Le tecnologie semantiche consentiranno l'abbattimento delle
barriere fra l'utente e un'informatica rigida e pragmatica, attraverso
un'informatica in grado potenzialmente di comprendere il
linguaggio naturale
> grazie_per_l_attenzione