2013-06-07 20 views
6

Quindi sto cercando di classificare i testi utilizzando Weka SVM. Finora, i miei vettori di funzionalità utilizzati per addestrare l'SVM sono composti da statistiche TF-IDF per unigram e bigram che appaiono nei testi di addestramento. Ma i risultati ottenuti dal test del modello SVM addestrato non sono stati affatto accurati, quindi qualcuno può darmi un feedback sulla mia procedura? Sto seguendo questa procedura per classificare testi:Elaborazione del linguaggio naturale - Caratteristiche per la classificazione del testo

  1. Costruire un dizionario fatto di unigrams e bigrammi estratte dai testi di formazione
  2. contare quante volte ogni unigram/bigram appare in ogni testo di formazione, così come il modo molti formazione testi del unigram/bigram appare in
  3. Utilizzare i dati dal punto 2 al calcuate TF-IDF per ogni unigram/bigram
  4. per ogni documento, costruire un vettore caratteristica che è la lunghezza del dizionario, e memorizzare la corrispondente statistica TF-IDF in ogni elemento del vettore (quindi, ad esempio, il primo elemento nel vettore di funzionalità per documento si potrebbe corrispondere al TF-IDF per la prima parola nel relativo dizionario di documentare uno)
  5. etichetta classe accoda a ciascun vettore di caratteristiche per distinguere quale testo appartiene a quale autore
  6. ferroviaria SVM utilizzando questi includono vettori
  7. vettori Caratteristica per i testi di prova sono costruiti allo stesso modo come i testi di formazione, e sono classificati per l'SVM

Inoltre, potrebbe essere che ho bisogno di allenare la SVM con più funzioni? In tal caso, quali caratteristiche sono più efficaci in questo caso? Qualsiasi aiuto sarebbe molto apprezzato, grazie.

risposta

7

I documenti in lingua naturale contengono normalmente molte parole che compaiono solo una volta, noto anche come Hapax Legomenon. Ad esempio, il 44% delle parole distinte in Moby-Dick appare una sola volta e il 17% due volte.

Pertanto, incluse tutte le parole di un corpus normalmente si traduce in una quantità eccessiva di funzioni. Al fine di ridurre le dimensioni di questo spazio funzione, sistemi di NLP tipicamente impiegano uno o più dei seguenti elementi:

  • rimozione di arresto parole - per la classificazione autore, queste sono parole in genere brevi e comuni come è , il, a, quale e così via.
  • Stemming: gli stemmer popolari (come lo stemmer Porter) utilizzano un set di regole per normalizzare l'inflessione di una parola. Per esempio, passeggiata, camminare e passeggiate sono tutti mappati allo stelo passeggiata.
  • Soglia correlazione/significanza - Calcolare il coefficiente di correlazione di Pearson o il valore p di ciascuna caratteristica rispetto all'etichetta di classe. Quindi imposta una soglia e rimuovi tutte le funzionalità che ottengono un valore inferiore a tale soglia.
  • Soglia copertura: simile alla soglia precedente, rimuovere tutte le funzionalità che non compaiono in almeno t documenti, dove t è molto piccolo (< 0,05%) rispetto all'intera dimensione del corpo.
  • Filtro basato sulla parte del discorso - ad esempio, solo considerando i verbi o rimozione di nomi.
  • Filtro basato sul tipo di sistema - ad esempio, un sistema NLP per il testo clinico può considerare solo le parole che si trovano in un dizionario medico.

Per arginare, la rimozione di parole stop, l'indicizzazione del corpus, e tf_idf o un documento somiglianza di calcolo, mi consiglia di utilizzare Lucene. Google "Lucene in 5 minuti" per alcuni tutorial facili e veloci sull'uso di lucene.

2

In questi tipi di classificazione è importante che il vettore non sia molto grande, perché è possibile ottenere molti zeri e questo potrebbe avere un impatto negativo sui risultati perché questi vettori sono troppo vicini ed è difficile separarli loro correttamente. Inoltre ti raccomando di non usare tutti i bigram, sceglierne alcuni con la frequenza più alta (nel tuo testo) per ridurre le dimensioni del tuo vettore e mantenere abbastanza informazioni. Un po 'artistico perché è consigliato: http://en.wikipedia.org/wiki/Curse_of_dimensionality E ultimo ma anche importante è la quantità di dati che hai, più grande è il tuo vettore più dati dovresti avere.

Problemi correlati