Modell für maschinelles Lernen für Kommentarspam erstellen

1. Hinweis

In diesem Codelab sehen Sie sich Code an, der mit TensorFlow und TensorFlow Lite Model Maker erstellt wurde, um ein Modell mit einem Dataset zu erstellen, das auf Kommentar-Spam basiert. Die Originaldaten sind auf Kaggle verfügbar. Sie wurden in einer einzigen CSV-Datei zusammengefasst und bereinigt, indem unter anderem fehlerhafter Text, Markup und wiederholte Wörter entfernt wurden. So können Sie sich leichter auf das Modell anstatt auf den Text konzentrieren.

Der Code, den Sie sich ansehen, wird hier bereitgestellt. Es wird jedoch dringend empfohlen, dass Sie den Code in Google Colab nachvollziehen.

Vorbereitung

  • Dieses Codelab wurde für erfahrene Entwickler geschrieben, die noch keine Erfahrung mit maschinellem Lernen haben.
  • Dieses Codelab ist Teil des Lernpfads „Erste Schritte mit der Textklassifizierung für Mobilgeräte“. Wenn Sie die vorherigen Aktivitäten noch nicht abgeschlossen haben, halten Sie bitte an und tun Sie dies jetzt.

Lerninhalte

  • TensorFlow Lite Model Maker mit Google Colab installieren
  • Daten vom Cloud-Server auf Ihr Gerät herunterladen
  • Daten-Loader verwenden
  • Modell erstellen

Voraussetzungen

2. TensorFlow Lite Model Maker installieren

Öffnen Sie das Colab. In der ersten Zelle des Notebooks wird TensorFlow Lite Model Maker für Sie installiert:

!pip install -q tflite-model-maker

Wenn der Vorgang abgeschlossen ist, fahren Sie mit der nächsten Zelle fort.

3. Code importieren

Die nächste Zelle enthält eine Reihe von Importen, die für den Code im Notebook erforderlich sind:

import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Dabei wird auch geprüft, ob Sie TensorFlow 2.x verwenden, was eine Voraussetzung für die Verwendung von Model Maker ist.

4. Daten herunterladen

Als Nächstes laden Sie die Daten vom Cloud-Server auf Ihr Gerät herunter und legen data_file so fest, dass es auf die lokale Datei verweist:

data_file = tf.keras.utils.get_file(fname='comment-spam.csv', 
  origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/lmblog_comments.csv', 
  extract=False)

Mit Model Maker können Modelle anhand einfacher CSV-Dateien wie dieser trainiert werden. Sie müssen nur angeben, in welchen Spalten sich der Text und in welchen die Labels befinden. Wie das geht, erfahren Sie später im Codelab.

5. Vortrainierte Einbettungen

Normalerweise erstellen Sie mit Model Maker keine Modelle von Grund auf neu. Sie verwenden vorhandene Modelle, die Sie an Ihre Anforderungen anpassen.

Bei Sprachmodellen wie diesem werden dazu vortrainierte Einbettungen verwendet. Bei einem Embedding werden Wörter in Zahlen umgewandelt. Jedes Wort in Ihrem gesamten Korpus erhält eine Zahl. Eine Einbettung ist ein Vektor, der verwendet wird, um die Stimmung eines Wortes zu bestimmen, indem eine „Richtung“ für das Wort festgelegt wird. Wörter, die häufig in Kommentar-Spam-Nachrichten verwendet werden, haben beispielsweise Vektoren, die in eine ähnliche Richtung zeigen. Bei Wörtern, die nicht häufig verwendet werden, ist das Gegenteil der Fall.

Wenn Sie vorab gelernte Einbettungen verwenden, beginnen Sie mit einem Korpus oder einer Sammlung von Wörtern, deren Sentiment bereits anhand einer großen Menge an Text gelernt wurde. So kommen Sie viel schneller zu einer Lösung, als wenn Sie bei Null anfangen.

Model Maker bietet mehrere vortrainierte Einbettungen, die Sie verwenden können. Die einfachste und schnellste ist average_word_vec.

Hier ist der Code:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

Der Parameter „num_words“

Sie geben auch die Anzahl der Wörter an, die Ihr Modell verwenden soll.

