• Super User

    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:
    image

    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 documento

    E' possibile consultare queste note senza commenti [url=http://www.giorgiotave.it/forum/viewtopic.php?t=6560]QUI. :ciauz:


  • User Attivo

    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 😉


  • Super User

    **Frequenza inversa del documento **

    Ora dobbiamo far saltar fuori una misura di frequenza nel contesto dell'intero insieme del documento.

    Possiamo definirla come "la frequenza inversa del documento" ed è data dalla formula IDF=log (N/ni). Che cosa significa e che cosa è quella formula nel suo insieme?

    In primo luogo, consideriamo la parte "inversa".
    A differenza dal caso di frequenza normalizzata all'interno di un documento, nel contesto dell'intero insieme di documento ci occorre che l'importanza di una parola scenda così come la frequenza della parola aumenta.

    Quando la parola compare in ogni documento, ci occorre che questo valore sia zero.

    Dopo tutto, se compare in ogni documento, è senza valore come differenziatore fra i documenti.

    Quando la parola compare soltanto in alcuni documenti, desideriamo che questo abbia un alto valore.

    Quindi, l'inverso:

    • quantità elevata, valore basso;
    • conteggio basso, alto valore.
      Questo è l'opposto della frequenza normalizzata.

    Quindi, che valore possiamo dargli? Ricordiamo le definizioni:

    N è il totale # dei documenti.

    Ni è # dei documenti in cui il termine di ricerca di interesse (ki) compare.

    Possiamo fare un rapporto di N diviso da Ni, (N/Ni) che esprimerà abbastanza chiaramente questo rapporto inverso.

    Per vederlo, guardiamo questa tabella:

    N_ ni___ N/ni___ Commento

    1000___ 1___ 1000___ Conteggio basso, valore alto! Se la parola è presente una sola volta, il rapporto diviene molto alto. Hmm, se usiamo questo per determinare il peso diverrà troppo dominante.

    1000___ 100___ 10___ Questo è un numero ragionevole, forse...

    1000___ 500____ 2___ Conteggio alto, valore basso.

    1000___ 1000___ 1___ Oops! Abbiamo detto che quando la parola appare in ogni documento, ci serve che il numero sia zero. Qui il nostro rapporto inverso è pari a uno. Questo è un problema.

    Quindi siamo vicini, ma abbiamo alcuni problemi. Come risolvere i problemi con il nostro rapporto inverso? Useremo la funzione di logaritmo per normalizzare i valori.

    Anziché N/ni, consideriamo log(N/ni):

    N_ ni___ log(N/ni)___ Commento

    1000___ 1_______ 3____ Bene, 3 sembra un buon numero da usare come fattore maggiorativo per una parola realmente rara.

    1000___ 100_____ 2____ Mi piace anche questo 2

    1000___ 500___ .301029996___ Se una parola appare in metà dei documenti, non è molto degna... hmmm, .3 suona bene.

    1000___ 1000____ 0____ Bingo! Abbiamo detto che quando la parola compare in ogni documento, avremmo voluto il peso essere zero. Ecco, sta cominciando a funzionare!.

    Così questo appare un buon IDF [ Inverse Document Frequencies ].

    È zero quando la parola compare in tutti i documenti ed aumenta progressivamente così come il formato dei documenti diviene maggiore.

    Usando un paragone per tuffatori, l'IDF è paragonabile "al grado della difficoltà" di un tuffo.

    L'IDF di una parola chiave è costante attraverso un insieme dei documenti.

    È soltanto necessario calcolarlo una volta per un dato insieme di documenti.

    Il grado della difficoltà di un tuffo non cambia mentre i vari tuffatori lo fanno e l'IDF di un termine di ricerca non cambia mentre la parola chiave è usata nelle ricerche su documenti differenti.

    Pesi

    Ora, per concludere, possiamo calcolare i pesi!

    Abbiamo già visto in anteprima come desideriamo si comportino i pesi.

    Se aggiungiamo alcuni dati-campione vediamo che una moltiplicazione dei fattori funzionerà perfettamente nella generazione dei pesi:

    **Frequenza_________Frequenza____________Peso_____ Esempio_____ Esempio_____ Esempio
    Normalizzata___ Inversa del documento_________________ nf__________ idf_______ (nf * idf)
    **
    Alta_____________ Alta____________ Molto alto_______ .9___________ 1.2________ 1.08

    Bassa_____________ Alta_____________ Medio__________ .2___________ .9________ .18

    Alta____________ Bassa____________ Medio__________ .85__________ .04________ 0.034

    Bassa____________ Bassa__________ Molto basso_______ .15__________ .09________ 0.0135

    Come illustrato, poiché entrambi i termini sono stati normalizzati, possiamo moltiplicarli semplicemente insieme per ottenere un valore del peso che segue le regole generali nella tabella.

    Questa in effetti è la formula consigliata per calcolare il peso dei documenti:
    image
    Questo ci dice che il peso per il ki in dj pari alla sua frequenza normalizzata (nf) di tempi della relativa frequenza inversa del documento (IDF). Puo essere applicato entrambi i pesi di documento.

    Per usarla in un peso di domanda, la frequenza normalizzata dovrebbe essere calcolata sull'intero insieme di documento, non su di un singolo documento.

    Il testo suggerisce un aumento nel calcolo del vettore di domanda:
    image
    Questo ci dice che il peso del termine i nel vettore di domanda q è pari alla frequenza normalizzata del termine di ricerca nel "testo della richiesta delle informazioni q".
    Poiché questo sarebbe solitamente un numero basso, c'è un falso fattore di 0,5: la frequenza normalizzata ricalcolata ottiene un mezzo peso ed un valore libero "0,5" è aggiunto.
    Ciò aumenterebbe il valore di una frase di ricerca che è stata inserita più di una volta.
    Se ad esempio desiderassimo trovare "salto" potremmo cercare "salto salto salto" e questo aumenterebbe il valore di quella frase.
    Ho miei dubbi circa l'efficacia del questo sistema come interfaccia utente.

    Nel software di prova dell'Università [USA], è stata usata la frequenza normalizzata invariata di termine per il peso di vettore di domanda.

    **Conclusioni

    Il Modello Vettoriale di Reperimento delle Informazioni è un potente strumento per la realizzazione del Motore di ricerca.

    Questa discussione ha fornito un'introduzione ai concetti matematici richiesti per capire il Modello Vettoriale ed ha mostrato l'applicazione di quei concetti nello sviluppo del modello stesso.**

    vector model Information Retrieval

    Theory of Information Retrieval, Florida State University LIS-5263 (Fall, 2003)
    Written by Rich Ackerman, September 25. 2003
    http://www.hray.com/

    E' possibile consultare queste note senza commenti [url=http://www.giorgiotave.it/forum/viewtopic.php?t=6560]QUI.

    Concluso questo primo capitolo di studio, prima di passare alla realizzazione di un Semplice Motore di Ricerca valuteremo alcune note su:

    **Salton's Vector Space Model ** :ciauz:


  • User Attivo

    Ehm...che fine ha fatto il progetto???


  • Bannato Super User

    @Salatti.NET said:

    Ehm...che fine ha fatto il progetto???

    Trattandosi di open source ognuno dedica il tempo che può allo sviluppo, che comunque procede, presto speriamo di poter rilasciare un'anteprima, sempre compatibilmente con gli impegni del team.

    :ciauz:


  • Community Manager

    Dovremmo riuscire a prensentarlo per il convegno/conferenza di Novembre del Forum GT 🙂

    Naturalmente a Novembre sarà presentato il progetto futuro.

    Il semplice motore di ricerca per la dimostrazione al forum potrebbe avere una demo prima 🙂


  • User Attivo

    Ok, ho chiesto perché non vedevo più news...
    Per il convegno di Novembre...cercherò di esserci!!


  • Community Manager

    @Salatti.NET said:

    Ok, ho chiesto perché non vedevo più news...
    Per il convegno di Novembre...cercherò di esserci!!

    Tranquillo, ci vediamo a Novembre 😉


  • Moderatore

    Non vedo l'ora di avere notizie, siete magici

    :ola:

    :re:


  • Moderatore

    @Salatti.NET said:

    Ehm...che fine ha fatto il progetto???

    Ciao a tutti,
    vorrei unirmi anch'io al progetto, in particolare vorrei avere info su:

    • I modelli relazionali dei DB che state adottando (interessanti le proposte di BeKe).
    • Chi sta implementando il progetto e quali sono i compiti affidati in modo da sapere cosa chiedere ed a chi.
    • Io progetto in UML (Object Oriented) e programmo in C, C#, VB.NET perciò se posso essere utile...