All chapters Flashcards

1
Q

Search engine, quante generazioni abbiamo e caratteristiche di queste ultime.

A

5 generazioni: 0) semplice, basata su metadati. 1) Basata su contenuto della web page. 2) Introduzione di Anchor text e tiene in considerazione hyperlinks. 3) Si tiene in considerazione Query precedenti degli utenti. 4) Abbiamo un summit delle info, tramite information supply.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Parole possono 2 alcune caratteristiche importanti nei search engine, descrivile:

A

Polisemia (Stessa parola concetti diversi) , sinonimo (Parole diverse, stesso concetto)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Come è cambiato paradigma di Search engine?

A

Prima avevamo query semplici, oggi invece query colloquiali. Abbiamo anche interazione tra IoT devices.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Tipologia di dati

A

Opportunistici, come carte di credito o chiamate telefoniche, utilizzati in modo opportunistico dalle società.
Dati presi con uno scopo, un esempio di questi sono i dati raccolti da sensori.
Dati forniti dall’utente, come quando viene utilizzato un social.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Definizione di information retrieval

A

Indica il trovare del materiale di tipo non strutturato in una grande collezione di elementi che risolve un bisogno di un utente.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Dati strutturati vs non strutturati, esempio entrambi.

A

Database hanno dei dati di tipo strutturato, mentre in information retrieval abbiamo dati semi strutturati come XML o JSON.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Perchè non usare un DB tradizionale per search engines?

A

Poichè se immaginiamo solo wikipedia, abbiamo 1 mil pagine e 1 mil di parole . Troppo grande e documenti non contengono 1 milione di parole diverse, quindi abbiamo tanti zero.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Soft AND vs Hard AND

A

Quando effettuiamo una query, soft AND utilizzato anche da Google, rimuove alcune parole troppo stringenti dalla query a differenza di Hard AND che le richiede tutte.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Perchè usiamo Inverted index e come funziona?

A

Poichè salviamo spazio e tempo. Nello specifico creiamo una lista di token, e per ogni token associamo quelli che sono i documenti contenti il token. Approccio naive per il confronto sarà confronto (n * m) elementi. Approccio ottimizzato (n + m) confronti, poichè teniamo ordinata lista dei documenti.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Se avessimo più di due token come effettuiamo operazioni di confronto? potevo usare un metodo più ottimizzato del primo descritto?

A

In questo caso partiamo da token con minor numero di documenti, in modo da mantenere piccola dimensione di documenti aventi token che ci interessano. Metodo più ottimizzato in questo caso sarebbe utilizzare binary search e non confronto lineare.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Come ottimizzare query in inverted index?

A

Possiamo usare skip pointers, possiamo muoverci tra blocchi la cui dimensione ideale è sqrt(n) elementi, poichè blocchi troppo grandi pochi skip, blocchi troppo piccoli sostanzialmente inutili.
Altro metodo recursive merge, che tramite binary search + ricorsività va a scartare alcuni elementi della lista, molto elegante ma ricorsività può essere pesante per il sistema.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Problema delle queries con OR NOT

A

In questo caso query molto pericolosa, poichè dobbiamo unire due liste di docs, una che rispetta prima proprietà e seconda che non rispetta seconda proprietà (“Lista enorme”).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Differenti tipologie di queries.

A

4 tipologie di queries:
Phrasal: Match perfetto, dobbiamo salvare posizione dei token nel doc.
Proximity: Token si trovano a distanza al più k
Zone/Field queries: Parti del documento di lunghezza variabile (autore, dove scritto, contenuto) , vogliamo sapere se contengono un token che ci interessa. Possiamo salvare o per ciascun token, il field dove contenuto o i token salvati in modo classico e docs contengono reference a field.
Similarity queries: abbiamo token diversi con stesso significato, utilizziamo knoledge graphs.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Com’è strutturato un search engine?

A

Abbiamo back end: un crawler che analizza il web, un page archive dove vengono salvate le pagine web. Page analyzer che si occupa di analizzarle e costruire inverted index tramite indexer.
Mentre il front end è quello che utilizziamo che a partire dalle queries ci restituisce le pagine in ordine di importanza.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Che db viene utilizzato per salvataggio di dati da Page archive ecc..

A

Vengono utilizzati no sql, che permettono di gestire big data tramite delle table “infinite”. Che tramite stringhe permettono di accedere ad altre stringhe.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Descrivimi struttura Bow Tie del web

A

Abbiamo 5 componenti fondamentali:
Strongly connected components, che sono componenti che permettono partendo da uno di loro di tornare al componente di partenza.
In, che permettono di arrivare agli strongly connected components, ma non a quelli di partenza.
Out, partono da strongly connected components ma non tornano a questi ultimi.
Tubes, che portano da IN ad OUT, senza passare per SCC.
Tendrils, che portano verso vicoli ciechi.
Disconnected components, non interessanti non puntano e non sono puntati da SCC, IN o OUT.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Quando creiamo crawlers da dove partire come parte del web?

A

Partiamo da IN, ovviamente non essendoci
distribuzione delle pagine uniforme le pagine da cui partiamo sono decise in modo “arbitrario”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Come scegliere le pagine da cui effettuare crawling? Quanto fare crawling? E quanto spesso?