Sie denken vielleicht, dass es besser ist, möglichst viele Tags zu verwenden. Das ist aber nicht unbedingt der Fall. Die optimale Anzahl hängt davon ab, wie häufig die einzelnen Wörter verwendet werden. Wenn Sie jedes Wort im gesamten Korpus verwenden, versucht das Modell möglicherweise, die Richtung von Wörtern zu lernen und festzulegen, die nur einmal verwendet werden. In jedem Textkorpus werden viele Wörter nur ein- oder zweimal verwendet. Es lohnt sich in der Regel nicht, sie in Ihrem Modell zu verwenden, da sie nur einen geringen Einfluss auf die Gesamtstimmung haben. Mit dem Parameter num_words können Sie die Anzahl der Wörter festlegen, die Ihr Modell verwenden soll.

Eine kleinere Zahl kann zu einem kleineren und schnelleren Modell führen, das jedoch weniger genau ist, da es weniger Wörter erkennt. Eine größere Zahl führt zu einem größeren und langsameren Modell. Die richtige Balance ist entscheidend.

Der Parameter „wordvec_dim“

Der Parameter wordved_dim gibt die Anzahl der Dimensionen an, die Sie für den Vektor für jedes Wort verwenden möchten. Die Faustregel, die sich aus der Forschung ergibt, besagt, dass es sich um die vierte Wurzel der Anzahl der Wörter handelt. Wenn Sie beispielsweise 2.000 Wörter verwenden, ist 7 ein guter Ausgangspunkt. Wenn Sie die Anzahl der verwendeten Wörter ändern, können Sie auch diese Zahl ändern.

Der Parameter „seq_len“

Modelle sind in Bezug auf Eingabewerte in der Regel sehr starr. Für ein Sprachmodell bedeutet das, dass es Sätze einer bestimmten, statischen Länge klassifizieren kann. Das wird durch den Parameter seq_len oder die Sequenzlänge bestimmt.

Wenn Sie Wörter in Zahlen (oder Tokens) umwandeln, wird ein Satz zu einer Folge dieser Tokens. Ihr Modell wird in diesem Fall darauf trainiert, Sätze mit 20 Tokens zu klassifizieren und zu erkennen. Ist der Satz länger, wird er abgeschnitten. Ist sie kürzer, wird sie aufgefüllt. Im Korpus wird ein spezielles <PAD>-Token verwendet.

6. Daten-Loader verwenden

Sie haben die CSV-Datei bereits heruntergeladen. Jetzt müssen wir einen Daten-Loader verwenden, um daraus Trainingsdaten zu machen, die das Modell erkennen kann:

data = DataLoader.from_csv(
    filename=data_file,
    text_column='commenttext',
    label_column='spam',
    model_spec=spec,
    delimiter=',',
    shuffle=True,
    is_training=True)

train_data, test_data = data.split(0.9)

Wenn Sie die CSV-Datei in einem Editor öffnen, sehen Sie, dass jede Zeile nur zwei Werte enthält. Diese werden in der ersten Zeile der Datei beschrieben. In der Regel wird jeder Eintrag dann als Spalte betrachtet.

Der Deskriptor für die erste Spalte ist commenttext und der erste Eintrag in jeder Zeile ist der Text des Kommentars. Der Deskriptor für die zweite Spalte ist spam. Der zweite Eintrag in jeder Zeile ist True oder False,, um anzugeben, ob der Text als Kommentar-Spam eingestuft wird oder nicht. Mit den anderen Attributen wird die model_spec festgelegt, die Sie zuvor erstellt haben, sowie ein Trennzeichen, in diesem Fall ein Komma, da die Datei kommagetrennt ist. Sie verwenden diese Daten zum Trainieren des Modells. Daher wird is_Training auf True festgelegt.

Sie sollten einen Teil der Daten zurückhalten, um das Modell zu testen. Teilen Sie die Daten auf: 90% für das Training und 10% für Tests/die Bewertung. Da wir das tun, möchten wir sicherstellen, dass die Testdaten zufällig ausgewählt werden und nicht die unteren 10% des Datasets sind. Verwenden Sie daher shuffle=True beim Laden der Daten, um sie zu randomisieren.

