Textklassifizierung und -vorhersage unter Verwendung des Bag Of Words-Ansatzes

Es gibt eine Reihe von Ansätzen zur Textklassifizierung. In anderen Artikeln habe ich Multinomial Naive Bayes und Neuronale Netze behandelt.

Einer der einfachsten und gebräuchlichsten Ansätze heißt „Bag of Words“. Es wurde von kommerziellen Analyseprodukten wie Clarabridge, Radian6 und anderen verwendet.

Der Ansatz ist relativ einfach: Bestimmen Sie anhand einer Reihe von Themen und Begriffen, die jedem Thema zugeordnet sind, welche Themen in einem Dokument vorhanden sind (z. B. ein Satz).

Während andere, exotischere Algorithmen Wörter auch in „Taschen“ organisieren, erstellen wir bei dieser Technik kein Modell und wenden keine Mathematik auf die Art und Weise an, in der sich diese „Tasche“ mit einem klassifizierten Dokument schneidet. Die Klassifizierung eines Dokuments ist polymorph, da es mehreren Themen zugeordnet werden kann.

Scheint dies zu einfach, um nützlich zu sein? Probieren Sie es aus, bevor Sie zu Schlussfolgerungen gelangen. In NLP ist es häufig der Fall, dass ein einfacher Ansatz manchmal viel bewirken kann.

Wir werden drei Dinge brauchen:

  • Eine Themen- / Wortdefinitionsdatei
  • Eine Klassifikatorfunktion
  • Ein Notizbuch zum Testen unseres Klassifikators

Und dann werden wir uns ein Stück weiter wagen und anhand unserer Klassifizierungsdaten ein Vorhersagemodell erstellen und testen.

Themen und Wörter

Unsere Definitionsdatei ist im JSON-Format. Wir werden sie verwenden, um Nachrichten zwischen Patienten und einer Krankenschwester zu klassifizieren, die ihrer Pflege zugeordnet ist.

topic.json

Diese Definition enthält zwei wichtige Punkte.

Schauen wir uns zunächst einige Begriffe an. Zum Beispiel ist "Bruis" ein Stiel. Es werden Obermengen wie "Blutergüsse", "Blutergüsse" usw. behandelt. Zweitens enthält Begriffe * tatsächlich Muster , zum Beispiel * dpm ist ein Muster für ein numerisches d igit gefolgt von „PM“ .

Um die Dinge einfach zu halten, behandeln wir nur den numerischen Mustervergleich, dies könnte jedoch auf einen breiteren Bereich ausgedehnt werden.

Diese Fähigkeit, Muster innerhalb eines Begriffs zu finden, ist sehr nützlich, wenn Dokumente klassifiziert werden, die Datum, Uhrzeit, Geldwerte usw. enthalten.

Probieren wir eine Klassifizierung aus.

Der Klassifizierer gibt eine JSON-Ergebnismenge zurück, die die Sätze enthält, die jedem in der Nachricht gefundenen Thema zugeordnet sind. Eine Nachricht kann mehrere Sätze enthalten, und ein Satz kann keinem, einem oder mehreren Themen zugeordnet sein.

Werfen wir einen Blick auf unseren Klassifikator. Der Code ist hier.

msgClassify.py

Der Code ist relativ einfach und enthält eine praktische Funktion zum Aufteilen eines Dokuments in Sätze.

Vorausschauende Modellierung

Die aggregierte Klassifizierung für eine Reihe von Dokumenten, die einem Ergebnis zugeordnet sind, kann zum Erstellen eines Vorhersagemodells verwendet werden.

In diesem Anwendungsfall wollten wir herausfinden, ob wir Krankenhausaufenthalte anhand der Nachrichten zwischen Patient und Krankenschwester vor dem Vorfall vorhersagen können. Wir verglichen Nachrichten für Patienten, die Krankenhausaufenthalte hatten oder nicht.

Sie können eine ähnliche Technik für andere Arten von Nachrichten verwenden, die mit einem binären Ergebnis verbunden sind.

Dieser Vorgang umfasst mehrere Schritte:

  • Eine Reihe von Nachrichten wird klassifiziert und jedes Thema erhält eine Zählung für diese Reihe. Das Ergebnis ist eine feste Liste von Themen mit einer prozentualen Zuordnung aus den Nachrichten.
  • Der Themenzuordnung wird dann ein Binärwert zugewiesen , in unserem Fall eine 0, wenn kein Krankenhausaufenthalt stattgefunden hat, und eine 1, wenn ein Krankenhausaufenthalt stattgefunden hat
  • Ein logistischer Regressionsalgorithmus wird verwendet, um ein Vorhersagemodell zu erstellen
  • Das Modell wird verwendet, um das Ergebnis neuer Eingaben vorherzusagen

Schauen wir uns unsere Eingabedaten an. Ihre Daten sollten eine ähnliche Struktur haben. Wir verwenden einen Pandas DataFrame.

"Vorfall" ist das binäre Ergebnis und muss die erste Spalte in den Eingabedaten sein.

Jede nachfolgende Spalte ist ein Thema und der Prozentsatz der Klassifizierung aus dem Satz von Nachrichten, die dem Patienten gehören.

In Zeile 0, sehen wir , dass etwa ein Viertel der Nachrichten für diese Patienten über die sind dank Thema, und keine sind über medizinische Begriffe oder Geld . Somit ist jede Zeile ein binäres Ergebnis und ein themenübergreifendes Messaging-Klassifizierungsprofil .

Ihre Eingabedaten haben unterschiedliche Themen, unterschiedliche Spaltenbezeichnungen und eine andere binäre Bedingung, ansonsten ist die Struktur jedoch ähnlich.

Verwenden wir scikit-learn, um eine logistische Regression zu erstellen und unser Modell zu testen.

Hier ist unsere Ausgabe:

precision recall f1-score support 0 0.66 0.69 0.67 191 1 0.69 0.67 0.68 202avg / total 0.68 0.68 0.68 393

Die Präzision und der Rückruf dieses Modells anhand der Testdaten liegen in den hohen 60ern - etwas besser als vermutet und leider nicht genau genug, um von großem Wert zu sein.

In diesem Beispiel war die Datenmenge relativ gering (tausend Patienten, ~ 30 Nachrichten pro Patient). Denken Sie daran, dass nur die Hälfte der Daten für das Training verwendet werden kann, während die andere Hälfte (nach dem Mischen) zum Testen verwendet wird.

Durch die Einbeziehung strukturierter Daten wie Alter, Geschlecht, Zustand, Vorfälle in der Vergangenheit usw. könnten wir unser Modell stärken und ein stärkeres Signal erzeugen. Es wäre auch hilfreich, mehr Daten zu haben, da die Anzahl der Trainingsdatenspalten ziemlich groß ist.

Versuchen Sie dies mit Ihren strukturierten / unstrukturierten Daten und prüfen Sie, ob Sie ein hochgradig prädiktives Modell erhalten können. Möglicherweise erhalten Sie nicht die Genauigkeit, die zu automatisierten Aktionen führt, aber eine „Risiko“ -Wahrscheinlichkeit kann als Filter- oder Sortierfunktion oder als Frühwarnzeichen für menschliche Experten verwendet werden.

Der Ansatz „Bag of Words“ eignet sich für bestimmte Arten der Textklassifizierung, insbesondere wenn die Sprache nicht nuanciert ist.

Genießen.