A

Migliori in relazione al tipo di search engine che costruiamo, dobbiamo evitare spider traps “pagine dove entriamo e troviamo tutti contenuti inutili” e spam “pagine offensive o non interessanti”.

Il crawling va effettuato con tradeoff tra pagine già visitate e pagine nuove.

Alcune pagine hanno bisogno di aggiornamento continuo come newspapers, altre come quelle universitarie di un crawl molto più limitato.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Come funziona life cycle di un crawler?

A

NOTA CHE FRONTIERA SI PORTA DIETRO LINKS VISITATI; ASSIGNED REPOSITORY GESTISCE LINKS DA VISITARE

Il crawler si porta dietro una frontiera di links inizializzati con seed urls. Assegnamo tramite il crawler manager i link da visitare secondo un ordine. Da questi vengono scaricati links tramite Page Downloader, nel Page Repository. Da quest’ ultimo poi il link extractor si occupa di analizzare una pagina per scegliere links da inserire nuovamente nell’Assigned repository. Importante i links potrebbero appartenere ad host diversi, oppure link già visitati.
Abbiamo più crawler che lavorano in parallelo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Condizioni di terminazione per un Crawler

A

Varie, esempi non ci sono altre pagine oppure time limit.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Come verificare se una pagina P è buona per un Crawler?

A

BFS, DFS, RANDOM.
POPULAR DRIVEN, ogni pagina ha uno score come Page Rank.
TOPIC DRIVEN.
COMBINATI.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Descrivi come funziona Mercator Crawler

A

Abbiamo URLs incontrati, un prioritazer che assegna priorità ai vari URLs. K front end queue dove inseriamo elementi basandoci sulla priorità. Questi elementi vengono scelti in modo biased da un biased selector (priorità maggiore, possibilità maggiore di essere scelti). Back end BE queue che servono per gestire vari host, ogni queue ha un host assegnato. Quando prendo elementi da BE li inserisco in min heap basato su tempo di attesa con host per non incorrere in blocco per troppi accessi.
Quando prendo nuova pagina da inserire in Min heap potrei trovare queue vuota, in quel caso prendo una pagina da front end e la inserisco nella relativa queue, se non presente la queue vuota viene assegnata al nuovo host.

Prima pagina da cui effettuare Crawling è la minore del min heap.

Buon valore per B = 3 x numero di thread.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Errore nel bloom filter

A

Dato da (1 - e^ (-k n / m))^k . Dati n, m fixed possiamo settare k = (m/n) ln 2 . In questo modo otteniamo errore uguale ad 0.62^ m/n

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Differenza tra bloom filter e hash map.

A

Per hash map noi possiamo avere dimensione array di hash = numero di chiavi. Ma dobbiamo salvare una lista di chiavi per quando incontriamo una collisione. Quindi scopi differenti.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Quanto vale errore nello spectral bloom filter

A

Vale come quello del bloom filter, infatti se ho un errore vuol dire che ho collisioni per tutti gli elementi. Ma questo proprio errore bloom filter poichè non posso avere valori minori di valore reale.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Come posso ottimizzare spectral bloom filter?

A

Uso due spectral bloom filter, SPF2 &laquo_space;SPF1, con hash functions ovviamente differenti. Se presente recurring minimum uso quello, altrimenti inserisco elementi partendo da Single minimum.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Crawling parallelo che tipologie posso avere

A

Static assignment, prevede assegnazione ad ogni crawler di una specifica porzione del web.
Dynamic assignment, prevede assegnazione tramite hash function che restituisce un valore per ogni url tra [0, c - 1] con c numero di crawlers.

Consistent hashing ci permette di assegnare urls tramite fault tollerance.

Utilizzo un ring, dove nodi sono o servers o urls, leggo clock wise ed il primo server che incontro gestirà tutti gli urls.
Il remapping nel caso di aggiunta o rimozione di server riguarda n/s elementi.
Per boostare possiamo prendere s log s servers, visto ad AE, quindi non credo mi interessi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Quali proprietà utilizzo per la compressione del web graph?

A

Utilizzo tre proprietà:
- Skewed, ossia probabilità che un nodo abbia x links = 1/x^alfa dove alfa è una costante che vale circa 2.1. Questa tipologia di distribuzione è chiamata power law, difficile da distinguere da polinomiale ad occhio nudo, quindi applichiamo log a y = x^-alfa. In questo modo ottengo una funzione lineare data da log 2 y = -alfa log 2, utilizzando un grafo log log scale (1 2 4 8).
Power law indica anche numero di strongly connected components ed altre proprietà del web.
-Locality, molti link in un dominio riportano a pagine dello stesso dominio
-Similarity, pagine dello stesso dominio condivideranno molti link.

Basandomi su queste 3 proprietà posso usare Web Graph Compressor algorithm.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Come funziona LSH? Quali sono due versioni dell’algoritmo?

A

Locality sensitive hashing algorithm si basa su Hamming distance (numero di bits differenti), che permette di costruire similarity partire da un bit vector che rappresenta un elemento = numero di bits totali - Hamming distance / bits totali.
Se effettuiamo delle proiezioni di un elemento per confrontare due vettori, evitando costo lineare per confronto, possiamo vedere come probabilità che vettori dichiarati uguali = similarity s. Se effettuiamo k proiezioni s^k.
Probabilità di errore quindi 1 - s^k.
k è inversamente proporzionale a falsi positivi e direttamente proporzionale a falsi negativi.

