Modell zur Kommentarspamerkennung mit TensorFlow Lite-Modellersteller trainieren

1. Hinweis

In diesem Codelab prüfen Sie den mit TensorFlow und TensorFlow Lite Model Maker erstellten Code, um mithilfe von Kommentar-Spam ein Modell mit einem Dataset zu erstellen. Die Originaldaten sind auf Kaggle verfügbar. Sie wurden in einer CSV-Datei zusammengefasst und durch Text, Markup, wiederholte Wörter usw. entfernt. So können Sie sich besser auf das Modell statt auf den Text konzentrieren.

Der Code, den Sie prüfen möchten, wird hier angegeben. Es wird aber dringend empfohlen, den Code in Colaboratory zu befolgen.

Vorbereitung

  • Dieses Codelab wurde für erfahrene Entwickler erstellt, die noch nicht mit Machine Learning vertraut sind.
  • Dieses Codelab ist Teil der Einführung in die Textklassifizierung in Flutter-Apps. Wenn Sie die vorherigen Aktivitäten noch nicht abgeschlossen haben, beenden Sie sie bitte und tun Sie das jetzt.

Lerninhalte

  • So installieren Sie TensorFlow Lite Model Maker mit Colab.
  • Daten vom Colab-Server auf Ihr Gerät herunterladen
  • Dataloader verwenden
  • Modell erstellen

Voraussetzungen

2. TensorFlow Lite-Modell-Maker installieren

  • Öffnen Sie Colab. In der ersten Zelle des Notebooks wird der TensorFLow Lite-Modell-Maker installiert:
!pip install -q tflite-model-maker

Fahren Sie mit der nächsten Zelle fort, sobald der Vorgang abgeschlossen ist.

3. Code importieren

In der nächsten Zelle gibt es eine Reihe von Importen, die der Code im Notebook verwenden muss:

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 ausgeführt haben. Dies ist für die Verwendung von Model Maker erforderlich.

4. Daten herunterladen

Als Nächstes laden Sie die Daten vom Colab-Server auf Ihr Gerät herunter und legen Sie die Variable data_file auf die lokale Datei fest:

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)

Model Maker kann Modelle aus einfachen CSV-Dateien wie dieser trainieren. Sie müssen nur angeben, welche Spalten den Text und welche mit den Labels enthalten. Wie Sie das tun, sehen Sie in diesem Codelab.

5. Vortrainierte Einbettungen

In der Regel erstellen Sie keine Modelle von Grund auf neu. Sie verwenden vorhandene Modelle, die Sie an Ihre Anforderungen anpassen.

Bei Sprachmodellen wie diesem wird die Verwendung von vorgefertigten Einbettungen genutzt. Die Idee hinter einem Einbetten besteht darin, dass Wörter in Zahlen umgewandelt werden, wobei jedes Wort im Korpus eine Zahl enthält. Ein Einbettungsbild ist ein Vektor, mit dem die Stimmung des betreffenden Wortes bestimmt wird. Dazu wird eine Richtungsrichtung für das Wort festgelegt. So werden beispielsweise Wörter, die häufig in Spamnachrichten mit Kommentaren verwendet werden, ihre Vektoren in eine ähnliche Richtung weisen, während Wörter durch Vektoren in die entgegengesetzte Richtung weisen.

Wenn Sie vortrainierte Einbettungen verwenden, beginnen Sie mit einem Korpus oder einer Sammlung von Wörtern, die bereits aus einem großen Texttext inspiriert wurden. So gelangen Sie wesentlich schneller zu einer Lösung als von null.

Model Maker bietet verschiedene vortrainierte Einbettungen, die Sie verwenden können. Am einfachsten und schnellsten ist die Option average_word_vec.

Code dafür:

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

Der Parameter num_words

Außerdem geben Sie die Anzahl der Wörter an, die Ihr Modell verwenden soll.

Je mehr Sie denken, desto besser ist die Zahl, die der Häufigkeit der einzelnen Wörter entspricht. Wenn Sie alle Wörter im gesamten Korpus verwenden, könnte das Modell versuchen, die Wortform zu lernen, die nur einmal verwendet wird. In einem Textkorpus werden viele Wörter nur ein- oder zweimal verwendet. Daher ist ihre Einbeziehung in Ihr Modell lohnenswert, weil sie einen wesentlichen Einfluss auf die Gesamtstimmung haben.

Mit dem Parameter num_words können Sie Ihr Modell nach der Anzahl der gewünschten Wörter optimieren. Eine kleinere Zahl kann ein kleineres und schnelleres Modell bieten, dafür aber weniger genau sein, da es weniger Wörter erkennt. Andererseits kann eine größere Zahl ein größeres und langsameres Modell bieten. Es ist wichtig, den perfekten Ort zu finden!

Der Parameter wordvec_dim

Der Parameter wordved_dim ist die Anzahl der Dimensionen, die Sie für den Vektor des jeweiligen Wortes verwenden möchten. Die Faustregel, die sich aus der Recherche ergibt, ist die vierte Wurzel der Anzahl der Wörter. Wenn Sie zum Beispiel 2.000 Wörter verwenden, ist 7 ein guter Ausgangspunkt. Wenn Sie die Anzahl der verwendeten Wörter ändern, können Sie das ändern.

