Classificazione del documento: tf-idf prima o dopo il filtro delle caratteristiche?


8

Ho un progetto di classificazione dei documenti in cui sto ottenendo il contenuto del sito e quindi assegnando una delle numerose etichette al sito Web in base al contenuto.

Ho scoperto che tf-idf potrebbe essere molto utile per questo. Tuttavia, non ero sicuro di quando usarlo esattamente.

Supponendo che un sito Web che si occupa di un argomento specifico ne faccia ripetutamente menzione, questo è stato il mio processo attuale:

  1. Recupera il contenuto del sito, analizza il testo normale
  2. Normalizzare e contenere il contenuto
  3. Tokenize in unigrams (forse anche bigrams)
  4. Recupera un conteggio di ciascun unigramma per il documento dato, filtrando le parole a bassa e bassa occorrenza
  5. Addestra un classificatore come NaiveBayes sul set risultante

La mia domanda è la seguente: dove si adatterebbe tf-idf qui ? Prima di normalizzare / derivare? Dopo la normalizzazione ma prima della tokenizzazione? Dopo aver tokenizzato?

Qualsiasi approfondimento sarebbe molto apprezzato.


Modificare:

A un esame più attento, penso che potrei essermi imbattuto in un malinteso su come funziona TF-IDF. Al passaggio 4 sopra che descrivo, avrei dovuto alimentare la totalità dei miei dati in TF-IDF in una volta? Se, ad esempio, i miei dati sono i seguenti:

[({tokenized_content_site1}, category_string_site1), 
 ({tokenized_content_site2}, category_string_site2), 
...
 ({tokenized_content_siten}, category_string_siten)}]

Qui, la struttura più esterna è un elenco, contenente tuple, contenente un dizionario (o hashmap) e una stringa.

Avrei per alimentare la totalità di tali dati nella calcolatrice TF-IDF in una sola volta per ottenere l'effetto desiderato? In particolare, ho esaminato il TfidfVectorizer di scikit-learn per farlo, ma non sono sicuro del suo utilizzo, poiché gli esempi sono piuttosto scarsi.

Risposte:


8

Come l'hai descritto, il passaggio 4 è il punto in cui si desidera utilizzare TF-IDF. In sostanza, TD-IDF conterà ogni termine in ciascun documento e assegnerà un punteggio in base alla frequenza relativa nella raccolta di documenti.

Manca tuttavia un grande passo nel processo: annotare un set di allenamento. Prima di addestrare il tuo classificatore, dovrai annotare manualmente un campione dei tuoi dati con le etichette che vuoi applicare automaticamente usando il classificatore.

Per rendere tutto più semplice, potresti prendere in considerazione l'utilizzo del Classificatore di Stanford . Eseguirà l'estrazione delle funzionalità e costruirà il modello di classificazione (supportando diversi algoritmi di machine learning), ma dovrai comunque annotare manualmente i dati di allenamento.


Prima di addestrare il classificatore, formatto i dati in tuple di ({tokenized content}, category). Dato che ho la formazione impostata siti Web in un database e già classificato, non è un problema. Le etichette che il classificatore sarà in grado di applicare saranno solo quelle che ha visto dal set di addestramento annotato, giusto?
user991710

Ri: "Le etichette che il classificatore sarà in grado di applicare saranno solo quelle che ha visto dal set di addestramento annotato, giusto?" Corretta. Nell'apprendimento supervisionato, il classificatore non sarà in grado di creare categorie nuove / invisibili. Se vuoi farlo, dovresti esaminare qualcosa come il clustering o la modellazione degli argomenti.
Charlie Greenbacker,

Grazie mille per l'informazione! Dato che hai risposto anche alla mia domanda, lo accetterò come risposta.
user991710

Mi scuso per averlo riportato dopo aver accettato la risposta di cui sopra, ma ho calcolato che avrei maggiori probabilità di ottenere una risposta al mio aggiornamento se ti avessi chiesto direttamente. Per evitare lunghi commenti, ti sarei molto grato se potessi dare un'occhiata alla mia modifica nel post originale.
user991710

1
RE: "Dovrei inserire tutti i miei dati in TF-IDF contemporaneamente?" Sì, funziona così. RE: "Ho guardato il TfidfVectorizer di scikit-learn per fare questo, ma non sono sicuro del suo utilizzo poiché gli esempi sono piuttosto scarsi." Ecco un esempio che ho scritto: github.com/charlieg/… - probabilmente è meglio se usi un corpus di documenti come input, piuttosto che qualche tupla dict + string che hai creato.
Charlie Greenbacker,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.