LOCALITY SENSITIVE HASHING
Parte da questo concetto, iterando per L volte, con proiezioni di dimensione k. Crea una fingerprint di un vettore con tutte le proiezioni di dimensione k. La probabilità che ci siano dei falsi positivi = 1 - [1 -s^k]^L

Abbiamo due versioni algoritmo:
Offline, che costruisce le varie proiezioni, per poi ordinarle in base al i-esima proiezione trovando vettori simili. Una volta fatto questo costruisce connected components, per i quali vale proprietà transitiva. Si avanza i e si ordina per successiva proeizione.

Online, abbiamo L hash table, dove inseriamo ogni proiezione. Se collisione inseriamo piu elementi. Per ogni query L accessi alle hash table, per tutti i documenti retrieved poi effettuo confronto tra vettori, volendo evitare false positives. Dove numero di celle per hash table = 2^k. Poichè k posizioni possono rappresentare 2^k elementi.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

K-Means vs LSH

A

K-Means trova local optimal, mentre LSH trova clusters con alta probabilità.

K-Means compara vettori, LSH compara sketch.

K-Means richiede poche iterazioni, mentre LSH elementi piccoli, pochi scan.

K deve essere conosciuto in anticipo per K-Means, mentre LSH non deve conoscerlo in anticipo.

Posso applicare K-Means ad LSH.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Come trovare duplicati Exact Match?

A

Per exact match posso:
-Fare confronti brute force tra tutti elementi
-Fare confronti tra tutti elementi, ma solo di fingerprint
-Ordinare fingerprint ottenute in modo da ottenere cluster di elementi uguali
Algoritmo che utilizzo per fingerprint Karp Rabin, tra pattern da matchare e documento.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Proprietà del Karp Rabin

A

Rolling hash: Permette di calcolare da fingerprint precedente successiva.
Probabilità di collisione basata su proprietà algebrica: collisione -> A - B mod p = 0.
A - B = C, posso riscrivere C come prodotto numeri primi, numeri primi che sono divisibili per p contenuti in C sono al più m.
Poichè C viene fuori da fingerprints c1 * 2^m-1 + c2 * 2^m-2 ..+ cm * 2^0.
m * log(U) / U, dove U/log(U) = numero di primi compresi tra 0, U.
Efficienza, permette di calcolare senza effettuare recomputing from scratch.

33
Q

Come trovare Near Duplicate Documents? Ricorda che LSH non è metodo principale…

A

Utilizzo:
Shinglings che sarebbero subset di documento originale di dimensione q, scelta tra 4 e 8 di solito.
Se documenti condividono molti shinglings, allora partial match.
Jaccard similarity: Similarity tra due documenti è data da numero di shinglings uguali / numero di shinglings totali.

Min hashing tecnique ci permette di salvare spazio applicando una permutazione agli shinglings, trasformati in integer , permutazione possibile a * x + b mod 2^64.
Prendo poi il minimo tra queste permutazioni, per ogni doc, per verificare match.
Probabilità che min sia uguale è proprio Jaccard Similarity, poichè per essere uguali P(min perm(A U B) = min perm(A /\ B)) = |A /\ B| / |A U B|.
Possiamo migliorare algoritmo utilizzando sketch, ossia k permutazioni differenti, di cui salviamo min. Per confrontare numero di uguaglianze. Dando come risultato finale, numero di elementi uguali / k.

Cosine distance:
Cosine similarity compresa tra 0 e 1, dove 1 indica documenti uguali.
dati due vettori di elementi da confrontare appartenenti ad R^n (vettore dizionario), cosine similarity = p * q / ||p|| * ||q||.
Applichiamo ora sketching , prendendo k vectors appartenenti sempre ad R^n.
Con questi k vectors costruisco sketch vector, di dimensione k, dove ogni elemento dato da segno del prodotto tra vettore p e vettore randomico.
Probabilità di errore = Prob che due sketches siano uguali = 1 - alfa / 180. Questo poichè numero di possibili tagli che portano i due valori ad essere diversi -1 e 1 è dato da alfa, sopra numero di possibili tutti i possibili angoli del hyperplane perpendicolare.

34
Q

Time complexity di Near duplicates?

A

Naive: O(n^2 * l)
Sketches: O(n^2 * s), s = sketch dimension
Sketching + clustering: O(k * n * i * s)
Sketching + LSH: O(L * sort(n))

35
Q

Come costruire index?

A

4 Tecniche:
SPIMI single pass in memory indexing:
Costruisco dizionario di lunghezza variabile, quando pieno raddoppio dimensione posting list. Una volta terminata costruzione del documento sorto i termini nel dizionario e scrivo su disco.

Multi way merge sort: ho vari blocchi già ordinati, devo mergiarli in modo ordinato, posso fare questo in memoria. Ovviamente non carico tutte le pagine in memoria, ma di solito prendo 1 pagina da ogni input file, e inserisco 1 minimo per volta. Posso fare più passaggi.

