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 .
Die Themenmodellierung ist eine sehr geeignete Methode für Ihr Problem. Themenmodelle sind eine Form des unbeaufsichtigten Lernens / Entdeckens, bei der eine bestimmte (oder entdeckte) Anzahl von Themen durch eine Liste von Wörtern definiert wird, bei denen eine hohe Wahrscheinlichkeit besteht, dass sie zusammen auftreten. In einem separaten Schritt können Sie jedes Thema mit Hilfe von Fachexperten kennzeichnen. Für Ihre Zwecke ist dies jedoch nicht erforderlich, da Sie nur an drei Clustern interessiert sind.
Sie behandeln jedes Dokument als eine Worttüte und entfernen Stoppwörter usw. vorab. Mit den einfachsten Methoden geben Sie die Anzahl der Themen vorab an. In Ihrem Fall können Sie entweder "3" als festes Limit für Kategorien angeben oder eine größere Anzahl von Themen (zwischen 10 und 100) auswählen und dann in einem separaten Schritt drei Cluster für Dokumente mit gemeinsamem Schwerpunkt auf bilden Themen. K-Means oder andere Clustering-Methoden könnten verwendet werden. (Ich würde den letzteren Ansatz empfehlen)
Sie müssen die Themenmodellierungssoftware nicht von Grund auf neu programmieren. Hier ist eine Webseite mit vielen Ressourcen, einschließlich Softwarebibliotheken / -paketen .
Keines ist in Java, aber es gibt Möglichkeiten, C ++ und Python unter Java auszuführen.
quelle
Hier sind ein paar wirklich großartige Open-Source-Softwarepakete für die Textklassifizierung, die Ihnen den Einstieg erleichtern sollen:
quelle