Lassen Sie es uns von Grund auf ausarbeiten. Klassifikation (auch als Kategorisierung bezeichnet) ist ein Beispiel für überwachtes Lernen . Im betreuten Lernen haben Sie:
- Modell - etwas, das sich der internen Struktur Ihrer Daten annähert und es Ihnen ermöglicht, darüber nachzudenken und nützliche Vorhersagen zu treffen (z. B. die Klasse eines Objekts vorherzusagen); Normalerweise verfügt das Modell über Parameter, die Sie "lernen" möchten.
- Trainings- und Testdatensätze - Sätze von Objekten, die Sie zum Trainieren Ihres Modells (Finden guter Werte für Parameter) und zur weiteren Auswertung verwenden
- Trainings- und Klassifizierungsalgorithmen - beschreibt zum einen das Lernen des Modells aus dem Trainingsdatensatz und zum anderen das Ableiten der Klasse eines neuen Objekts anhand des trainierten Modells
Nehmen wir nun einen einfachen Fall der Spam-Klassifizierung. Ihr Trainingsdatensatz ist ein Korpus von E-Mails + entsprechenden Labels - "Spam" oder "kein Spam". Der Testdatensatz hat die gleiche Struktur, wurde jedoch aus einigen unabhängigen E-Mails erstellt (normalerweise teilt man seinen Datensatz einfach auf und verwendet 9/10 davon für das Training und 1/10 für das Testen). Eine Möglichkeit, E-Mails zu modellieren, besteht darin, sie als eine Reihe von Wörtern darzustellen. Wenn wir davon ausgehen, dass Wörter unabhängig voneinander sind, können wir den Naive Bayes-Klassifikator verwenden, dh frühere Wahrscheinlichkeiten für jedes Wort und jede Klasse berechnen (Trainingsalgorithmus) und dann den Bayes-Satz anwenden, um die spätere Wahrscheinlichkeit zu ermitteln, dass ein neues Dokument dazu gehört bestimmte Klasse.
Im Grunde haben wir also:
raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label
Beachten Sie nun, dass wir unsere Objekte (Dokumente) als eine Tüte voller Wörter dargestellt haben. Aber ist der einzige Weg? Tatsächlich können wir viel mehr aus Rohtext extrahieren. Beispielsweise können wir anstelle von Wörtern, wie sie sind, ihre Stämme oder Lemmas verwenden , lautstarke Stoppwörter verwerfen , POS-Tags von Wörtern hinzufügen , benannte Entitäten extrahieren oder sogar die HTML-Struktur des Dokuments untersuchen. Tatsächlich ist eine allgemeinere Darstellung eines Dokuments (und im Allgemeinen eines Objekts) ein Merkmalsvektor . ZB für Text:
actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
0, 0, 1, 1, ..., 5, 7, 2, ..., 2, ... | not spam
0, 1, 0, 0, ..., 3, 12, 10, ..., 0, ... | spam
Hier ist die erste Zeile eine Liste möglicher Features und nachfolgende Zeilen zeigen, wie oft dieses Feature in einem Dokument vorkommt. ZB im ersten Dokument gibt es kein Vorkommen des Wortes "Schauspieler", 1 Vorkommen des Wortes "Brennen", 5 Substantive, 2 Adjektive und 2 fett gedruckte Textteile. Die letzte Spalte entspricht einer resultierenden Klassenbezeichnung.
Mit Feature Vector können Sie beliebige Eigenschaften Ihrer Texte einbinden. Das Finden guter Funktionen kann jedoch einige Zeit in Anspruch nehmen.
Und was ist mit Modell und Algorithmen? Sind wir an Naive Bayes gebunden? Überhaupt nicht. logistische Regression , SVM , Entscheidungsbäume - um nur einige beliebte Klassifikatoren zu nennen. (Beachten Sie, dass wir in den meisten Fällen "Klassifikator" sagen, wir meinen Modell + entsprechende Algorithmen für Training und Klassifizierung).
Für die Implementierung können Sie die Aufgabe in zwei Teile unterteilen:
- Merkmalsextraktion - Umwandlung von Rohtexten in Merkmalsvektoren.
- Objektklassifizierung - Erstellen und Anwenden eines Modells.
Der erste Punkt ist in vielen NLP-Bibliotheken gut ausgearbeitet . Zweitens geht es um maschinelles Lernen. Abhängig von Ihrem Datensatz können Sie entweder Weka oder MLlib verwenden .