Progettini BDM su Crossword Solving 06 Giugno 2006 Marco Ernandes e-mail: [email protected].
-
Upload
vinicio-la-rosa -
Category
Documents
-
view
214 -
download
2
Transcript of Progettini BDM su Crossword Solving 06 Giugno 2006 Marco Ernandes e-mail: [email protected].
CWDB: database di crosswordsClue Risposta Occorrenze
1 Un lago vicino a Brescia ISEO 1
2 Il celebre Alain DELON 23 Il celebre Alain PROST 1
4 Una città di lago COMO 2
5 Il suo lago si dirama COMO 16 Un lago che si dirama COMO 2
Un lago vicino a Brescia:
ISEO = 100%
Il celebre Alain:
DELON = 67%PROST = 33%
EXACT - MATCHLa città del lago che si dirama:
def 1 = 20% def 4 = 40%def 5 = 50% def 6 = 60%
ISEO = (1*0.2) = 0.2 = 7.5%COMO = (2*0.4)+(1*0.5)+(2*0.6) = 2.5 = 92.5%
PARTIAL - MATCH
CWDB: database di crosswords● CWDB è stato implementato con MySql.● Il partial-match è stato scritto nel modo seguente:
(1) PARTIAL_MATCH_QUERY = "select Clue, Answer, Occur, MATCH (Clue) AGAINST (<new clue> IN BOOLEAN MODE) AS score FROM IndexedTable WHERE MATCH (Clue) AGAINST (<new clue>) AND Length=<target length>";
(2) PARTIAL_MATCH_QUERY_QE = "select Clue, Answer, Occur, MATCH (Clue) AGAINST (<new clue> WITH QUERY EXPANSION) AS score FROM IndexedTable WHERE MATCH (Clue) AGAINST (<new clue> WITH QUERY EXPANSION) AND Length=<target length>";
● E' stato anche aggiunto un controllo sull'ordine delle parole per distinguere: “Quello buono non mente” --> SANGUE, da “Nella mente del buono” --> AMORE
SI PUO' FARE MOLTO MEGLIO!
PROGETTINI
● 3 Progettini proposti
(1) “Vector Space”(2) “LSI”(3) “Dijkstra”
● Motivazione:● Il CWDB contiene la parola target nel 70% dei casi.● EXACT-MATCH la trova nel 19%● PARTIAL-MATCH la trova nel 29%● C'è un ulteriore 22% da colmare!
Progettino 1: “Vector Space”
(1) Per ogni soluzione s nel database si costruisce un
documento d formato dalla concatenazione delle
definizioni che hanno s come risposta.
(2) Si costruisce un indice inverso termini-documenti del
tipo [t -> D if t in D ]
(3) Di ogni termine t dei documenti così ottenuti si
calcolano sia il TF (che forse potrebbe essere trascurato)
che il log-IDF. (probabilmente vanno identificate delle
stop-words: le n parole “corte” più frequenti)
E' un dinosauro della televisione --> BAUDO
Ha presentato molti festival di Sanremo --> BAUDO
E' stato in Rai e in Mediaset --> BAUDO
potrebbero diventare
[DINOSAURO TELEVISIONE PRESENTATO
MOLTI FESTIVAL SANREMO STATO RAI
MEDIASET] --> BAUDO
Progettino 1: “Vector Space”
(4) Arriva una nuova clue (definizione)
c = {tc1, tc
2, ... , tc
n} e la si trasforma in un
vettore nello spazio dei termini, con i rispettivi IDF (e
TF se risultassero utili).
(5) Grazie all' indice inverso si ottengono tutti i documenti
Dc associati ai termini tc1,tc
2,...,tc
n
(6) Per ognuno dei documenti ottenuti si calcola la similarità
con il “documento-clue”.
Progettino 1: “Vector Space”
(7) Le similarità servono quindi per ordinare le risposte
associate (dal database) ai documenti.
(8) La similarità può essere calcolata in vari modi:
• Distanza Coseno
• Prodotto Scalare
• Distanza di Jaccard
• Distanza Euclidea
Progettino 1: “Vector Space”
(10) Verrà fornito un set di ca. 40000 definizioni-soluzioni
(11) In una fase sperimentale potrebbe essere costruito il
sistema su ca. 30000 coppie e testato sulle restanti.
(12) Risultati da prendere in considerazione:
● Recall della parola-target (e k-Recall, con k=1, 5, 10, 50, 100)
● Posizione media della parola-target
● Score medio della parola-target VS. score della prima parola
● Lunghezza liste
Progettino 2: “LSI”
(1) Per ogni soluzione s nel database si costruisce un
documento d formato dalla concatenazione delle
definizioni che hanno s come risposta.
(2) Si costruisce una matrice M [termini->documenti]
(magari con gli score TF-IDF).
DOCUMENTO 1 DOCUMENTO 2 DOCUMENTO 3 ...
DINOSAURO 1 0 0
TELEVISIONE 2 1 0
RAI 1 1 2
MEDIASET 1 0 0
M =
Progettino 2: “LSI”
(3) Si fa la decomposizione a valori singolari della matrice
M (in Java, basta usare il Matrix Toolbox for Java – con
rappresentazione sparsa!) ottenendo:
M T
D
documenti
term
ini
term
ini
r r
r r
documenti
=
Tk
Progettino 2: “LSI”
(4) Si scelgono i primi k (con k=ca. 200 o 300) valori
singolari (presi in ordine decrescente) in modo da
ottenere un'approssimazione Mk di M:
Mk
documenti
term
ini
term
ini
k k
k k
documenti
Dk
=
Progettino 2: “LSI”
(5) Quando arriva una nuova clue c la si tratta come un
documento che, per essere comparato con gli altri, va
proiettato nello spazio k-dimensionale usato:
ck = cT T
k
k
(6) A questo punto va confrontato ck con i documenti
posseduti: si possono usare le distanze viste prima (es:
distanza coseno). I documenti proiettati nello spazio k-
dim sono le colonne della matrice Dk
Progettino 2: “LSI”
(7) Anche in questo caso si usano i risultati di similarità per
attribuire uno score alle risposte candidate.
(8) Il metodo sperimentale indicato per il Progettino 1 vale
anche in questo caso:
● analizzare recall, score del target, etc...
Progettino 3: “Dijkstra”
(1) Si possono rappresentare le relazioni di co-occorrenza
(e quindi di legame semantico) in un grafo.
Consideriamo, in questo caso, la soluzione come facente
parte del documento stesso.
Ha presentato molti festival di Sanremo --> BAUDO
E' stato in Rai e in Mediaset --> BAUDO
Inossidabile della canzone italiana --> VASCO
Festival della canzone italiana --> SANREMO
Progettino 3: “Dijkstra”
VASCO
CANZONE ITALIANA
SANREMO
FESTIVAL
BAUDO
MEDIASET
RAI
INOSSIDABILEPRESENTATO
● BAUDO non co-occorre mai con CANZONE e ITALIANA,
ma i nodi si trovano solo a distanza 2. Ed è a distanza 3 da
VASCO (con cui mantiene una relazione semantica).
Progettino 3: “Dijkstra”
(2) Il grafo può essere costruito così:– ogni termine rappresenta un nodo
– si collega il termine t1 e il termine t
2 con un arco diretto da t
1 a t
2
prendendo come peso la probabilità di co-occorrenza (dato t1): -
log ( # docs con t1 e t
2 / # docs con t
1 )
(3) Quando ci viene presentata una nuova clue, vanno trovate le parole (i nodi) che sono più “vicini” e con la maggior probabilità.
Progettino 3: “Dijkstra”
(4) Della clue c = {tc1, tc
2, ... , tc
n} vanno presi i singoli
termini. A partire da ognuno di questi si effettua una
ricerca, cercando il percorso a costo minore (le “negative
log probability” sono basse quando la prob è alta) tra il
termine tci e gli altri termini del grafo. Usando
l'algoritmo di Dijkstra (o “Uniform-cost Search”).
(5) Lo score di ogni candidata u ottenuta da tci sarà:
-log(# docs con tci) – w (costo min. del percorso tc
i -
> u)
(6) w è un peso da scoprire (trial&error)
Progettino 3: “Dijkstra”
(7) Per ogni parola della clue la ricerca nel grafo si può
fermare dopo n risposte trovate. Con n = ca. 500/1000.
Non dovrebbero servirne di più... (da studiare)
(8) I risultati delle ricerche portate avanti per ogni singola
parola verranno fusi sommando gli score in caso di
presenza molteplice della stessa candidata.
(9) Il metodo sperimentale indicato per i Progettini 1 e 2
vale anche in questo caso:
● analizzare recall, score del target, etc...
NOTA: “Algoritmo Dijkstra”
A
C
E
S B
D
1528
20
13
9
1112
L'algorimto di Dijkstra ci permette diricavare i “cammini minimi” in un grafo.
Il “cammino minimo” tra il nodo x e ilnodo y è quella sequenza di archi checollega x e y minimizzando la sommadelle distanze sugli archi.
Nell'esempio sopra:ci sono 4 percorsi diversi non ciclici che collegano S con C.1. Costo (S,B,A,C) = 52 3. Costo (S,D,B,A,C) = 692. Costo (S,B,D,E,C) = 51 4. Costo (S,D,E,C) = 44
(S-D-E-C) è il cammino minimo da S a C
NOTA: “Algoritmo Dijkstra”
S1
5
2
8
2
0 1
3
9
1
1
1
2
01
5
2
0
0+15
0+20
4
3
01
5
2
0
15+28
15+12
4
3
3
3
01
5
2
0 20+1
3
4
3
4
4
3
3
01
5
2
0
33+1
1
4
3
4
4
3
3
01
5
2
0
43+9
4
3
4
4
3
3
1
5
2
0
0
NOTA: “Algoritmo Dijkstra”
Implementazione:
(1) per grafi con pochi archi (matrice di adiacenza
sparsa), si usano le liste di adiacenza.
(2) va tenuta traccia dei nodi “non stabili” (gialli nella
figura) che vengono inseriti in uno heap per essere
mantenuti ordinati.
(3) Lo heap viene ordinato usando -dist(n)
(4) Passo 0: viene inserito nello heap il nodo di partenza
NOTA: “Algoritmo Dijkstra”
Implementazione:
(5) Ad ogni passo poi: si estrae la testa dello heap che
rappresenta il nodo non stabile a distanza minima dal
nodo iniziale: lo heap si riduce di 1 elemento.
(6) Si esamina la lista di adiacenza del nodo estratto n e
per ogni nodo n' della lista si verifica che: dist(n') > dist(n)+c(n,n')
Altrimenti si aggiorna: dist(n') = dist(n)+c(n,n') e si
riordina lo heap
Si ritorna a (5).