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