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 Spamkommentaren basiert. Die Originaldaten sind in Kaggle verfügbar. Sie wurden in einer einzigen CSV-Datei zusammengefasst und bereinigt, indem sie z. B. fehlerhaften Text, Markups und Wortwiederholungen entfernt haben. So können Sie sich leichter auf das Modell statt auf den Text konzentrieren.
Der Code, den Sie prüfen möchten, wurde hier bereitgestellt. Wir empfehlen jedoch dringend, dem Code in Google Colab zu folgen.
Vorbereitung
- Dieses Codelab wurde für erfahrene Entwickler geschrieben, die neu im Bereich des maschinellen Lernens sind.
- Dieses Codelab ist Teil des Lernpfads „Erste Schritte mit der Textklassifizierung für Mobilgeräte“. Wenn du die vorherigen Aktivitäten noch nicht abgeschlossen hast, hör auf und tu dies jetzt.
Lerninhalte
- TensorFlow Lite Model Maker mit Google Colab installieren
- Daten vom Cloud-Server auf Ihr Gerät herunterladen
- Data Loader verwenden
- Modell erstellen
Voraussetzungen
- Zugriff auf Google Colab
2. TensorFlow Lite Model Maker installieren
Öffnen Sie das Colab. In der ersten Zelle im Notebook wird TensorFLow Lite Model Maker für Sie installiert:
!pip install -q tflite-model-maker
Wenn er abgeschlossen ist, können Sie mit der nächsten Zelle fortfahren.
3. Code importieren
Die nächste Zelle enthält 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')
Dadurch wird auch geprüft, ob Sie TensorFlow 2.x verwenden. Dies ist eine Voraussetzung für die Verwendung von Model Maker.
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 er 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)
Model Maker kann Modelle mit einfachen CSV-Dateien wie dieser trainieren. Sie müssen nur angeben, welche Spalten den Text und welche die Beschriftungen enthalten. Wie Sie das tun, erfahren Sie später im Codelab.
5. Vorgefertigte Einbettungen
Im Allgemeinen werden Modelle nicht von Grund auf neu erstellt, wenn Sie Model Maker verwenden. Sie verwenden vorhandene Modelle, die Sie an Ihre Anforderungen anpassen.
Bei Sprachmodellen wie diesem werden vorerlernte Einbettungen verwendet. Die Idee hinter einer Einbettung besteht darin, dass Wörter in Zahlen umgewandelt werden, wobei jedes Wort in Ihrem Gesamtkorpus eine Zahl erhält. Eine Einbettung ist ein Vektor, mit dem die Stimmung dieses Wortes bestimmt wird, indem eine „Richtung“ festgelegt wird. nach dem Wort suchen. Beispielsweise zeigen Wörter, die häufig in Spam-Kommentaren verwendet werden, ihre Vektoren am Ende in eine ähnliche Richtung und Wörter, die nicht in die entgegengesetzte Richtung zeigen.
Durch die Verwendung von vorerlernten Einbettungen beginnen Sie mit einem Korpus oder einer Sammlung von Wörtern, für die bereits aus einem großen Textkörper die Stimmung erlernt wurde. So gelangen Sie viel schneller zu einer Lösung, als bei null anzufangen.
In Model Maker können Sie verschiedene bereits erlernte Einbettungen verwenden, aber die einfachste und schnellste Methode 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“
Außerdem geben Sie die Anzahl der Wörter an, die Ihr Modell verwenden soll.
Sie denken vielleicht: „Je mehr, desto besser“. aber im Allgemeinen gibt es eine richtige Zahl
basierend auf der Häufigkeit, mit der jedes Wort verwendet wird. Wenn Sie jedes Wort im gesamten Korpus verwenden, könnte das Modell letztendlich versuchen, die Richtung von Wörtern zu bestimmen, die nur einmal verwendet werden. Sie werden in jedem Textkorpus feststellen, dass viele Wörter nur ein- oder zweimal verwendet werden und es im Allgemeinen nicht sinnvoll ist, sie in Ihrem Modell zu verwenden, da sie einen geringen Einfluss auf die allgemeine Stimmung haben. Mit dem Parameter num_words
können Sie Ihr Modell auf die gewünschte Anzahl von Wörtern abstimmen.
Mit einer kleineren Zahl erhalten Sie möglicherweise ein kleineres und schnelleres Modell. Die Genauigkeit könnte jedoch geringer sein, da weniger Wörter erkannt werden. Eine größere Zahl hier hat ein größeres und langsameres Modell. Entscheidend ist, den idealen Ort zu finden.
Der Parameter „wordvec_dim“
Der Parameter wordved_dim
ist die Anzahl der Dimensionen, die Sie für den Vektor für jedes Wort verwenden möchten. Als Faustregel aus der Forschung gilt, dass sie die vierte Wurzel der Wortzahl ist. Wenn Sie beispielsweise 2.000 Wörter verwenden, ist ein guter Ausgangspunkt 7. Wenn Sie die Anzahl der verwendeten Wörter ändern, können Sie dies ebenfalls ändern.
Parameter „seq_len“
Modelle sind in der Regel sehr starr, wenn es um Eingabewerte geht. Bei einem Language Model bedeutet dies, dass das Language Model Sätze mit einer bestimmten statischen Länge klassifizieren kann. Dies 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 also (in diesem Fall) darauf trainiert, Sätze mit 20 Tokens zu klassifizieren und zu erkennen. Sollte der Satz länger sein, wird er gekürzt. Wenn er kürzer ist, wird er aufgefüllt. Im Korpus finden Sie ein dediziertes <PAD>
-Token, das dafür verwendet wird.
6. Datenladeprogramm verwenden
Zuvor haben Sie die CSV-Datei heruntergeladen. Jetzt ist es an der Zeit, ein Datenladeprogramm zu verwenden, um dies in Trainingsdaten umzuwandeln, 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, die mit Text in der ersten Zeile der Datei beschrieben werden. Üblicherweise wird jeder Eintrag dann 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. In ähnlicher Weise lautet der Deskriptor für die zweite Spalte spam
. Sie sehen, dass der zweite Eintrag in jeder Zeile True
oder False,
ist, um anzugeben, ob dieser Text als Kommentar-Spam eingestuft wird oder nicht. In den anderen Attributen wird der zuvor erstellte model_spec
festgelegt, zusammen mit einem Trennzeichen, das in diesem Fall ein Komma ist, da die Datei durch Kommas getrennt ist. Da Sie diese Daten zum Trainieren des Modells verwenden, ist is_Training
auf True
gesetzt.
Zum Testen des Modells sollten Sie einen Teil der Daten zurückhalten. Teilen Sie die Daten auf. 90% davon für Training und die anderen 10% für Tests/Evaluierungen. Da wir dies tun, möchten wir sicherstellen, dass die Testdaten zufällig ausgewählt werden und nicht die "niedrigsten" Daten sind. 10% des Datasets. Sie verwenden also shuffle=True
beim Laden der Daten, um sie zufällig zu ordnen.
7. Modell erstellen
Die nächste Zelle dient einfach dazu, das Modell zu erstellen, und sie besteht aus einer einzigen Codezeile:
# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50,
validation_data=test_data)
Dadurch wird ein Textklassifikatormodell mit Model Maker erstellt und Sie geben die zu verwendenden Trainingsdaten (wie in Schritt 4 eingerichtet), die Modellspezifikation (wie in Schritt 4 eingerichtet) und eine Reihe von Epochen an, in diesem Fall 50.
Das Grundprinzip des maschinellen Lernens ist, dass es eine Form des Musterabgleichs ist. Zunächst werden die vortrainierten Gewichtungen für die Wörter geladen und es wird versucht, sie mit einer Vorhersage zu gruppieren, welche bei der Gruppierung auf Spam hindeuten und welche nicht. Beim ersten Mal wird es wahrscheinlich bei 50:50 sein, da das Modell gerade erst anfängt.
Anschließend werden die Ergebnisse gemessen und der Optimierungscode ausgeführt, um die Vorhersage zu optimieren. Anschließend wird ein erneuter Versuch unternommen. Dies ist eine Epoche. Wenn Sie also „epochs=50“ angeben, durchläuft er diese „Schleife“, 50 Mal.
Wenn Sie die 50. Epoche erreichen, meldet das Modell ein viel höheres Genauigkeitsniveau. In diesem Fall wird 99 % angezeigt!
Rechts sehen Sie die Validierungsgenauigkeit. Diese sind in der Regel etwas niedriger als die Trainingsgenauigkeit, da sie ein Hinweis darauf sind, wie das Modell Daten klassifiziert, die es zuvor noch nicht gesehen hat. Es verwendet die 10-%-Testdaten, die wir zuvor reserviert haben.
8. Modell exportieren
Sobald das Training abgeschlossen ist, können Sie das Modell exportieren.
TensorFlow trainiert ein Modell in seinem eigenen Format, das für die Verwendung in einer mobilen App in das TFLITE-Format konvertiert werden muss. Model Maker übernimmt diese Komplexität für Sie.
Exportieren Sie einfach das Modell und geben Sie dabei ein Verzeichnis an:
model.export(export_dir='/mm_spam')
In diesem Verzeichnis wird die Datei model.tflite
angezeigt. herunterladen Sie benötigen sie im nächsten Codelab, in dem Sie sie Ihrer Android-App hinzufügen.
Überlegungen für iOS
Das .tflite-Modell, das Sie gerade exportiert haben, funktioniert 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 Wörterbuch mit Tokens enthalten, die Wörter darstellen, wie sie vom Modell erkannt werden. Erinnern Sie sich noch, als Sie erfahren haben, dass Wörter zu Tokens werden und diese Tokens dann Vektoren für ihre Stimmung erhalten? Ihre mobile App muss diese Tokens kennen. Wenn beispielsweise „Hund“ wurde auf 42 tokenisiert und Ihre Nutzer geben „Hund“ ein in einen Satz zu verwandeln, muss Ihre App "Hund" damit das Modell sie versteht. Als Android-Entwickler haben Sie eine TensorFlow Lite-Aufgabenbibliothek Das erleichtert die Verwendung dieser Funktion. Auf iOS-Geräten müssen Sie jedoch das Vokabular verarbeiten und zur Verfügung stellen. Model Maker kann dies für Sie exportieren, indem Sie den Parameter export_format
angeben. Um die Beschriftungen und den Vokabular für Ihr Modell abzurufen, können Sie also Folgendes verwenden:
model.export(export_dir='/mm_spam/',
export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])
9. Glückwunsch
In diesem Codelab wurden Sie durch Python-Code geführt, mit dem Sie Ihr Modell erstellen und exportieren können. Am Ende haben Sie eine .tflite-Datei.
Im nächsten Codelab erfahren Sie, wie Sie Ihre Android-App so bearbeiten, dass dieses Modell verwendet wird, damit Sie Spamkommentare klassifizieren können.