Indexing parallelo: Basato su Map reduce, abbiamo task di parsing per prendere termini e inverter per creare coppia termine -> Doc IDs.
Gestione di due tipi, 1 ogni macchina gestisce solo termini di una parte alfabeto es. [a,c] , in questo modo ogni macchina si porta dietro solo una porzione di liste.
Seconda gestione ogni macchina gestisce solo alcuni docs, in questo caso gestione piu difficile poichè ogni macchina si porta dietro lista completa dei termini.

Indexing dinamico: permette di gestire collezioni dinamiche (possibilità di eliminare, aggiungere elementi), in questo caso per gestire posso utilizzare index principale ed index ausiliario, più un bit vector per tenere traccia delle eliminazioni. Quando leggiamo un valore dobbiamo passare per bit vector per essere sicuri che valore non sia stato eliminato.
LOGARITHMIC MERGE permette di usare una serie di indici di dimensione incrementale M, 2M, 4M, … fino ad arrivare alla struttura su disco. In questo modo quando effettuo operazioni parto da M, se piena sposto in 2M ricorsivamente.

36
Q

Quali steps posso usare per elaborare tokens da un documento?

A

-Rimozione degli stop words
-Normalization dove rimuoviamo alcuni simboli dalle parole per rendere uguali tokens e queries. Intervento umano richiesto, alcune parole possono avere significati differenti in base a rimozione stop words.
-Case folding, porto tutto in lower case.
-Thesauris, costruisco delle classi di equivalenza per sinonimi.
-Stemming, taglio parte finale
-Lemmatization, vado a portare tutti i verbi infinito, ecc.

37
Q

Quali steps posso usare per elaborare tokens da un documento?

A

-Rimozione degli stop words
-Normalization dove rimuoviamo alcuni simboli dalle parole per rendere uguali tokens e queries. Intervento umano richiesto, alcune parole possono avere significati differenti in base a rimozione stop words.
-Case folding, porto tutto in lower case.
-Thesauris, costruisco delle classi di equivalenza per sinonimi.
-Stemming, taglio parte finale
-Lemmatization, vado a portare tutti i verbi infinito, ecc.

38
Q

Descrivimi proprietà statistiche di un testo

A

Zipf law, indica che pochi token sono frequenti, una parte di dimensione media, ha frequenza media. Ed una larga parte è rara.
Basandoci su questo possiamo dire che il k-esima elemento piu frequente ha frequenza = c “costante” / k.
Abbiamo anche General law, dove frequenza = c / k ^ alfa, dove alfa compreso tra 1.5 e 2. Possiamo per visualizzare meglio, applicare log ad entrambi i valori e visualizzarli su un log log plot.

Heaps law, indica che il numero di termini distinti all’aumentare del numero di termini cresce seguendo n^beta dove beta < 1, solitamente utilizzato 0.5.

Luhn law, indica che i termini che ci interessano maggiormente in un documento sono quelli con frequenza media, dato che quelli rari e quelli troppo frequenti non sono cosi rilevanti.

39
Q

Come posso comprimere dictionary?

A

Lossy, non vista al corso.
Loseless:
-Array di dimensione fixed, in questo caso ho una tabella con 20 bytes per salvare parola, in caso troppo poco non riesco a gestire parola e se troppi sto sprecando bits.
-Dizionario come stringa, salvo puntatore a termini. Salvo circa 60% spazio
-Con blocking posso salvare ancora più spazio, poichè per ogni blocco uso un solo puntatore, ovviamente stringa deve portarsi dietro dimensione di ciascuna parola.
-Front coding, permette di salvare interno della stringa carattere * che indica che substring successive alla parola attuale indicano parole diverse con stessa radice.

40
Q

Tipologie di ricerca in un index?

A

-Binary search.
-Hash table, buona ma da possibili errori, se usassimo hash perfetto restituirebbe parola esatta, mentre noi vogliamo parole con stessa radice spesso.
-Trie, struttura ad albero in cui ogni parola è un percorso. Molto buona, possibili problemi cache miss poichè usiamo puntatori, molto grandi quindi conviene o usare compact trie, che invce di salvare ogni char, accorpa più char quando percorso non ha possibili diramazioni. Ancora meglio utilizzo Pointerless rappresentation dei tree.

41
Q

Cosa posso tenere in considerazione per capire se una parola è scritta correttamente? Due metodi semplici

A

Isolated words, parole che hanno un misspelling non basato sul contesto, ma non sempre corretto.
Context-sensitive, in base al contesto capiamo quale migliore parola.

42
Q

Come funziona spelling correction, come posso fixare parola? Hint. Ho bisogno solo di una cosa

A

Mi porto dietro un lexicon (dizionario dei termini conosciuti) e data una sequenza di chars restituisco la parola più vicina dal lexicon.

43
Q

Misure per cercare vicinanza tra parole

A

Idea iniziale cerco tramite brute force distanza tra tutte le parole.

Edit distance, quante modifiche di chars (delete, insert, substitute, transposition “inversione di due lettere”) effettuo per arrivare a parola desiderata.
Costo s1 * s2, posso migliorare cercando edit distance di al più D. In questo caso costo = max s1, s2 * D.

