Dokumentklassifizierung: tf-idf vor oder nach der Feature-Filterung?

8

Ich habe ein Dokumentklassifizierungsprojekt, bei dem ich den Inhalt der Website erhalte und der Website dann eine von zahlreichen Beschriftungen entsprechend dem Inhalt zuweise.

Ich fand heraus, dass tf-idf dafür sehr nützlich sein könnte. Ich war mir jedoch nicht sicher, wann ich es genau verwenden sollte.

Die Annahme, dass eine Website, die sich mit einem bestimmten Thema befasst, wiederholt erwähnt wird, war mein aktueller Prozess:

  1. Rufen Sie den Inhalt der Website ab und analysieren Sie ihn im Klartext
  2. Normalisieren und Stamminhalt
  3. Token in Unigramme (vielleicht auch Bigramme)
  4. Rufen Sie eine Zählung jedes Unigramms für das angegebene Dokument ab, indem Sie Wörter mit geringer Länge und geringem Vorkommen filtern
  5. Trainieren Sie einen Klassifikator wie NaiveBayes für die resultierende Menge

Meine Frage lautet wie folgt: Wo würde tf-idf hier hineinpassen ? Vor dem Normalisieren / Stemming? Nach dem Normalisieren aber vor dem Tokenisieren? Nach dem Tokenisieren?

Jeder Einblick wäre sehr dankbar.


Bearbeiten:

Bei näherer Betrachtung habe ich möglicherweise ein Missverständnis darüber, wie TF-IDF funktioniert. Müsste ich bei dem oben beschriebenen Schritt 4, den ich beschreibe, die gesamten Daten auf einmal in TF-IDF einspeisen? Wenn meine Daten beispielsweise wie folgt lauten:

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

Hier ist die äußerste Struktur eine Liste, die Tupel, ein Wörterbuch (oder eine Hashmap) und eine Zeichenfolge enthält.

Müsste ich die gesamten Daten sofort in den TF-IDF-Rechner einspeisen, um den gewünschten Effekt zu erzielen? Insbesondere habe ich mir den scikit-learn TfidfVectorizer angesehen, um dies zu tun, aber ich bin mir ein bisschen unsicher, wie er verwendet wird, da Beispiele ziemlich spärlich sind.

user991710
quelle

Antworten:

8

Wie Sie es beschrieben haben, möchten Sie in Schritt 4 TF-IDF verwenden. Im Wesentlichen zählt TD-IDF jeden Begriff in jedem Dokument und weist eine Punktzahl zu, die der relativen Häufigkeit der Dokumentensammlung entspricht.

In Ihrem Prozess fehlt jedoch ein großer Schritt: das Kommentieren eines Trainingssatzes. Bevor Sie Ihren Klassifikator trainieren, müssen Sie ein Beispiel Ihrer Daten manuell mit den Bezeichnungen versehen, die Sie mithilfe des Klassifikators automatisch anwenden möchten.

Um dies alles zu vereinfachen, sollten Sie den Stanford Classifier verwenden . Es führt die Merkmalsextraktion durch und erstellt das Klassifikatormodell (das mehrere verschiedene Algorithmen für maschinelles Lernen unterstützt). Sie müssen die Trainingsdaten jedoch weiterhin manuell kommentieren.

Charlie Greenbacker
quelle
Vor dem Training des Klassifikators formatiere ich die Daten in Tupeln von ({tokenized content}, category). Da ich die Trainings-Set-Websites in einer Datenbank habe und bereits kategorisiert habe, ist dies kein Problem. Die Bezeichnungen, die der Klassifizierer anwenden kann, sind nur die, die er aus dem kommentierten Trainingssatz gesehen hat, richtig?
user991710
Betreff: "Die Bezeichnungen, die der Klassifizierer anwenden kann, sind nur die, die er aus dem kommentierten Trainingssatz gesehen hat, richtig?" Richtig. Beim überwachten Lernen kann der Klassifizierer keine neuen / unsichtbaren Kategorien erstellen. Wenn Sie dies tun möchten, sollten Sie sich mit Clustering oder Themenmodellierung befassen.
Charlie Greenbacker
Vielen Dank für die Informationen! Da Sie auch meine Frage beantwortet haben, werde ich dies als Antwort akzeptieren.
user991710
Ich entschuldige mich dafür, dass ich dies zurückgebracht habe, nachdem ich die obige Antwort akzeptiert habe, aber ich rechnete damit, dass ich bessere Chancen hätte, eine Antwort auf mein Update zu erhalten, wenn ich Sie direkt fragen würde. Um lange Kommentare zu vermeiden, würde ich mich sehr freuen, wenn Sie sich meine Bearbeitung im Originalbeitrag ansehen könnten.
user991710
1
RE: "Müsste ich die gesamten Daten auf einmal in TF-IDF einspeisen?" Ja, so funktioniert es. RE: "Ich habe mir den scikit-learn TfidfVectorizer angesehen, um dies zu tun, aber ich bin mir ein bisschen unsicher, wie er verwendet wird, da Beispiele ziemlich spärlich sind." Hier ist ein Beispiel, das ich geschrieben habe: github.com/charlieg/… - Es ist wahrscheinlich am besten, wenn Sie einen Korpus von Dokumenten als Eingabe verwenden, anstatt ein von Ihnen erstelltes Diktat + Zeichenfolgentupel.
Charlie Greenbacker