Der Parameter seq_len

Modelle sind im Hinblick auf Eingabewerte im Allgemeinen sehr hart. Bei einem Sprachmodell können also Sätze mit einer bestimmten statischen Länge klassifiziert werden. Diese werden durch den Parameter seq_len oder die Sequenzlänge bestimmt.

Wenn Sie Wörter in Zahlen oder Tokens umwandeln, wird ein Satz dann eine Sequenz dieser Tokens. In diesem Fall wird Ihr Modell dafür trainiert, Sätze mit 20 Tokens zu klassifizieren und zu erkennen. Wenn der Satz länger ist, wird er abgeschnitten. Ist dieser kürzer, wird er gepolstert. Im Korpus wird ein eigenes <PAD>-Token angezeigt, das dafür verwendet wurde.

6. Dataloader verwenden

Sie haben die CSV-Datei heruntergeladen. Verwenden Sie nun einen Dataloader, um dies in Trainingsdaten zu verwandeln, 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 hat und mit Text in der ersten Zeile der Datei beschrieben wird. In der Regel wird jeder Eintrag als Spalte betrachtet.

Sie sehen, dass der Deskriptor für die erste Spalte commenttext lautet und dass der erste Eintrag in jeder Zeile der Text des Kommentars ist. Entsprechend ist der Deskriptor für die zweite Spalte spam. Sie sehen, dass der zweite Eintrag in jeder Zeile True oder False, ist. Daran erkennst du, ob dieser Text als Kommentar-Spam angesehen wird oder nicht. Mit den anderen Eigenschaften wird die zuvor erstellte Variable model_spec zusammen mit einem Trennzeichen festgelegt. In diesem Fall wird das Komma durch ein Komma getrennt. Diese Daten werden für das Training des Modells verwendet. Daher ist is_Training auf True gesetzt.

Sie sollten einen Teil der Daten zum Testen des Modells zurückhalten. Die Daten werden aufgeteilt: 90% davon für das Training und die anderen 10% für Tests/Bewertung. Wir möchten dafür sorgen, dass die Testdaten nach dem Zufallsprinzip ausgewählt werden und nicht die unteren 10% des Datasets betreffen. Daher wird shuffle=True beim Laden der Daten verwendet, um eine zufällige Anordnung zu erhalten.

7. Modell erstellen

Mit der nächsten Zelle wird einfach das Modell erstellt. Es besteht aus einer einzigen Codezeile:

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

Durch diesen Code wird ein Textklassifikationsmodell mit Model Maker erstellt. Sie geben die Trainingsdaten an, die Sie für den vierten Schritt verwenden möchten, die Modellspezifikation wie im vierten Schritt eingerichtet und eine Anzahl von Epochen, was in diesem Fall 50 bedeutet.

Das Prinzip von ML ist, dass es eine Form des Musterabgleichs ist. Früher lädt sie die vortrainierten Gewichtungen für die Wörter und versucht, sie zu gruppieren. Dabei wird prognostiziert, welche, wenn sie gruppiert sind, Spam enthalten und welche nicht. Erstens wird sie wahrscheinlich gleichmäßig aufgeteilt, weil das Modell erst am Anfang steht.

c42755151d511ce.PNG

Von dort werden die Ergebnisse dieser Trainingsphase gemessen und der Optimierungscode wird angepasst, um die Vorhersage zu verbessern. Versuchen Sie es dann noch einmal. Dies ist eine Epoche. Durch Angabe von Epochen=50 wird die Schleife 50-mal durchgelaufen.

7t0ee06a5246b58d.png

Bis zum Ende der 50. Epoche meldet das Modell eine viel höhere Genauigkeit. In diesem Fall wird 99% angezeigt.

Die Zahlen für die Validierungsgenauigkeit sind in der Regel etwas niedriger als die Trainingsgenauigkeit, da sie ein Hinweis darauf sind, wie das Modell Daten klassifiziert, die es zuvor nicht gesehen hat. Dabei werden die Testdaten verwendet, die Sie zuvor festgelegt haben.

f063ff6e1d2add67.png

8. Modell exportieren

  1. Führen Sie diese Zelle aus, um ein Verzeichnis anzugeben und das Modell zu exportieren:
model.export(export_dire='/mm_spam_savedmodel', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB, ExportFormat.SAVED_MODEL])
  1. Komprimieren Sie den gesamten Ordner /mm_spam_savedmodel und die generierte mm_spam_savedmodel.zip-Datei, die Sie im nächsten Codelab benötigen.
# Rename the SavedModel subfolder to a version number
!mv /mm_spam_savedmodel/saved_model /mm_spam_savedmodel/123
!zip -r mm_spam_savedmodel.zip /mm_spam_savedmodel/

9. Glückwunsch

In diesem Codelab haben Sie Python-Code zum Erstellen und Exportieren des Modells verwendet. Sie haben jetzt ein SavedModel sowie Labels und Vokabular am Ende. Im nächsten Codelab erfahren Sie, wie Sie dieses Modell verwenden und damit Spamkommentare klassifizieren können.

Weitere Informationen