Weighted edit distance, tiene conto della distanza dalla lettera typed con quella possibile.

n-gram distance.

44
Q

One-error correction parlamene e come gestirlo

A

Invece di confrontare mia parola con tutte le possibili, accetto un solo errore (insertion, deletion, sub).
Data L lunghezza stringa, numero possibili varianti ammettendo 1 solo errore = L “deletions” + (L + 1) * A “Insertions” + L * (A - 1) “sub”.
Per effettuare confronto tra le due stringhe posso costruire un dizionario contenente tutte le possibili variazioni di un solo char.
Effettuo poi query per perfect match, e seguendo tutti gli edit richiesti.
Posso avere un falso positivo se gestisco tutto con hash, a meno di utilizzare un hash perfetto.

45
Q

Cosa è overlap distance?

A

Creo un k-gram index per doc (index che contiene ogni k gram a cui associata una lista di parole che contengono quel k gram).
Creo un altro k gram index per query, partendo da questi due valori e confronto. Errore possibile E (edit distance), indica che accetto k * E valori differenti come threshold.
Perchè usiamo questa formula con k per errore, poichè ogni char differente, rende differenti “k” k-grams.
Sarebbe utile utilizzare context sensitive spell correction, ma troppo costoso, usato solo quando ottengo pochi risultati.

46
Q

Wild-card queries come funzionano

A

Query nella forma parola* , parola, parola.
Uso permuted index $parola, a$parol, la$paro.
X cerco X$.
X# cerco $X#.
#X cerco X$#.
#X# cerco X# senza $.
X#Y cerco Y$X#.

47
Q

Soundex come funziona?

A

Mantengo prima lettera, sostituisco alcune lettere con “0”, altre lettere con numeri, accorpo numeri consecutivi, rimuovo 0, restituisco primi 4 valori.

48
Q

Come misurare qualità di un search engine, quali parametri?

A

Precision: percentuale di documenti retrieved che sono rilevanti rispetto al totale dei documenti retrieved.
Recall: percentuale di documenti retrieved che sono rilevanti rispetto a tutti i documenti rilevanti.
F1= 1/2 p + 1/2 r.
Precision at K results con K = 1 o 5 o 10. Quale è precisione dei primi K risultati? Utile poichè non posso scannerizzare tutti i documenti possibili e quindi mi baso solo sui primi K.

49
Q

Cosa si intende per collocation delle parole?

A

Per collocation intendiamo parole che rispettano 3 features:
-Limited compositionality: Parole da sole non mi danno significato della collocation
-Non sostituibili: non possiamo sostituire altre parole e mantenere stesso significato
-Non modificabili: non possiamo aggiungere altre parole, altrimenti cambia

50
Q

Come funziona il Tag pattern?

A

Assegnamo ad ogni token un tag: attributo, nome e proposizione.
Ora costruisco insiemi di due/tre elementi, salviamo numero di occorrenze, filtrando alcune coppie come AA che sicuramente non ci interessa.
Dobbiamo anche tenere in considerazione flessibilità, ci limitiamo a finestre di dimensioni k, poichè alcune parole potrebbero essere accoppiate, anche se ad uno o due token di distanza, quindi teniamo in considerazione media e varianza della distanza. Ovviamente se varianza alta coppia potrebbe non essere rilevante.
Per essere sicuri possiamo effettuare query log check, se coppie non cercate tra milioni di query, non rilevanti.

51
Q

Come funziona Pearson’s Chi sqare test

A

Vogliamo comprendere di quanto frequenza di una coppia sia differente rispetto ad una distribuzione uniforme delle parole.
Per fare ciò creiamo una matrice di dimensione nn, dove n è numero di parole nella coppia. Ogni elemento della matrice indica numero di occorrenze di combinazioni tra parole presenti e non presenti.
Partendo da matrice possiamo costruire Chi-square value:
X^2 = sommatoria per tutti i possibili i, j( frequenza attuale - frequenza avg)/ frequenze avg.
Il valore X^2 viene confrontato con P-value che possiamo scegliere in base a errore che vogliamo, questo P-value è dato da tabella dei degree of freedom. Il degree of freedom (r-1)
(c-1) dove r e c sono il numero di righe e colonne della matrice precedente.

52
Q

Rake Rapid Automatic keyword extraction come funziona?

A

Funziona su una piccola quantità di documenti, non ha bisogno di training set, veloce e non ha bisogno di supervisione.
Diamo in pasto a rake set di delimitatori, stop words.
4 steps:
- Trovare keywords candidate, splittando documento tramite delimitatori.
- Assegnare score alle keywords candidate: nella matrice andiamo ad inserire numero di occorrenze sulla diagonale (dove reinseriamo keyword), mentre colonna riga indica corrispondenze tra parola colonna e parola riga.
Possiamo calcolare quindi frequenza (elemento su diagonale) e degree (somma tutte colonne), otteniamo cosi punteggio parola (degree(parola) / freq(parola)).
Score di keyword comulativa = somma score di ogni singola keyword che compone keyword maggiore.
-Adjoining keywords: alcune parole non considerate poichè contengono stop words, in questo caso verifico se presente almeno due volte, assegno quindi punteggio considerando che keyword if non ha score.
-Delle keywords ottenute prendo un terzo.

