- Home
- Categorie
- Digital Marketing
- Consigli su Penalizzazioni e Test SEO
- Progettare e fare un semplice motore di ricerca -Discussione
-
Cosi' come quando dico che (non puoi creare anche il piu' semplici dei motori), se non disponi di sufficiente banda, forza hardware, ore lavoro e cultura informatica, non serve a nulla approfondire l'aspetto matematico (almeno in questa prima fase di approccio), mi fa piacere che mi si creda sulla parola, salvo ovviamente una logica e ferrea dimostrazione contraria.
Quoto e aggiungo: quanti di voi conoscono bene il c ?
Per bene non intendo condizioni e cicli che hanno tutti i linguaggi, piuttosto puntatori stringhe alberi grafi ordinamento fusione ecc ecc..Creare un motore di ricerca in un linguaggio diverso dal c (per lo meno lo spider) è a mio parere da pazzi, a meno che non si disponga di un clister di 15-20 mila computer chiaramente..
Ho finito da poco di convertire alcuni tools in c su server linux, la differenza nei tempi è madornale rispetto a perl o altri linguaggi interpretati.
Partendo con poche risorse è basilare ottimizzare quelle che si hanno..
-
Leggendo agoago ed uMoR mi viene il dubbio che esista un gigantesco equivoco di fondo sul tipo di motore di ricerca che si intende realizzare e sui motivi e finalità per cui viene progettato.
Ad esempio si parla di necessità di banda, ma a che servirebbe la banda se venisse deciso che il motore non dovrà operare in rete?
Qui tutti danno per scontato che "motore di ricerca" equivalga a "motore di ricerca dedicato al Web ed ad un uso pubblico". Perché si sta dando per scontato questa cosa?
Esistono decine di tipi diversi di motori di ricerca e sono certo che il gruppo di lavoro che si è creato ne progetterà uno tenendo conto degli obiettivi principali e delle risorse disponibili.
Volendo escludere a priori che l'obiettivo di agoago ed uMoR sia quello di criticare per partito preso, sono certo che arrivando a comprendere le finalità del progetto anche loro potranno concludere che non ha senso andare da un cineamatore dilettante per dirgli di piantarla di giocare con la cinepresa visto che non possiede gli stessi mezzi di Cinecittà o Hollywood.
Fategli fare pratica, a quel cineamatore: finché quello che ottiene risponde alle proprie esigenze, il suo obiettivo è raggiunto. E senza aver usato effetti speciali né giganteschi teatri di posa.
-
sono certo che arrivando a comprendere le finalità del progetto anche loro potranno concludere che non ha senso andare da un cineamatore dilettante per dirgli di piantarla di giocare con la cinepresa visto che non possiede gli stessi mezzi di Cinecittà o Hollywood.
Hai ragione e comprendo benissimo quel che dici nulla da ridire.
E' un bug della mia mentalità quella di pensare in grande, mi sono allontanato da quel che era l'obiettivo iniziale, un semplice motore di ricerca come dice il thread stesso.Io credo però che anche il più semplice fra i motori di ricerca sia complesso da realizzare, perchè come diceva agoago basta un minimo accorgimento perchè tutto funzioni male.
Escludiamo allora il problema banda, escludiamo il problema potenza di calcolo e ottimizzazione delle risorse, i risultati in qualche modo devono pur essere presentati.
Quoto agoago per spiegarmi:Ok, in questo caso la tua intranet e' data da 5 sole pagine il cui contenuto e':
Il cane correva nel prato erboso e fresco di rugiada.
Correva come un cane, che cane come corridore!
Il gatto ed il cane correvano.
Corre il cane.
Cane.5 semplici pagine di una riga ognuna. Ignoriamo il codice.
Per la query cane, quale delle 5 metti al primo posto?
La mia non è una contestazione, per carità.
Vedo (forse erroneamente) impossibile creare un motore di ricerca "semplice", in quanto anche il più "semplice" è complesso.
-
potranno concludere che non ha senso andare da un cineamatore dilettante per dirgli di piantarla di giocare con la cinepresa visto che non possiede gli stessi mezzi di Cinecittà o Hollywood
Aggiungo:
l'intento dei miei post (e credo anche quelli di ago) non è di far morire un progetto ma semplicemente di dare un punto di vista.In questo caso credo che il messaggio sia chiaro e non offensivo:
ci sono tantissimi fattori da tenere presente nella creazione di un motore di ricerca, semplice o meno che sia.Saranno pure estremi i casi riportati da me ed agoago ma credo che siano di aiuto a tutti per farsi un'idea, poi in base alle problematiche evidenziate si può scegliere il miglior percorso da seguire nella creazione del motore di ricerca.
-
@uMoR said:
Vedo (forse erroneamente) impossibile creare un motore di ricerca "semplice", in quanto anche il più "semplice" è complesso.
si si... il più semplice è complesso....
hai ragione come hai ragione nel proporre altre problematiche quali il linguaggio di programmazione da adottare o eventuali tecniche...
ma è anche vero che in questo momento l'obiettivo non è la performance ma raggiungere un risultato...sprecando magari parzialmente banda o tempo...
... a risultati raggiunti SE vale la pena potrà essere presa in considerazione l'idea di ottimizzare/riscrivere/riprogettare/modificare il semplice motore di ricerca
non è ora si cercherà di progettarlo male, assolutamente.. ma come si fa a sviluppare al meglio una cosa che non si conosce minimamente?
vediamo cosa verrà partorito
-
l'intento dei miei post (e credo anche quelli di ago) non è di far morire un progetto ma semplicemente di dare un punto di vista.
In questo caso credo che il messaggio sia chiaro e non offensivo..Caro uMoR,
il tuo messaggio mi sembra per nulla offensivo ma tutt'altro che chiaro.Essendo l'obiettivo, come hai appena ricordato, creare un semplice motore di ricerca al solo fine di consentirne lo studio prima di tutto ai realizzatori e quindi al Forum, riportare casi e difficoltà estremi che nulla hanno a che vedere con questo progetto NON mi sembra di aiuto, e come Low [e come ha appena confermato Rinzi ] sono certa che il bel Gruppo di lavoro che si è creato stia progettando un semplice motore tenendo conto di questi obiettivi principali e delle risorse disponibili.
Andiamo dunque avanti senza indugio e passiamo come promesso a trattare del:
**Dot product - Prodotto scalare **
Bene, ci siamo, è ora di allacciare le nostre cinture di sicurezza!
Questa sezione è un pò una sfida, ma è l'essenza di come funziona il modello vettoriale.
Descriviamo ora un altro operatore matematico.
Quando i matematici (o fisici, o assistenti tecnici, o bibliotecari) desiderano moltiplicare insieme due vettori, l'unico sistema è usare un operatore denominato "Prodotto scalare".
Il relativo simbolo è un puntino grasso: ?
Se avessimo due vettori A e B e desiderassimo moltiplicarli insieme, scriveremmo A ? B.
E pronunceremo quell'espressione "A Prodotto scalare B".Il risultato di una operazione di Prodotto scalare è uno scalare (un singolo numero), non un vettore.
Se i vettori sono stati allineati perfettamente, calcoliamo un Prodotto scalare moltiplicando i loro termini corrispondenti ed aggiungendo i prodotti insieme.
Ci saranno altrettanti prodotti quante sono le dimensioni nel sistema coordinato.Quindi, per un vettore tridimensionale, il Prodotto scalare sarebbe la somma (a scalare) delle coordinate moltiplicate l'un l'altra:
Se A = (a1 , a2, a3 ) and B = (b1 , b2, b3 ), quindi
A ? B = a1b1 + a2b2 + a3b3 (dove a1b1 significa la prima coordinata in A moltiplicato la prima coordinata in B, ecc.)
Esempio: se A è un vettore (3, 4, 7) e B è un vettore (9, 2, 1) quindi
A ? B = (3 * 9) + (4 * 2) + (7 * 1) = 27 + 8 + 7 = 42.
Questo ci dimostra che per due vettori, A e B, che sono stati allineati perfettamente,** A ? B** è uguale alla somma dei prodotti delle coordinate corrispondenti dei due vettori.
Tuttavia, se i vettori non sono stati allineati perfettamente, abbiamo bisogno di un fattore di adattamento per riportare la deviazione nel suo allineamento.
Così la formula generalizzata per un Prodotto scalare ci porta al nostro amico coseno:**A ? B =|A||B|cos **
dove misura l'angolo fra i vettori A e B e |A| significa il valore assoluto del vettore equivalente alla sua lunghezza.
[ la derivazione di questa formula viene dalla Legge dei Coseni,... ma ci fidiamo senza approfondire oltre! ]Se tentiamo alcuni esempi vedremo il significato di tutto questo.
Quando i vettori sono a 90°, cos è zero, quindi il Prodotto scalare è zero.
Quando i vettori sono molto vicini, il coseno si avvicina ad uno e lo scarto è minimo.
Ciò è usato nella fisica per eseguire funzioni di calcolo: ** i vettori sono forza e distanza e l'angolo è l'angolo a cui la forza è applicata.**
L'immagine è riferita ad un esempio che tratteremo presto per i Term Vector auto, car ed insurance.Se spingiamo un armadio con la spalla in modo che la forza sia parallela al pavimento, lo faremo scorrere facilmente ma graffierà il pavimento! Se alziamo l'armadio e lo spostiamo, c'è molto più lavoro ma non graffieremo il pavimento!
Vedremo più avanti una variabile di questo caso. Se dividiamo entrambi i lati di questa equazione con |A||B|, otteniamo:
All'inizio abbiamo visto di come il coseno sia un buon proxy per il calcolo della similarità fra i vettori, ora abbiamo scoperto la relazione che possiamo usare per descrivere la somiglianza fra due vettori.Usando "sim (A, B) per significare quella similarità, possiamo ottenere:
Questa è la chiave matematica dell'espressione di cui necessitiamo per il vector model, perché fornisce una formula per calcolare la somiglianza fra i vettori di termini di quei vettori.Ci sono tuttavia una coppia di altre formule Prodotto scalare che dobbiamo vedere prima che entriamo nel modello vettoriale.
Usano l'algebra per fare le variazioni sulle equazioni che già abbiamo visto.A partire da A ? B =|A||B|cos , se sostituite A per B (cioè usiamo lo stesso vettore sia per A che per B) otteniamo:
A ? A =|A||A|cos
Ma se è lo stesso vettore, quindi allineto con sè stesso e quindi l'angolo fra loro è zero, il coseno degli angoli è dunque uguale a** 1**.
Sostituendo 1 per cos ci dà **A ? A=|A||A|=|A|2 **
Se prendiamo la radice quadrata di ogni lato otteniamo:
|A|=sqrt A ? A
Ricordando che A ? B = a1b1 + a2b2 + a3b3, noi possiamo vedere che** A?A = a1a1 + a2a2 + a3a3**
Ma a1a1 è a12 quindi un modo più compatto di esprimerlo è:
**A ?A = a12 + a22 + a32 **
Sostituendo la serie per il Prodotto scalare, otteniamo:
Sotto il segno della radice quadrata vediamo una serie, la somma dei quadrati.
Questa equazione può essere scritta in modo più compatto:
Vedremo più avanti una variazione di questo concetto che ci aiuterà a calcolare l'angolo di comparazione tra un vettore di domanda ed un vettore del documento.
Bene, le cinture di sicurezza le abbiamo allacciate e questo è quanto dovevamo sapere circa il Dot Product - Prodotto scalare, ed è tutto quanto dovevamo conoscere per poter comprendere il vector model di Information Retrieval modello vettoriale di reperimento delle informazioni ]
Siamo quindi pronti per cominciare ad approfondire il concetto di
Calcolo del modello vettoriale
-
Piccoli aggiustamenti e precisazioni.
Dot prodotto
In italiano si chiama "prodotto scalare".
A ? B = a1b1 + a2b2 + a3b3 (dove a1b1 significa la prima coordinata in A tempo la prima coordinata in B, ecc.)
Non "tempo" ma "moltiplicato". a1b1 significa semplicemente "a1 moltiplicato per b1".
|A| significa il valore assoluto del vettore.
Per chiarire: il valore assoluto del vettore equivale alla sua lunghezza.
-
Corretto.
Grazie Low
-
Nessuno si è chiesto come si calcola la lunghezza di un vettore A?
La lunghezza |A| è uguale alla radice quadrata di A ? A.
Dato che A è allineato con sè stesso, utilizzo la formula negli appunti di Mamilu e trovo che A ? A = a1a1 + a2a2 + a3a3.
Dunque |A| = sqrt( a1a1 + a2a2 + a3a3 )sqrt() altro non è che l'operatore di radice quadrata.
-
@noises said:
Nessuno si è chiesto come si calcola la lunghezza di un vettore A?
Presumo che verrà spiegato quando si parlerà delle formule del calcolo della similarità, la più conosciuta delle quali fa uso proprio della lunghezza dei vettori.
Non anticipo nulla perché proprio la lunghezza dei vettori nella formula per il calcolo della similarità funge da fattore di normalizzazione che, ragionandoci su, può fornire le prime regole pratiche per la composizione di testi ottimizzati.
E' un passo importante che merita una trattazione a sé.
-
[url=http://www.giorgiotave.it/forum/viewtopic.php?t=6560]In questo thread Mamilu pocederà con la raccolta degli sviluppi del motore
Mentre qui continueremo a sviluppare gli argomenti che Mamilù ci presenterà di giorno in giorno.
-
come si calcola la lunghezza di un vettore A?
Presumo che verrà spiegato quando si parlerà delle formule del calcolo della similarità, la più conosciuta delle quali fa uso proprio della lunghezza dei vettori.
Un accenno a questo calcolo potrei essere riuscita ad inserirlo nella nota precedente; vorreste essere così gentili da dare un'occhiata ?
-
un bot di partenza l'abbiamo ??
uno spider che prelevi c'e ?
-
@cached said:
un bot di partenza l'abbiamo ??
uno spider che prelevi c'e ?
non è tra le priorità... inizialmente svilupperanno la simulazione degli algoritmi
-
@Rinzi said:
non è tra le priorità... inizialmente svilupperanno la simulazione degli algoritmi
come no ??
e come fai ? il bot è la base
gliela devi far leggere la pagina e la devi incamerare secondo me
-
@cached said:
come no ??
e come fai ? il bot è la base
gliela devi far leggere la pagina e la devi incamerare secondo meProbabilmente per qualcuno non è ancora chiaro che quello che ci interessa sono gli algoritmi che permettono di stabilire la pertinaneza di un determinato documento con un certo argomento.
Dannarsi nella progettazione di uno spider sarebbe per il momento un'inutile complicazione.
Cosa serve di più ad un Seo: sapere come funziona un spider, o capire come migliorare i contenuti di un documento perchè esso sia valido per una determinata query?
Io direi la seconda...
Anche perchè il funzionamento di uno spider è abbastanza banale da comprendere,ma la sua costruzione può non esserlo.
Per raggiunger i nostri scopi, stiamo partendo dalla fine dell'opera... per poi poter con calma giungere ad un'opera completa.
All'inizio sostituiremo noi, manualmente, lo spider.
Dopo pian piano renderemo automatizzata anche questa operazione, di fondamentale importanza pratica, ma di poco valore educativo.
Ciao
-
Calcolo del modello vettoriale
Il modello vettoriale [vector model] di reperimento delle informazioni conta su tre insiemi di calcoli.
Questo modello può lavorare su parole selezionate da un indice o su un testo integrale.
Nella discussione che seguirà, questo è indifferente.I calcoli necessari per il modello vettoriale sono:
-
Il peso di ogni parola di indice deve essere calcolato attraverso l'intero insieme del documento. Ciò risponde alla domanda di quanto è importante la parola nell'intera raccolta.
-
Il peso di ogni parola di indice all'interno di un dato documento (nel contesto di quel documento soltanto) deve essere calcolato per tutti i N documenti. Ciò risponde alla domanda di quanto è importante la parola all'interno di singolo documento.
-
Per ogni domanda, il vettore di domanda è confrontato a ognuno dei vettori del documento. I risultati possono essere ordinati. Ciò risponde alla domanda di quale documento è più vicino alla domanda, ed ordina gli altri in base alla prossimità appropriata.
Durante tutta la discussione, dobbiamo avere le definizioni di base del modello vettoriale a nostra disposizione:
**N **- Il numero totale di documenti nel sistema. Se la vostra base di dati contiene 1.100 documenti che sono spostati ad incrementi, allora N = 1.100.
***ki *** - Un certo termine particolare di indice.
**ni ** - Il numero di documenti in cui il termine ki compare. Nel caso qui sopra (dove N = 1.100), questo può variare da 0 a 1100.
**freq i , j ** - Il numero di volte una data parola chiave (ki) compare in un determinato documento (documento "J")
w i , j - il peso di termine per il ki nel documento J.
**w i , q ** - il peso di termine per il ki nel vettore di domanda.
q = (w 1 , q , w 2 , q , ... w t , q) - il vettore di domanda. Queste sono coordinate nel t- spazio dimensionale. Ci sono t termini nel sistema di indice; il vettore di domanda ha un peso per ognuno di loro.
dj = (w 1 , j , w 2 , j , ... w t , j) - Il documento vettoriale. Ci sono N documenti nel sistema quindi ci sono N documenti vettoriali. Ognuno ha un peso per ogni parola chiave nel sistema di indice. Se il sistema è grande, molti di questi valori saranno zero, poiché molte parole chiave non compariranno nel vettore del documento per alcun dato documento. Nei termini matematici, questo è chiamato "sparso".
f i , j - Frequenza normalizzata di ki in dj
**dj ** - Un documento rappresentativo, il "j th".
La definizione del modello vettoriale della seguente immagine descrive questi termini (Baeza-Yates & Ribeiro-Neta, 1999). In più, spiega i vettori di domanda ed i vettori di documento. Questi consistono nell'assetto coordinato in cui le coordinate sono i pesi per ogni termine nell'intero sistema.
Ora usiamo il prodotto scalare matematico che abbiamo imparato prima per espanderlo.
Perchè lo facciamo?
Il problema di base è che la formula non comprende i pesi dei termini nel vettore di domanda e nei vettori del documento. Desideriamo usare i pesi per scoprire quale documento/i è più vicino al vettore di domanda.
Per risolvere la similitudine quindi, dobbiamo usare una serie di equazioni per esprimere questa stessa formula in termini di coordinate vettoriali (i pesi).In primo luogo, dobbiamo ricordare questo:
A ? B = a1b1 + a2b2 + a3b3 dalla definizione del prodotto scalare qui sopra.
Ciò significa che per calcolare il valore di un prodotto scalare, dobbiamo moltiplicare insieme le prime coordinate, quindi le aggiungeremo al prodotto delle seconde coordinate, quindi aggiungeremo la somma al prodotto delle terze coordinate e così via via fino a che non arriviamo alla fine delle coordinate.
Concluderemo con un singolo numero, non un vettore.Ora, nel nostro modello di vettore, stiamo dicendo che A è il vettore del documento, dj = (w 1 , j , w 2 , j , ... , w t , j)
e B è il nostro vettore di domanda **q = (w 1 , q , w 2 , q , ... , w t , q) **
Quindi sostituiamo A e la B, ed espandiamo i termini, prendendo ogni termine di dj, moltiplicandolo per il termine corrispondente di q ed aggiungendo tutti questi prodotti:
dj ? q = (w 1 , j * w 1 , q ) + (w 2 , j * w 2, q ) + ... + (w n , j * w n , q )
Così stiamo cominciando qui ad incorporare i pesi dei termini. Mettendo questo nuovamente nella nostra equazione per similitudine otteniamo:
Ora valutiamo questo denominatore,|d||q|.
Che cosa possiamo fare con questo? Se cominciamo con l'equazione 2:
|A|= sqr di A ? A
e sostituiamo un vettore del documento con A, noi otteniamo
|d|=sqr di d ? d per il componente di documento e:
|q|=sqr di q ? q per il componente di domanda
Sostituendo questi nella nostra equazione-mostro avremo:
Bene, già sappiamo come eliminare i prodotti scalare: espanderli nella somma dei prodotti dei termini corrispondenti. Così dobbiamo espandere le due radici quadrate nel denominatore.
Ricordiamoci, che quando prendiamo il prodotto scalare di un vettore con se stesso, otteniamo una serie di quadrati. Se questo è D ? D , la risposta sarà d1d1 + d2d2 + d3d3 che è lo stesso di d12 + d22 + d32. Per il nostro vettore del documento, questo rimanda alle serie delle somme dei quadrati dei pesi:
**dj ? dj = (w 1 , j * w 1 , j) + (w 2 , j * w 2, j) + ... + (w n , j * w n , j) **
o
**dj ? dj = w 1 , j 2 + w 2 , j 2 + ... + w n , j 2 **
Da questa piccola operazione di sigma, possiamo comprendere che come la somma dei quadrati, una serie matematica è molto semplice.
Poiché per il vettore del documento i termini sono i pesi w i , j concludiamo con:Il vettore di domanda riduce in:
Ciascuno di questi sembra intimidirci, ma il significato è abbastanza semplice.
Lavoriamo attraverso le coordinate una alla volta.
Per ognuna facciamo il suo quadrato e lo aggiungiamo al totale corrente.Così, mettendo i nostri due sigma nuovamente nell'equazione ci dà:
Ora ci siamo quasi.
L'ultima sostituzione e saremo alla conclusione.Il numeratore è inoltre una serie che può essere espressa attraverso la notazione di sigma:
**(w 1 , j * w 1 , q) + (w 2 , j * w 2, q) + ... + (w n , j * w n , q) **
Guardando questo esempio vediamo una serie che è sommata, dove ogni termine è il prodotto del peso di vettore del documento per il peso nel vettore di domanda per la data parola chiave.
Nella notazione di sigma che è:
e se lo mettiamo nuovamente dentro la nostra equazione otteniamo:
Ora dunque, conosciamo che cosa significa modello vettoriale e da dove proviene.
Potremmo persino calcolare alcuni esempi se ci sentissimo così volonterosi.
Dato un vettore del documento e un vettore di domanda, tutto ciò che dobbiamo fare è moltiplicare alcune coppie di pesi, sommare quei prodotti, fare una piccola divisione ed abbiamo una misura di similarità.
Sembra arduo ma è invece abbastanza facile.
La prossima volta:
**Valori e pesi delle parole **
-
-
**Valori e peso delle parole
**
Fino ad ora abbiamo visto espressioni come (W n, J * W n, q) delle quali però ignoriamo che peso esse indichino esattamente.Abbiamo visto che usando i pesi possiamo calcolare la somiglianza fra i vettori e quindi la prossimità dell'accoppiamento fra un vettore del documento e un vettore di domanda.
Confrontando il vettore di domanda a molti vettori di documento, possiamo allineare i documenti in base "alla qualità" dell'accoppiamento rapportata alla domanda.
Ma da cosa sono prodotti quei pesi e da dove provengono?Le sezioni seguenti descrivono come sono** calcolati i pesi**.
Ci sono veramente parecchi tipi di pesi che devono essere calcolati!
Un insieme dei pesi che ovviamente abbiamo bisogno di conoscere, sono i pesi usati nel vettore di domanda.Il vettore di domanda contiene tutti i termini utilizzabili indicizzati nel documento.
Il peso nel vettore di domanda riflette l'importantanza della parola chiave nel contesto dell'intero documento.Quando la** N** è grande, questo insieme di pesi è abbastanza stabile.
Un nuovo documento può essere aggiunto all'insieme del documento senza cambiare significativamente il valore nel vettore di domanda.Il secondo insieme dei pesi che ci serve è potenzialmente enorme.
Per ciascuno di N documenti dell'insieme di documenti, dobbiamo calcolare un peso per ogni termine indicizzato in quel documento.
Ogni documento ha un vettore del documento contenente il peso per ogni termine indicizzato presente nel documento.
Se abbiamo 1.000 documenti e 1.000 termini indicizzati, dovremo calcolare 1.000.000 di pesi.
Ogni volta che aggiungiamo un nuovo documento all'insieme dei documenti, dobbiamo calcolare un insieme dei pesi per le parole del nuovo documento.Cos'è che rende una parola importante per una ricerca?
Può essere importante in due contesti: nella regolazione del documento originale e nel contesto dell'intera raccolta.
Una parola che compare in ogni documento, per esempio, non avrebbe valore nell'insieme del documento.
Per calcolare il peso di una parola chiave, ci occorre quindi un sistema per combinare l'importanza di una parola in un documento e misurare l'importanza di una parola nell'intero insieme del documento.Una volta che abbiamo quei valori, possimo calcolare i pesi.
Questa tabella ci mostra come questi fattori combinano in generale i termini:
Importanza nel documento*Importanza insieme dei documenti** Peso**
Alto____________ Alto__________________ **Molto alto **
Basso____________ Alto__________________ Medio
Alto______________ Basso________________ Medio
Basso____________ Basso________________ Molto bassoGli esperti del reperimento delle informazioni usano metodi differenti per calcolare i pesi del vettore del documento che per calcolare i pesi del vettore di domanda, ed hanno una varietà di tecniche di misurazione dell'importanza della parola nei vari differenti contesti.
In generale, per calcolare questi valori essi usano tecniche statistiche che comprendono l'analisi di frequenza della parola.
Guarderemo alle frequenze degli algoritmi e quindi infine vedremo come sono combinati nei pesi.
La prossima volta vedremo:
**f i, J: La frequenza normalizzata di termine (tf) del ki nella d J **[per consultare queste note senza commenti ...vai [url=http://www.giorgiotave.it/forum/viewtopic.php?t=6560]QUI ]
-
f i, j: Termine di frequenza normalizzato (tf) di ki in d j
la prima frequenza che esaminiamo è la frequenza di termine di una parola all'interno di un documento. Stiamo andando ad imparare come calcolare la frequenza normalizzata* ki* in d j
La normalizzazione è un processo matematico di adattamento o di confinamento in posizione ordinata.
Un conteggio approssimativo di frequenza è essenzialmente inutile.
In un documento molto grande, una parola rara può tranquillamente comparire anche 25 volte.
Un piccolo documento nello stesso insieme di documenti può anche non avere parole che compaiono 25 volte.
Come possiamo confrontare questi conteggi? Dobbiamo normalizzare il conteggio di frequenza, in modo che sia possibile misurare quanto è rara una parola relativamente al suo documento senza considerare la dimensione del documento stesso.
Un modo per farlo è comparare il numero di volte che una data parola compare (freq i , j) al numero di volte che la parola più presente compare nel testo (max (freq l, j)).
Questo è un modo per ridurre i risultati ed adattarli approssimativamente alla dimensione del testo.
Se li dividiamo, otteniamo una regolare gamma di valori, inferiore o uguale a uno.
Diamo un'occhiata alla formula:
Questo ci dimostra che la frequenza normalizzata per una data parola in un dato documento (f i , j) è uguale alla frequenza approssimativa della parola nel documento (freq i , j) diviso la frequenza approssimativa della parola più comune nel documento (max l freq l , j )
Vediamo nell'esempio seguente come si normalizzano con precisione i conteggi approssimativi di frequenza.
Come sempre, il freq i , j è il conteggio approssimativo di un dato termine *ki * in un dato documento d j. Quindi dovremo immaginare di computare il valore di freq i , j per tutti i termini nel *d j * e conosceremo così la parola più comune, max (freq i , j).
Quella sarà spesso la parola " il "; qui immaginiamo che sia presente 100 volte.
*word____________ freq i , j____ max (freq i , j)___ f i , j *
intercettazione______ 1_________ 100__________ .01
risoluzione_________ 10________ 100__________ 0.1
di________________ 50________ 100__________ 0.5
il________________ 100_______ 100___________ 1
Quindi, "** il** " appare 100 volte ed è la frase più popolare. Questo gli rende una frequenza normalizzata di 1,0.
La parola "risoluzione" compare dieci volte in questo documento, quindi la sua frequenza normalizzata è 10/100 o 0,1.
La parola "intercettazione" appare ma una volta sola ed ha una frequenza normalizzata di 0,01.In generale, vediamo che le parole più comuni dovrebbero avere un'alta frequenza normalizzata e le parole più rare una più bassa frequenza normalizzata.
La legge di Zipf dice che ci saranno poche parole prossime ad uno e molte parole nell'allineamento più basso con un numero corretto nel mezzo, ma questo è un'altro argomento.
Per concludere, per una parola nell'insieme dei documenti ma non contenuta nel documento in esame,* f i , j* consideriamo uguale a zero, da freq i , j = 0 e quello è nel numeratore della frequenza normalizzata.
Possiamo quindi evincere che la frequenza normalizzata è:
una misura di frequenza che varia da zero a 1 per ogni termine in un documento.
Questa formula assegna un più alto valore alle parole che compaiono più spesso delle parole che compaiono di meno; in un certo senso, le parole più comuni sono più importanti o utili che le parole che appaiono soltanto una o due volte.La prossima volta:
Frequenza inversa del documentoE' possibile consultare queste note senza commenti [url=http://www.giorgiotave.it/forum/viewtopic.php?t=6560]QUI.
-
Mi aggiungo ai complimenti di LowLevel sulla comunità e non mi pronuncio sui vari screzi di cui ho avuto occasione di leggere nel [url=http://www.giorgiotave.it/forum/viewtopic.php?t=6316]topic sugli insulti (ricordo qualche incomprensione iniziale con Mamilù dovuta probabilmente al fatto che è molto passionale in ciò fa, ma alla fine tutto si chiarì).
Mi riaggancio a quanto dice LowLevel mutando le sue affermazioni in cosiglio. La programmazione di un buon motore di ricerca è, evidentemente, un lavoro complesso (molto bello l'aneddoto di AgoAgo sulla multinazionale russa che fotografa perfettamente la mancanza di cultura anche ad alti livelli sui costi e le dimensioni dei progetti. In Italia, senza disfattisimi, ci sarebbero i medesimi aneddoti che confermano che sia forse peggio).
@LowLevel said:
Qui tutti danno per scontato che "motore di ricerca" equivalga a "motore di ricerca dedicato al Web ed ad un uso pubblico".
A tal proposito copio la definizione di Motore di Ricerca di wikipedia (invitandovi a migliorarla, naturalmente):
Un motore di ricerca è un sistema automatico che analizza un insieme di dati spesso da lui stesso raccolti e restituisce un indice dei contenuti disponibili classificandoli in base a formule matematiche che ne indichino il grado di rilevanza data una determinata chiave di ricerca.
non ha senso andare da un cineamatore dilettante per dirgli di piantarla di giocare con la cinepresa visto che non possiede gli stessi mezzi di Cinecittà o Hollywood. Fategli fare pratica, a quel cineamatore
Pienamente d'accordo anche su questo punto e in più aggiungo che il regista di Hollywood ha solo interesse nel supportare progetti del genere, perchè sarà il primo ad essere interpellato e imitato.
In definitiva il mio consiglio è questo (scusate la lungaggine per arrivarci): in fase iniziale progettate il motore affinchè lavori solo in un ristretto campo (evitando l'online), in modo da poter effettuare la raffinazione del software direttamente su un campo ristretto di lavoro e avere più a portata di mano le variabili da controllare. A mio giudizio il lavoro ne risulterà agevolato. L'applicazione sul web è solo causa di problemi maggiori, che possono essere affrontati una volta che si ha ben chiaro il progetto da portare avanti.
Il mese scorso sono stati pubblicati tre articoli divulgativi/introduttivi all'Information Retrieval su Login (ed. infomedia), chi fosse interessato è invitato a procurarseli (gli articoli sono stati scritti alla fine dell'estate scorsa).
ciao a tutti e buon lavoro,
Lucas