Si parla di come processare enormi quantità di testo al fine di effettuarvi ricerche.
🎓 Il corso è stato tenuto dalla
📘 Le dispense sono disponibili su
🎥 Le videolezioni
È il processo di raccolta documenti, elaborazione query e richiamo di più risposte.
Un'applicazione che effettua
Sono le unità con cui lavora il motore di ricerca.
Possono essere di vario tipo: pagine web, metadati di file, paper accademici...
Vengono raccolti in svariati modi: possono provenire da
Un insieme di documenti è detto collezione.
La richiesta di informazioni effettuata da un utente, in un linguaggio che il motore di ricerca è in grado di capire.
Solitamente vi è possibile inserire parole chiave e operatori per specificare cosa si desidera trovare.
I documenti che il motore di ricerca sceglie di mostrare all'utente in quanto li ha ritenuti rilevanti alla query effettuata.
Spesso sono composte da metadati del documento e da un breve estratto della sezione del documento più rilevante.
Astrazione che rappresenta un singolo significato di una parola o
Sequenze di
Una procedura svolta quando un documento viene aggiunto al motore di ricerca, permettendone l'indicizzazione e in seguito il richiamo.
È suddivisa in varie fasi, generalmente 5 o 6.
Tutte le parole del documento vengono trasformate in token.
Spesso si decide di distinguere tra gli
Il motore di ricerca decide come trattare i simboli tipografici, la
Le stopwords, i token ritenuti inutili ai fini delle ricerche, vengono eliminate dall'insieme di token ottenuto nel passo precedente.
Stopwords comuni sono gli
Talvolta capita di dover distinguere tra stopwords e nomi propri, soprattutto nell'inglese; per risolvere il problema ci si affida alla disambiguazione degli Omonimi effettuata durante l'analisi lessicale.
Ai token del passo precedente vengono sostituite le radici (stems) oppure le forme base (lemmas) delle parole.
Alcune delle operazioni di stemming che possono essere effettuate sono:
Alcune delle operazioni di lemmatizzazione che possono essere effettuate sono:
Gli algoritmi che realizzano questo passo sono detti rispettivamente stemmer o lemmatizer.
Il motore di ricerca stabilisce la relativa importanza di ciascun token dell'insieme, in modo da determinare più facilmente in seguito la rilevanza del documento in cui si trovano.
I termini più importanti di un documento sono detti index term.
Essi solitamente sono individuati da parser e scanner, che analizzano la semantica di ciascun token.
Opzionalmente, l'intero documento può essere inserito in una o più categorie di un thesaurus, una gerarchia predeterminata di categorie di documenti.
Una misura di quanto due token hanno significati in comune.
Generalmente si basa su un thesaurus.
La word sense disambiguation sfrutta la similitudine tra l'ononimo e i token circostanti per stabilire il significato corretto.
Talvolta alla similitudine sono aggiunte anche altre informazioni, come la distanza tra i token e dati provenienti da sorgenti esterne.
Un modo di misurare la similitudine tra due token basato sulla loro posizione all'interno del thesaurus.
Si basa sull'inverso della distanza tra i due token all'interno dell'albero:
Si basa sulla profondità del minimo antenato comune tra i due token:
L'
Definendo
La similitudine
Si basa sull'
Una parte della normalizzazione dei token che corregge gli errori ortografici commessi durante l'inserimento della query.
Aumenta la soddisfazione dell'utente e gli consente di effettuare ricerche per termini di cui non conosce lo spelling.
È possibile trovare per ogni token dei suoi vicini utilizzabili per migliorare la query:
Dato un token, si cercano tutti i token entro un certo valore di edit distance.
Il numero minimo di operazioni per convertire un token in un altro.
Definisce operazioni le seguenti azioni:
Matrice costruita per calcolare la distanza di Levenshtein con un algoritmo greedy:
Estende la distanza di Levenshtein con una nuova operazione:
Differenzia i costi delle varie operazioni, diffenenziando ad esempio in base al carattere sostituito.
m
ed n
sono vicini sulla tastiera e quindi la loro sostituzione "costa" meno, rispetto a q
e p
.
Calcolare l'edit distance
È possibile evitare di calcolare l'edit distance per la maggior parte dei termini del vocabolario pre-filtrandoli su criteri computazionalmente più veloci.
Richiede che venga tenuto traccia delle posizione dei
Dato un token, si ordinano i token del vocabolario in base al numero di
Misura di overlap tra due insiemi di
Usando trigrammi, il coefficiente di Jaccard tra
Esistono motori di ricerca che usano un algoritmo per convertire i token nella loro corrispondente pronuncia ed effettuano match sulla base di quest'ultima.
Scoperti i token "vicini", si può optare per varie soluzioni:
Sostituire automaticamente il token originale con il più vicino ad esso.
Richiede che le possibili correzioni siano ordinate.
È quello che fa di default Google:
Visualizzare l'errore all'utente, e permettergli di correggerlo rapidamente.
Richiede più interazione da parte dell'utente.
È quello che fa Google quando non è sicuro della correzione proposta:
Aggiungere automaticamente alla query i token corretti.
Richiede più tempo di ricerca, perchè nella query saranno presenti più token.
È possibile confrontare ogni token con il contesto dei termini circostanti per rilevare ulteriori errori.
Un metodo che prevede di enumerare varie alternative aventi contesti concordi e di restituire quella con il maggior numero di risultati.
Un metodo che prevede di enumerare varie alternative aventi contesti concordi e di restituire quella che è stata ricercata più volte.
Gli indici sono strutture dati in cui vengono inseriti i documenti e i loro token dopo essere stati preparati.
L'indicizzazione è la procedura che crea e mantiene aggiornati uno o più indici.
Sono fondamentali per velocizzare notevolmente le ricerche e per permettere certi tipi di operazioni sulle query.
Un indice basato sulla costruzione di una matrice in cui le righe sono i documenti, le colonne i token e le celle valori booleani che descrivono se il token compare nel documento.
È terribilmente inefficiente in termini di spazio, perchè la matrice è sparsa.
Una sua evoluzione spazialmente più efficiente è l'inverted index.
L'indice più comune, costituito da tante posting list raggiungibili attraverso un vocabolario.
L'insieme di tutte le occorrenze di un dato token.
Può essere realizzata in due modi:
Essendo le liste ordinate, vi è possibile effettuare operazioni di unione e intersezione in tempo lineare utilizzando dei cursori.
Non è però altrettanto efficiente in operazioni di negazione.
L'insieme delle associazioni tra token e la loro posting list.
Ci sono tanti modi diversi di implementarlo:
Generalmente, occupano spazio logaritmico rispetto al numero di token.
Ogni motore di ricerca implementa un diverso query language, un'interfaccia per l'utente che gli permette di effettuare ricerche in base alla sua necessità di informazioni
site:stackoverflow.com
per restringere la ricerca!
Ogni query language può poi implementare diverse funzionalità in base al tipo di documento indicizzato.
Essendo una via di mezzo tra linguaggio naturale e linguaggio di programmazione, permettono a un utente qualunque di fruire del motore di ricerca, senza bisogno di conoscenze approfondite sul suo funzionamento.
All'interno della query vengono inserite una o più keywords da ricercare all'interno dei documenti.
Praticamente tutti i motori di ricerca le supportano!
Divina Commedia Dante
Prevedono la possibilità di richiedere che due o più keyword siano consecutive.
Solitamente è possibile specificarlo circondando di virgolette le keyword in questione.
"Nel mezzo del cammin di nostra vita"
Prevedono la possibilità di richiedere che due o più keyword siano a una certa distanza una dall'altra.
È molto raro al giorno d'oggi che un motore di ricerca permetta di ricercare la distanza tra le keyword.
Uno dei pochi motori di ricerca che lo permette ancora è
Dante /3 Beatrice
Prevedono la possibilità di cercare prefissi, suffissi, sottostringhe e intervalli di keyword.
Le
/^V.?rgilio/
**/V?rgilio.png
Prevedono la possibilità di usare tag provenienti da un thesaurus limitato di cui è garantita la precisione.
Il più famoso motore di ricerca a concetti è
"Plague"[Mesh]
Prevedono la possibilità di limitare la query a specifiche sezioni del documento.
Un esempio di query strutturali è
inauthor:Dante inauthor:Alighieri
Prevedono la possibilità di effettuare più query e applicare le operazioni di intersezione, unione e negazione sui risultati.
Moltissimi motori di ricerca permettono boolean query, inclusa la
"Dante" and "Vergil" and ("Devil May Cry" or "DMC") and not "Divina Commedia"
AND
:
AND
AND
È costoso in termini di tempo: ci saranno tanti risultati che andranno processati, e
l'intersezione è
Un particolare prefix tree in cui vengono inserite tutte le possibili permutazioni di ogni token, con in aggiunta un marcatore per la fine della parola (░):
È possibile effettuare ricerche wildcard ruotando la wildcard a destra, trasformando tutti i pattern in prefissi:
È costoso in termini di spazio: ogni termine va salvato molte volte nel vocabolario (permuterm problem).
Vocabolario aggiuntivo che associa
È possibile interpretare la ricerca come intersezione di
Utilizzando dei bigrammi:
AND
AND
I risultati della ricerca andranno post-filtrati, in quanto ci potrebbero essere dei falsi positivi:
Utilizzando dei bigrammi:
AND
AND
È un'ottima via di mezzo tra prefix-suffix tree e permuterm tree sia per il tempo impiegato sia per lo spazio richiesto.
Sono modelli matematici in grado di selezionare e ordinare i documenti in base alla loro rilevanza rispetto alla query.
Stabiliscono i risultati richiamati dal motore di ricerca e l'ordine con cui vengono visualizzati.
Rappresentano la query come un insieme di index term, e assegnano le rilevanze confrontando l'insieme con gli index term dei documenti.
Ad ogni index term del documento viene indipendentemente assegnato un peso in base alla sua rilevanza nella query.
Modello classico che rappresenta la query come un
1
se il 0
se il
Variante del modello booleano che permette ai documenti di soddisfare
parzialmente il
1.00
se il 0.XX
se il 0.00
se il Le operazioni fuzzy diventano quindi:
AND
: OR
: NOT
: Modello classico che rappresenta il vocabolario come uno spazio vettoriale, in cui ogni dimensione rappresenta un token.
Ogni documento viene rappresentato come un vettore
Le query vengono anch'esse trasformate in vettori
Un metodo di assegnamento peso che si basa sul prodotto dei fattori
Misura quanto un token è frequente nel singolo documento:
Nella formula principale, viene normalizzato dividendolo per il
Misura quanto un token è raro nella collezione di documenti:
Nella formula principale, viene logaritmizzato, al fine di ridurre significativamente il suo impatto:
Un modo di misurare la similitudine tra insiemi di token rappresentati come dimensioni vettoriali.
Si basa sulla norma a 2, e corrisponde a cercare l'angolo centrato all'origine tra i due vettori:
Altre misure comuni di similitudine vettoriale sono:
Implementazione del modello vettoriale che ordina i documenti
Si dimostra che è possibile determinare quanto la presenza di un dato token
Il valore del primo "blocco" dipende dalla presenza del token
Il valore del primo "blocco" dipende dalla presenza del token
Modello classico che ordina i documenti in base a un punteggio
L'
Un moltiplicatore basato sull'
Un moltiplicatore basato sulla
Ad esso viene in genere applicata una normalizzazione basata sulla lunghezza del documento:
Un moltiplicatore basato sulla
Ad esso non viene ovviamente applicata alcuna normalizzazione.
Modello per classificare documenti intercollegati in base a come essi sono collegati tra loro.
Algoritmo di Link Analysis Ranking query-independent che assegna un grado a ogni pagina indicizzata.
Misura iterativa di quanto una pagina è importante rispetto a tutte le altre indicizzate.
In cui:
Funzione che introduce nuovo rank nel sistema ad ogni iterazione.
PageRank normale prevede che questa funzione sia costante; è possibile però personalizzarlo rendendo la funzione variabile, facendo in modo che vengano assegnati rank più alti a certi tipi di pagine.
Rank riscalato a valori inclusi tra 0 e 1.
Solitamente, il rank viene rinormalizzato ad ogni iterazione.
Algoritmo di Link Analysis Ranking query-dependent che attribuisce due diversi valori ad ogni pagina: autorità e hubness.
Viene applicato solo a un base set, ovvero all'unione del root set (i match della query) con tutti i nodi ad essi direttamente connessi.
Misura di quanto la pagina in questione viene referenziata da altri siti autoritativi.
Misura di quanto la pagina in questione referenzia siti autoritativi.
Autorità riscalata a valori inclusi tra 0 e 1.
Hubness riscalata a valori inclusi tra 0 e 1.
Misurazioni che vengono effettuate sui sistemi di
Per vedere quanto funziona bene un sistema di
Per ottenere delle misure, solitamente si preparano in anticipo delle query dette benchmark delle quali si è già a conoscenza dei documenti rilevanti.
Le due misure usate più di frequente per misurare l'utilità dei risultati sono recall e precision.
Misura quanti documenti rilevanti sono stati richiamati dalla collezione:
Misura quanti documenti richiamati sono rilevanti:
La precisione di una query che richiama
A precisione
Curva che associa percentili di richiamo ai corrispondenti valori di R-Precision.
Ad esempio:
Richiamo | R-Precision |
---|---|
10% | 90% |
20% | 60% |
30% | 10% |
... | ... |
100% | 2% |
È detta naturale se include un punto per ogni documento richiamato.
È detta standard se usa le percentuali da 10% a 100% come punti.
Mostra il valore massimo di precisione per valori di richiamo maggiori o uguali a quelli del punto.
Ad esempio:
Richiamo | Precisione | Interpolata |
---|---|---|
10% | 90% | 90% |
20% | 40% | 50% |
30% | 30% | 50% |
40% | 50% | 50% |
... | ... | ... |
100% | 2% | 2% |
Esistono misure che riassumono i risultati di più benchmark in una sola.
Se si hanno più benchmark, corrispondenti a più curve di richiamo, si possono ottenere le medie dei valori ai vari livelli, ottenendo così una curva di precisione media.
La media di tutti i livelli di precisione media.
Misura che combina richiamo e precisione in un singolo valore:
Complemento della media armonica configurabile che permette di selezionare se
dare priorità
Misura che attribuisce guadagni decrescenti in base alla precisione di ogni documento richiamato.
Una formula per il DCG potrebbe essere:
Applicata, sarebbe:
Posizione | Stelle | Punti |
---|---|---|
0 | ★★★★☆ | |
1 | ★★☆☆☆ | |
2 | ★★★☆☆ | |
3 | ★★★★★ | |
Tot | ----- |
Variante del Discounted Cumulative Gain che divide il punteggio finale per il valore perfetto ottenibile.
Normalizzando la formula precedente si ottiene:
Il modo in cui i risultati vengono visualizzati all'utente.
Permettere all'utente di vedere velocemente tutti i risultati e di scegliere il risultato a lui più utile.
Il motore di ricerca web mostra all'utente un elenco di collegamenti ai documenti richiamati.
Solitamente include alcuni dati del documento, come titolo, sommario e url.
Un breve riassunto del contenuto del documento richiamato.
Un sommario i cui contenuti dipendono solo dal documento, e non dalla query immessa.
manifest.json
, dai
tag OpenGraph, dalle prime righe del documento e quelli che Google genera
dalle applicazioni web (Web 3.0).
Un sommario che varia da query a query, evidenziando le parti rilevanti del documento.