53
Q

Phrase queries come risolverle?

A

-2 word indexes: salvo bigrams del documento e la query viene trasformata in coppie two words e su quelle effettuo ricerca AND.
Ottengo superset delle reali soluzioni.
-Indice posizionale: aggiungo posizione agli elementi per verificare posizioni ed è utilizzato anche per effettuare proximity queries.
-Combino: Two words e indice posizionale, poichè two words molto utile per parole come “Micheal Jackson”.
-Soft AND: Ritorno fino a quando non ottengo K elementi:
Phrase query.
AND tra 2-gram.
Vector space query con singoli termini.
Rank dei risultati e return.

54
Q

Caching per velocizzare queries come funziona

A

Ho due metodi che posso utilizzare per velocizzare le queries:
-Cache dei query results, problema poichè spesso risultati molto cachati possono essere invalidati dopo poco
-Cache delle posting list relative ad ogni termine

Posso utilizzare anche tier levels, per salvare in memoria in base al livello di una posting list, ovviamente i livelli più importanti salvano posting lists in memorie più veloci.

55
Q

Skip pointers come scegliere dimensione blocchi?

A

Dimensione blocchi di solito rad(n), ma se conosco distribuzione dei documenti mi conviene utilizzare dei blocchi minori per documenti con alto score.

56
Q

Differenza tra gzip e lz77

A

Gzip libreria che usa compressione (LZ77) con windows di size: -1,..,-9 le windows indicano di quanti chars posso retrocedere.

57
Q

Tecniche standard per velocizzare invio dei dati

A

Caching salvo oggetto per riutilizzarlo, importante che oggetto sia atomico rispetto alle modifiche.
Compression elimino ridondanza da dati che invio

58
Q

Delta compression come funziona?

A

E’ una tecnica basata su common knowledge condivisa tra sender e receiver.
Utilizzata da tools come diff, zdelta, REBL.
Se applicata ad un file fnew di cui abbiamo vecchia versione fold deve restituire fdelta.
fd = gzip(fnew|fold), per applicare gzip mettiamo fold e proviamo a scrivere fnew in funzione di fold.

59
Q

Come posso con zdelta ottimizzare Web Access?

A

Pongo cache tra sender e receiver, nel proxy , qui salvo pagine già visitate.
Per utilizzare tutte le pagine visitate posso accorpare tutte pagine in cache e chiamare il tutto fknows, molto pesante.

60
Q

ZDelta applicato a più files come funziona?

A

Creo un grafo pesato, che parte da un modo eps ed ogni nodo rappresenta un file, eps rappresenta file vuoto. Arco pesato indica dipendenze tra file e qual’è lunghezza di fdelta.
Peso quadratico. Una volta che ho il grafico dobbiamo trovare directed minimum spanning tree .
Per ottimizzare posso clusterizzare in modo da avere molti strongly connected components
Posso stimare pesi invece di calcolarli

61
Q

Come funziona rsynch?

A

Il client richiede fnew, inviando hash dei blocchi di fold. Fold viene diviso in blocchi di dimensione B, più grandi blocchi più copio ma più possibilità che blocchi non possano essere usati poiché un solo char mi invalida blocco.
Partendo da hash dei blocchi di fnew che già conosce client può ricostruire fnew.

62
Q

Zsync come funziona?

A

Evoluzione di rsync, basato su client più potenti che permettono di ridurre overhead su server. Interazione inizia dal server che invia hash values dei blocchi di fnew. Client verifica corrispondenza con sliding window che avanza di una sola posizione per volta, obbiettivo ottenere più match possibili. Client invia al server bitmask con 1 se contiene iesimo hash value. Server a questo punto invia valori mancanti.

63
Q

Text based ranking tra due documenti come funziona?

A

Il text based ranking é dato da dimensione intersezione tra due documenti, possiamo considerare queries come documenti composti da pochi termini. Intersezione da sola non tiene in considerazione dimensione del documento, viene usato quindi coefficiente di Dice 2 | X /\ Y| / |X| + |Y|, non funziona con triangle inequality.
Coefficiente di Jaccard più utilizzato | X /\ Y | / | X U Y |.

64
Q

Quali misure prendo in considerazione per migliorare misurazioni su termini in un documento?

A

Frequenza di un termine condiviso, maggiore è indice di una parola importante per quel documento.
Scarsità nel documento, i termini più scarsi se condivisi potrebbero essere utili, mentre quelli troppo presenti potrebbero essere proposizioni.
Lunghezza del documento devi normalizzare score in base a questa.

65
Q

Tf-Idf come funziona?

A

Tiene in considerazione Term frequency = numero di volte in cui incontro un termine in un documento e idf che indica frequenza di un termine rispetto a tutti i documenti nella collezione.
Tf è semplicemente numero di occorrenze, idf si misura come log(n/nt) dove nt è il numero di occorrenze nel documento corrente.
Possiamo vedere i valori Tf-idf di un documento che ci interessano come elementi di un vettore ad n dimensioni, dove n è il numero di termini nel nostro documento. Essendo vettori quelli che analizziamo possiamo confrontare loro distanza, quello che ci interessa per fare ciò è coseno dell’angolo tra i due vettori, dato che distanza euclidea ci può trarre in inganno.
Possiamo misurare questa distanza come prodotto scalare tra i due vettori / norma di v1 * norma di v2. Coseno = 1 se documenti uguali, zero se totalmente differenti.

