Package: tcat
Text CategorizationProgetto per il corso di AI per l'universitÃ  degli studi di Firenze.text-categorization Ã¨ un software, che serve per studiare l'andamento predittivo di due diversi modelli: Il Multi-variate Bernolli e il Multinomial.Si vuole ottenere gli stessi risultati di(McCallum & Nigam, 1998)Nel multinomial Ã¨ presente anche un diverso approccio per la feature selection, che viene chiamatoKL-Divergence.DipendenzeLe seguenti dipendenze sono necessarie per il funzionamento del programmaSklearnMatplotlibPrettyTableProgressbarpipinstallsklearnmatplotlibprogressbarPrettyTableStrutturaLa struttra delle classi Ã¨ la seguente.Descrizione classiDataset: Classe principale che gestisce tutta la struttura, si occupa di leggere i gruppi, creare il dizionario pesato e effettua i test.Group/Document: Classi che interpretano la gerarchia della directory del dataset.GroupedWord/DocumentWord: Classi che rappresentano la parola trovata, rispettivamente per le classi Group e Document. (Vedi sotto la modalitÃ  di raggruppamento)Dictionary: Classe che gestisce le parole (GroupedWord/CountedWord) in modo ordinato e utilizza la ricerca binaria per ottenere una ottima efficenza.WeightedDictionary: Classe astratta che eredita da Dictionary. Ma diversamente da Dictionary le sue parole sono dei WeightedWordVector.MBMWeightedDictionary, MMWeightedDictionary: Classi che implementano il WeightedDictionary, e calcolano i parametri a seconda del modello predittivo Multi-variate o Multinomial.WeightedWordVector: Classe astratta che contiene al suo interno un vettore di GroupedWord pari al numero delle classi totali. Si occupa di calcolare i parametri relativi alla parola data la classe.MBMWeightedWordVector, MMWeightedWordVector: Classi che implementano WeightedWordVector, e creano i pesi a seconda del modello predittivo.Test: Classe che tiene traccia dei risultati di un particolare test.Sequenza train e testQui viene mostrata la sequenza dei principali processi in train e test.GroupingQuesta Ã¨ la visualizzazione della modalitÃ  di raggruppamento. In alto la sequenza di raggruppamento in basso la relazione con le classi.ComandiIl software prevede 5 comandi principali, piÃ¹ eventuali argomenti posizionali che possono essere sia opzionali che obbligatori a seconda del comando.import-dataQuesto comando serve per importare il dataset nella directory 'data' del progetto. PuÃ² anche essere aggiunta manualmente, semplicemente copiando il dataset nella directory e assicurandosi che i dati siano divisi in 'train' e 'test'.Argomenti posizionali:-p | --path: Serve per indicare il percorso alla cartella contenente il dataset. (Obbligatorio)-s | --split [ratio]: Indica che il dataset deve essere diviso in 'train' e 'test', puÃ² anche essere indicato il rapporto di suddivisione. Default: 0.2 (80:20)-n | --name [name]: Imposta il nome da dare al datasetstart-learningQuesto comando inizia a leggere il dataset, e crea il dizionario con i suoi parametri.Argomenti posizionali:-n | --name [name]: Il nome del dataset selezionato. (Obbligatorio)-sw | --stop-words [words ...]: Indica quali sono le stop words da rimuovere. Queste parole non verranno aggiunte al dizionario.-he | --headers [headers ...]: Se il dataset ha degli headers, che devono essere rimossi per non comprometere il risultato dei test, vengono indicati qui l'inizi delgli headers. (Esempio in news Ã© stato indicato come headers: "Newsgroups:")-fr | --fast-reading: Imposta questo parametro per avere una lettura piÃ¹ veloce del dataset, questo in pratica rimuove la fase di tokenization e le parole saranno divise medianti gli spazi, questo comporta un maggior numero di parole trovate durante la lettura.start-testingEffettua i test per tutti i file della sezione 'test' del dataset scelto.Argomenti posizionali:-n | --name [name]: Il nome del dataset selezionato. (Obbligatorio)-fl | --feature-lenght [V ...]: Imposta il numero massimo di parole del dizionario per la feature selection, indicare con -1 se si vogliono usare tutte le parole.-kl | --kl-feature: Imposta come feature selection la versione KL al posto della informazione mutuale. Questo avviene solo per il modello multinomiale.plot-resultMostra i risultati del test precedente.Argomenti posizionali:-n | --name [name]: Il nome del dataset selezionato. (Obbligatorio)show-datasetsMostra i datasets disponibili.RisultatiData la natura casuale della suddivisione dei file in Train e Test, i risultati ottenuti possono variare, anche se in maniera lieve. I risultati qui riportati sono ottenuti tramite i dataset reperibili nella sezione dataset.Sono stati utilizzati i 4 datasets scelti, sono stati messi a confronto i due modelli predittivi ed Ã¨ stato analizato il comportamento delle due varianti di feture selection.NewsgroupIl dataset Ã¨ formato da 19 gruppi e sono stati utilizzati tutti. Come headers Ã¨ stato impostato "Newsgroups:".Multi-variate Bernulli supera il multinomial in dizionari relativamente piÃ¹ piccoli, ma al aumentare delle parole il multinomial ha una performance superiore.
In entrambi casi si ha un miglioramento in termini di accuratezza al aumentare del numero di parole considerate. Arrivando fino al 85% di accuratezza per quanto riguarda il multinomial, e 80% per il multi-variate.In questo caso il modello multinomiale, con il KL, ottiene un maggior incremento nell'accuratezza rispetto all'informazione mutuale.Mutual informationKL feature-selectionWebkbIl dataset Webkb Ã¨ formato da 7 gruppi, ma ne sono state utilizzati solo 4: student, faculty, staff e course.Qui possiamo notare come il multi-variate giÃ  da subito ha un accuratezza molto elevata, con un massimo a 100 parole, e tiene un andamento costante.
Nel caso multinomiale si ha un accuratezza minore rispetto al multi-variate nel caso dei dizionari piccoli, e va ad aumentare man mano che le parole del dizionario aumentano.Anche qui con la versione KL si ottengono dei risultati migliori.Mutual informationKL feature-selectionSector 48Il dataset Ã¨ formato da categorie con vari sotto gruppi, sono stati quindi tutti trattati come gruppi diversi, e ne sono risultati in totale 48.Qui il divario con poche parole Ã¨ piÃ¹ ampio, e il multinomial supera il multi-variate quando ha all'incirca 5000 parole nel dizionario.In questo caso la versione KL per la feature selection si compora peggio rispetto all'informazione mutuale e non si ottengono performance migliori rispetto al multivariate, fino a quando non vengono usate tutte le parole.Mutual informationKL feature-selectionFilmIl dataset Ã¨ formato solo da due gruppi positivo e negativo. (nel dataset e presente anche una terza categoria che Ã¨ stata rimossa)Entrambi qui si comportano bene giÃ  con poche parole e tengono un andamento piÃ¹ o meno costante.Qui abbiamo poca differenza tra il KL e l'informazione mutuale.Mutual informationKL feature-selectionConclusioniIn generale il Multi-variate Bernulli Model supera il Multinomial, quando vengono selezionate relativamente poche parole dal dizionario, mentre il Multinomial tende ad avere una maggior accuratezza con l'utilizzo completo delle parole nel dizionario.Per quanto riguarda le due tipologie di feature selection, la versione KL Ã¨ quella che ottiene migliori risultati la maggior parte delle volte, ma non sempre accade come nel caso del dataset 'Sector48'.RiferimentiTesto assegnato(McCallum & Nigam, 1998)KL-SelectionDatasets:News:http://www.cs.cmu.edu/afs/cs/project/theo-11/www/naive-bayes/20_newsgroups.tar.gzSector:http://archive.ics.uci.edu/ml/machine-learning-databases/00239/corpus.zipWebkb:http://www.cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/www/data/webkb-data.gtar.gzFilm:http://ai.stanford.edu/~amaas/data/sentiment/