2012-03-06 5 views
6

Ultimamente sto lavorando a un'analisi semantica latente. L'ho implementato in Java usando il pacchetto Jama.Come si decide il numero di dimensioni per l'analisi semantica latente?

Ecco il codice:

Matrix vtranspose ; 
    a = new Matrix(termdoc); 
    termdoc = a.getArray(); 
    a = a.transpose() ; 
    SingularValueDecomposition sv =new SingularValueDecomposition(a) ; 
    u = sv.getU(); 
    v = sv.getV(); 
    s = sv.getS(); 
    vtranspose = v.transpose() ; // we obtain this as a result of svd 

    uarray = u.getArray(); 
    sarray = s.getArray(); 
    varray = vtranspose.getArray(); 
    if(semantics.maketerms.nodoc>50) 
    { 

     sarray_mod = new double[50][50]; 
     uarray_mod = new double[uarray.length][50]; 
     varray_mod = new double[50][varray.length]; 
     move(sarray,50,50,sarray_mod); 
     move(uarray,uarray.length,50,uarray_mod); 
     move(varray,50,varray.length,varray_mod); 
     e = new Matrix(uarray_mod); 
     f = new Matrix(sarray_mod); 
     g = new Matrix(varray_mod); 
     Matrix temp =e.times(f); 
     result = temp.times(g); 

    } 
    else 
    { 
     Matrix temp = u.times(s); 
     result = temp.times(vtranspose); 
    } 
    result = result.transpose(); 
    results = result.getArray() ; 

    return results ; 

Ma come possiamo determinare il numero di dimensioni? Esiste un metodo per determinare il numero di dimensioni a cui il sistema dovrebbe essere ridotto per ottenere i migliori risultati? Quali altri parametri consideriamo per le prestazioni efficaci dell'LSA?

risposta

12

quanto riguarda la scelta del numero di dimensioni:

1) http://en.wikipedia.org/wiki/Latent_semantic_indexing:

Un'altra sfida per LSI è stata la presunta difficoltà di determinare il numero ottimale di dimensioni da utilizzare per eseguire la SVD. Come regola generale, un numero inferiore di dimensioni consente confronti più ampi dei concetti contenuti in una raccolta di testo, mentre un numero maggiore di dimensioni consente di confrontare più concetti (o più rilevanti) di concetti. Il numero effettivo di dimensioni che può essere utilizzato è limitato dal numero di documenti nella raccolta. La ricerca ha dimostrato che circa 300 dimensioni di solito forniscono i migliori risultati di con raccolte di documenti di dimensioni moderate (centinaia di migliaia di documenti) e forse 400 dimensioni per le raccolte di documenti più grandi (milioni di documenti). Tuttavia, studi recenti indicano che 50-1000 dimensioni sono adatte a seconda delle dimensioni e della natura della raccolta documenti.

Controllare la quantità di varianza nei dati dopo aver calcolato l'SVD può essere utilizzato per determinare il numero ottimale di dimensioni da conservare. La varianza contenuta nei dati può essere visualizzata tracciando i valori singolari (S) in un grafico ghiaioso. Alcuni professionisti LSI selezionano la dimensionalità associata al ginocchio della curva come punto limite per il numero di dimensioni da conservare. Altri sostengono che alcune quantità della varianza devono essere mantenute e l'importo della varianza nei dati dovrebbe dettare la dimensionalità corretta da conservare. Il settanta per cento viene spesso indicato come la quantità di varianza nei dati da utilizzare per selezionare la dimensionalità ottimale per che ricalcola SVD.



2) http://www.puffinwarellc.com/index.php/news-and-articles/articles/33-latent-semantic-analysis-tutorial.html?showall=1:

Il trucco nell'uso SVD è in capire come molte dimensioni o "concetti" da utilizzare quando approssimare la matrice. Troppo poche dimensioni e motivi importanti sono tralasciati, troppi e il rumore causato da scelte di parole casuali si insinueranno. L'algoritmo SVD è un po 'coinvolto, ma fortunatamente Python ha una funzione di libreria che lo rende semplice da usare. Aggiungendo il seguente metodo di linea alla nostra classe LSA, possiamo considerare la nostra matrice in altre 3 matrici .La matrice U ci fornisce le coordinate di ogni parola sul nostro spazio "concettuale" , la matrice Vt ci fornisce le coordinate di ogni documento nel nostro spazio "concettuale" e la matrice S di valori singolari ci dà un indizio su quante dimensioni o "concetti" abbiamo bisogno di includere .

def calc(self): self.U, self.S, self.Vt = svd(self.A)

Per scegliere il giusto numero di dimensioni da utilizzare, possiamo fare un istogramma del quadrato dei valori singolari. Questo grafico l'importanza ogni valore singolo contribuisce ad approssimare la nostra matrice. Ecco l'istogramma nel nostro esempio.

enter image description here

Per grandi raccolte di documenti, il numero di dimensioni utilizzato è nella gamma da 100 a 500. Nel nostro piccolo esempio, poiché vogliamo rappresentare graficamente lo , utilizzeremo 3 dimensioni, elimineremo la prima dimensione e rappresenteremo il grafico la seconda e la terza dimensione.

Il motivo per cui gettiamo la prima dimensione è interessante. Per i documenti , la prima dimensione è correlata alla lunghezza del documento . Per le parole, è correlato al numero di volte in cui la parola è stata utilizzata in tutti i documenti. Se avessimo centrato la nostra matrice, con sottraendo il valore medio della colonna da ciascuna colonna, avremmo utilizzare la prima dimensione. Per analogia, considera i punteggi di golf. Noi non vogliamo sapere il punteggio effettivo, vogliamo sapere il punteggio dopo sottraendolo dal par. Che ci dice se il giocatore ha fatto una birdie, carrello, ecc



3) Landauer, TK, Foltz, PW, Laham, D., (1998), 'Introduzione alla Latent Semantic Analysis ', Discourse Processes, 25, 259-284:

enter image description here

Problemi correlati