66
Q

Come posso approssimare top k documents da analizzare e computare per il document ranking?

A

Posso usare 5 approcci, tutti basati su una collezione di m documenti, dove k < m &laquo_space;N numero di documenti totali.
-Considero documenti con maggior numero di termini della query. Problemi poichè questi documento potrebbero contenere proposizioni o articoli della query, in modo da superare threshold e solo 1 termine rilevante.
- High Idf terms, considero di una query solo i termini con miglior idf, buona tecnica poichè effettuo pruning di articoli e proposizioni
- Champion list supero limiti di approccio precedente, tenendo in considerazione anche tf. Creo un dizionario offline, quindi effettuo un preprocessing delle posting list, ordinando elementi per weight relative al termine, in questo modo considero solo i top M elementi. Avendo nel worst case |Q| * M.
-Fancy hits, ho un weight dato da Somma per ogni termine della query (tf - idf t,d) + g(d). Dove g(d) = page rank non relativo ai termini, ma al documento specifico.
Computo offline page rank di tutti i documenti ed ordino in base a page rank per ogni termine.
Ora prendo top m documenti secondo tf idf, il minor tf-idf ci da upper bound per elementi non appartenenti a top M elementi.
Ora posso analizzare questi altri documenti (IL), nello specifico Page rank di questi, quando incontro top elementi (FH) il cui Page rank è minore di ub(page rank t1) + ub(page rank t2) non ha senso continuare a cercare nei non top documents se questo valore è minore di elementi già analizzati o dei top elements.
-Clustering, considero uno spazio vettoriale di dimensione q. Creo K clusters, e confronto query solo con i K rappresentanti dei clusters. Una volta trovato il cluster più vicino, meglio i b cluster più vicini poichè query si potrebbe trovare a cavallo tra due clusters, posso comparare elementi con la mia query per un costo di O(K + |Ci|) , Ci numero di elementi per cluster. Il numero di cluster da scegliere ideale = rad(n).

67
Q

Come posso computare top k documents precisi?

A

Uso WAND, che parte da scoring dei documenti offline, salvo quindi per ogni termine upperbound max score del documento.
Ora mi porto dietro tetha, che indica dentro un min heap quale è minore valore computato in modo da poter cercare una volta superato k valori se il nuovo valore che voglio inserire nel min heap supera il mio threshold.
Tecnica buona ma limiti sulla locality, posso portarmi dietro con Blocked WAND upper bound locale.

68
Q

Relevance Feedback come funziona?

A

Applico in base a documenti scelti da utente una modifica alla query stessa, applicando regola del parallelogramma e sommo query a documento se documento buono, altrimenti rimuovo documento da query ottenendo una nuova query Q’. Importante potrei avere problemi poiche potrei avere topic drift.
Posso avere anche pseudo relevance feedback dove top k documenti sono considerati i preferiti da utenti, peggiore poichè avro sicuramente topic drift.
Poi ho query expansion che permette ad utente di aggiungere + o - ai termini che reputa piu importanti. Engine applica quindi una ricerca per sinonimi di quel termine.

69
Q

Quali sono tecniche per trovare sinonimi utilizzate da search engine?

A

-Manual thesaurus, posso trovare sul web lista di relazioni tra le parole come sinonimi
-Global analysis, creo database analizzando grande data collection cercando relazioni tra le parole
-Local analysis come la global, ma dataset piu piccolino ed effettuo una analisi dinamica sul result set di una query.

70
Q

Come funziona random walk?

A

Prendiamo un grafo e creiamo matrice di adiacenza, partendo da questa andiamo a creare matrice di transizione Xt che indica con che probabilità mi troverò in ogni nodo della matrice al tempo t.
Possiamo formalizzare questa matrice come costituita da Xt+1 = Xt * P = Xt-1 * P^2 = … = X * P^t+1 dove P è matrice di adiacenza di base. Posso usare power method per calcolare queste matrici incrementali, calcolando solo log(t + 1) matrici. Vogliamo adesso trovare uno steady state, quindi uno stato dove Xt + 1 = Xt -> Xt * P = Xt , ma questo ci ricorda autovettori ed autovalori Xt +1 * P = 1 * Xt. Possiamo anche vedere questo stato che vogliamo raggiungere come uno stato in cui ho:
-1 solo SCC, quindi grafo G irriducibile
-Il GCD “Greatest common divisor” per tutte le lunghezze dei cicli in G deve essere 1.
Queste proprietà importanti poichè ci indicano che se parto da ogni nodo, posso raggiungere ogni altro nodo in ogni momento (1); poi ci indicano che se parto da ogni nodo ho infiniti modi di arrivare ad un altro nodo.

71
Q

Page rank come funziona?

A