7. Modell erstellen

In der nächsten Zelle wird das Modell erstellt. Das ist nur eine einzige Codezeile:

# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50, 
                               validation_data=test_data)

Dadurch wird mit Model Maker ein Textklassifizierungsmodell erstellt. Sie geben die Trainingsdaten an, die Sie verwenden möchten (wie in Schritt 4 eingerichtet), die Modellspezifikation (wie in Schritt 4 eingerichtet) und eine Anzahl von Epochen, in diesem Fall 50.

Das Grundprinzip des maschinellen Lernens besteht darin, dass es sich um eine Form des Musterabgleichs handelt. Zuerst werden die vortrainierten Gewichte für die Wörter geladen und es wird versucht, sie zu gruppieren. Dabei wird vorhergesagt, welche Wörter in Kombination Spam sind und welche nicht. Beim ersten Mal ist das Verhältnis wahrscheinlich 50:50, da das Modell noch am Anfang steht.

b94b00f0b155db3d.png

Anschließend werden die Ergebnisse gemessen und Optimierungscode ausgeführt, um die Vorhersage zu optimieren. Dann wird es noch einmal versucht. Das ist eine Epoche. Wenn Sie also „epochs=50“ angeben, wird dieser „Loop“ 50 Mal durchlaufen.

85f1d21c0b64d654.png

Nach der 50. Epoche wird für das Modell eine viel höhere Genauigkeit gemeldet. In diesem Fall sind es 99 %.

Rechts sehen Sie Zahlen zur Genauigkeit der Validierung. Diese Werte sind in der Regel etwas niedriger als die Trainingsgenauigkeit, da sie angeben, wie das Modell Daten klassifiziert, die es zuvor noch nicht „gesehen“ hat. Dabei werden die 10% der Testdaten verwendet, die wir zuvor zurückgestellt haben.

5be7967ec70e4302.png

8. Modell exportieren

Nach Abschluss des Trainings können Sie das Modell exportieren.

TensorFlow trainiert ein Modell in einem eigenen Format. Dieses muss in das TFLITE-Format konvertiert werden, damit es in einer mobilen App verwendet werden kann. Model Maker übernimmt diese Komplexität für Sie.

Exportieren Sie das Modell einfach und geben Sie ein Verzeichnis an:

model.export(export_dir='/mm_spam')

In diesem Verzeichnis sehen Sie die Datei model.tflite. herunterladen Sie benötigen sie im nächsten Codelab, in dem Sie sie Ihrer Android-App hinzufügen.

Hinweise zu iOS

Das gerade exportierte .tflite-Modell eignet sich gut für Android, da Metadaten zum Modell darin eingebettet sind und Android Studio diese Metadaten lesen kann.

Diese Metadaten sind sehr wichtig, da sie ein Token-Wörterbuch enthalten, das Wörter so darstellt, wie das Modell sie erkennt. Zur Erinnerung: Sie haben vorhin gelernt, dass Wörter zu Tokens werden und diesen Tokens dann Vektoren für ihre Stimmung zugewiesen werden. Ihre mobile App muss diese Tokens kennen. Wenn „Hund“ beispielsweise in 42 tokenisiert wurde und Ihre Nutzer „Hund“ in einen Satz eingeben, muss Ihre App „Hund“ in 42 umwandeln, damit das Modell es versteht. Als Android-Entwickler haben Sie eine „TensorFlow Lite Task Library“, die die Verwendung erleichtert. Unter iOS müssen Sie das Vokabular jedoch verarbeiten, sodass es verfügbar sein muss. Model Maker kann dies für Sie exportieren, wenn Sie den Parameter export_format angeben. So rufen Sie die Labels und den Wortschatz für Ihr Modell ab:

model.export(export_dir='/mm_spam/', 
             export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])

9. Glückwunsch

In diesem Codelab haben Sie gelernt, wie Sie Ihr Modell mit Python-Code erstellen und exportieren. Am Ende haben Sie eine .tflite-Datei.

Im nächsten Codelab erfahren Sie, wie Sie Ihre Android-App bearbeiten, um dieses Modell zu verwenden und Spam-Kommentare zu klassifizieren.