Trasformo grafo in fully connected component aggiungendo archi per fare ciò. Questi archi connettono ogni possibile nodo tra loro.
Il peso di questi archi è dato da 1 - alfa.
Se alfa = 0, andrò in questi nodi con la stessa probabilità degli archi reali.
Se alfa = 1, questi nodi non vengono considerati, ma non ottengo SCC.
Il rank di un nodo i è calcolato sommando il rank di tutti i nodi aventi arco entrante in i/numero di archi uscenti da nodi + 1-alfa/ n (peso degli archi nuovi).
Alfa scelto da Google = 0.85, probabilimente con esperimenti. Dopo questo Google calcolo Page rank di tutti i documenti , circa un milione.
Possiamo effettuare una modifica al page rank, andando a usare un subset di nodi verso cui creare archi nuovi, in questo modo posso ottenere più pagine vicine ad alcune che mi interessano.

72
Q

HITS algorithm come funziona?

A

Sviluppato nello stesso periodo del page rank, basato sulle queries. Prendo documenti che matchano con query (root set), ora da questi prendo documenti puntati e che puntano e costruisco il mio baseset.
Dal baseset valuto i documenti online, quindi pesante e per questo non utilizzato.
Per valutare documenti ho due scores:
Authority score: buona authority page puntata da molte buone hubs pages.
Hub score: buona hub page punta a molte buone authority pages.
Possiamo vedere da un punto di vista algebrico questi scores:
a = A^T * h (poichè consideriamo pagine che puntano)
h = A * a.
Possiamo anche aggiungere pesi alle authorities iniziali, modificando matrice di adiacenza iniziale.

72
Q

Come posso effettuare sommario di un documento?

A

Prima idea valutavo saliency di una frase: sommatoria per ogni parola p tf-idf(p) / numero parole; prendo poi top k.
Il limite di questo approccio è che non tengo in considerazione connessione tra le frasi, posso quindi usare sommario di frasi che riguardano stessa parte del testo.
Per superare queste limitazioni, usato Text-Rank, creo fully connected graph con tutte le frasi. Il peso di un arco è dato da similarity (Non Jaccard, ma simile) misurata in questo modo dimensione tra intersezione di parole tra due frasi / log(f1) +log(f2).
Costruisco quindi transition graph dove elemento viene dato da peso/ somma per avere probabilità.
Applico quindi Page Rank.
Posso usare anche un page rank personalizzato per dare priorità ad alcune sentences iniziali, semplicemente modificando teleportation step.

72
Q

Cosa è Lexical page rank?

A

E’ uguale al Text Rank con due modifiche:
-Uso threshold per effettuare pruning di alcuni archi.
-Weights dati da cosine similarity.

73
Q

Come posso diminuire dimensione dei calcoli da effettuare per gestione delle matrici?

A

-Random projection (data indipendent)
-LSI (basato su SVD single value decomposition)

74
Q

Come funziona LSI Latent semantic indexing?

A

Costruisco due matrici, una term-term T = A * A^T, altra doc-doc D = A^T * A. Dove dimensione di AA = m ( termini) * n (documenti).
Partendo da r, rango della matrice, ossia numero di righe/colonne indipendenti tra loro; posso costruire U (mr) costituito da autovettori di T e V (n r) costituito da autovettori di D. Posso quindi scrivere A = U * Sigma * V^T. Sigma è una matrice avente elementi solo sulla diagonale principale, i restanti valori sono tutti zero.
I valori sulla diagonale di Sigma sono i quadrati degli autovalori di A, rappresentano la strength di ogni concept. Il nostro scopo era quello di diminuire dimensione della matrice A, possiamo farlo limitando il valore di r, a k. Andando a limitare la dimensione di U otteniamo quella che viene chiamata matrice dei latent concepts, infatti ogni riga di U rappresenta una serie di termini, ed ogni riga di Uk rappresenta un concetto ed il peso che ogni termina ha rispetto a quel concetto. Stessa cosa per D^T k, dove la trasposta fa si che ogni riga sia relativa ad un concetto ed ogni colonna rappresenta quanto un documento sia related a quel concetto. Ora ottengo quindi Ak un approssimazione di A.

75
Q

Come posso associare i concetti ad un significato reale?

A

Molto utili knowledge graphs, dove ogni nodo rappresenta un entità ed ogni edge rappresenta relazione tra queste.

76
Q

Come funziona TagMe?

A

Trova parole chiave e annotale con articoli da wikipedia.
Difficoltà che ogni parola chiave, può essere linkata a differenti articoli wikipidea. Va compreso quindi in base al contesto.
Quando effettuiamo disambiguazione tra le varie pagine la Probabilità che p sia la pagina giusta per anchor a = P(p|a) = # volte in cui p utilizzata per a / # a anchor totali.
Mentre la probabilità che a sia anchor dato da # di volte in cui a è anchor / # di volte che a è presente nel testo.
Per effettuare poi valutazione delle pagine, verifico quanto una pagina è relativa all’altra tra due possibili pagine candidate per due anchor.
Effettuo pruning di pagine poco comuni utilizzate come anchor, applico voting scheme, prendo prime k pages e scelgo nuovamente in base a commmoness.

77
Q

Relatedness di un testo

A

Relatedness di un testo, indica quanto due pagine siano relazionate tra loro s(a, b) = log( max(|A|,|B|)) - log(|A /\ B|) / log(|W|) - log(min(|A|,|B|).