TensorFlow.js: Ein Spamerkennungsmodell für Kommentare neu trainieren, um Grenzfälle zu verarbeiten

1. Hinweis

Dieses Codelab wurde entwickelt, um auf dem Endergebnis des vorherigen Codelabs in dieser Serie zum Kommentieren von Spamerkennung mit TensorFlow.js aufzubauen.

Im letzten Codelab haben Sie eine voll funktionsfähige Webseite für einen fiktiven Videoblog erstellt. Mit einem vortrainierten Spamerkennungsmodell für Kommentare von TensorFlow.js konnten Sie Kommentare vor dem Senden an den Server oder an andere verbundene Clients filtern.

Das Endergebnis dieses Codelabs wird unten angezeigt:

ee0f13398ea4e91e.gif

Das funktionierte zwar gut, es gibt aber Grenzfälle, in denen nicht erkannt werden konnte. Sie können das Modell neu trainieren, um Situationen zu berücksichtigen, in denen es nicht verarbeitet werden konnte.

Dieses Codelab konzentriert sich auf die Verwendung von Natural Language Processing (die Art, die menschliche Sprache mit einem Computer zu verstehen) und zeigt Ihnen, wie Sie eine bestehende Webanwendung ändern können, die Sie erstellt haben. Es wird dringend empfohlen, die Codelabs in einer bestimmten Reihenfolge durchzuarbeiten, um das sehr ernste Problem der Kommentar-Spam zu meistern, das viele Webentwickler mit einer zunehmenden Anzahl beliebter Web-Apps angehen werden.

In diesem Codelab gehen Sie noch einen Schritt weiter und trainieren Ihr ML-Modell noch einmal, um Änderungen im Spamordner zu berücksichtigen, die sich im Laufe der Zeit aufgrund von aktuellen Trends oder häufigen Diskussionsthemen entwickeln. So können Sie das Modell auf dem neuesten Stand halten und Änderungen berücksichtigen.

Vorbereitung

  • Sie haben das erste Codelab in dieser Reihe abgeschlossen.
  • Grundkenntnisse in Webtechnologien wie HTML, CSS und JavaScript

Inhalte, die Sie erstellen werden

Sie verwenden die zuvor erstellte Website für einen fiktiven Videoblog mit einem Kommentarbereich in Echtzeit und aktualisieren sie, um eine benutzerdefinierte trainierte Version des Spamerkennungsmodells mit TensorFlow.js zu laden. Damit lässt sich eine bessere Leistung bei Grenzfällen erzielen, die mit dem bisherigen Feature nicht möglich wären. Als Webentwickler und -entwickler können Sie die hypothetische UX auf jeder Website ändern, an der Sie täglich arbeiten, und diese Lösung an jeden Anwendungsfall anpassen. Vielleicht ist es ein Blog, ein Forum oder eine Form von CMS wie Drupal.

Hacken...

Lerninhalte

Sie werden Folgendes tun:

  • So erkennen Sie Grenzfälle, bei denen das vortrainierte Modell nicht funktioniert hat
  • Trainieren Sie ein neues Spamklassifizierungsmodell, das mit dem Model Maker erstellt wurde.
  • Exportieren Sie dieses Python-basierte Modell in das TensorFlow.js-Format, um es in Browsern zu verwenden.
  • Aktualisieren Sie das gehostete Modell und sein Wörterbuch mit dem neu trainierten Modell und prüfen Sie die Ergebnisse

Für dieses Lab wird davon ausgegangen, dass Sie mit HTML5, CSS und JavaScript vertraut sind. Außerdem führen Sie einen Python-Code über ein Notebook aus, um das Modell, das mit Model Maker erstellt wurde, neu zu trainieren. Dafür sind aber keine Kenntnisse in Python erforderlich.

2. Code einrichten

Wieder lässt sich die Webanwendung mit Glitch.com hosten und ändern. Wenn Sie das Codelab nicht bereits abgeschlossen haben, können Sie das Ergebnis hier als Klon festlegen. Wenn Sie Fragen zur Funktionsweise des Codes haben, empfehlen wir Ihnen dringend, das vorherige Codelab abzuschließen, in dem erklärt wurde, wie Sie diese funktionierende Web-App erstellen.

Klicken Sie dazu einfach auf Glitch.

3. Sonderfälle in der vorherigen Lösung entdecken

Wenn ihr die fertige Website, die ihr gerade geklont habt, öffnet und Kommentare eingebt, werdet ihr feststellen, dass sie meist wie beabsichtigt funktioniert, Kommentare blockiert werden, die wie Spam klingen, und zulässige Antworten zulassen.

Wenn Sie jedoch raffiniert sind und versuchen, etwas gegen das Modell zu verstoßen, werden Sie vermutlich irgendwann erfolgreich sein. Mit ein wenig Test- und Fehlermeldungen können Sie manuell Beispiele wie die unten gezeigten erstellen. Füge sie in die vorhandene Webanwendung ein, prüfe die Konsole und prüfe die Wahrscheinlichkeit, die zurückgeht, wenn der Kommentar Spam ist:

Legitimistische Kommentare, die ohne Probleme gepostet wurden (echte negative Ergebnisse):

  1. "Wow, das Video ist klasse! Wahrscheinlichkeitsspam: 47,91854%
  2. Diese Demos waren super! Ich habe weitere Informationen. Wahrscheinlichkeitsspam: 47,15898%
  3. "Welche Website kann ich aufrufen, um mehr zu erfahren? Wahrscheinlichkeitsspam: 15,32495%

Das ist eine gute Wahrscheinlichkeit. Bei allen oben genannten Tests ist die Wahrscheinlichkeit recht gering. Das Ziel ist die SPAM_THRESHOLD Mindestwahrscheinlichkeit von 75 %, bevor Maßnahmen ergriffen werden (definiert im script.js-Code aus dem vorherigen Codelab).

Versuche jetzt, etwas kompliziertere Kommentare zu verfassen, die als Spam markiert werden.

Zulässige Kommentare, die als Spam markiert sind (falsch positive Ergebnisse):

  1. "Kann jemand die Website für die Maske verknüpfen, die er trägt{/7} Wahrscheinlichkeitsspam: 98,46466%
  2. "Kann ich diesen Song auf Spotify kaufen? Gib mir Bescheid! Wahrscheinlichkeitsspam: 94,40953%
  3. "Kann mir jemand Details zum Herunterladen von TensorFlow.js?" senden? Wahrscheinlichkeitsspam: 83,20084%

Oh nein! Diese legitimen Kommentare werden als Spam markiert, obwohl sie erlaubt werden sollten. Was können Sie tun?

Eine einfache Option ist die Erhöhung des SPAM_THRESHOLD-Werts auf über 98,5 %. In diesem Fall werden diese falsch klassifizierten Kommentare gepostet. Vor diesem Hintergrund fahren wir mit den anderen möglichen Ergebnissen unten fort...

Als Spam markierte Kommentare (echt positive Ergebnisse):

  1. " Sehr gut. Schaut euch einfach die Downloadlinks auf meiner Website an, die besser sind! Wahrscheinlichkeitsspam: 99,77873%
  2. "Ich weiß, dass manche Menschen, die dir Medikamente bekommen können, meine pr0file-Datei aufrufen,
  3. "Sieh dir mein Profil an, um weitere tolle Videos herunterzuladen, die noch besser sind! http://beispiel.de" Wahrscheinlicher Spam: 96.26383%

Dies funktioniert erwartungsgemäß mit unserem ursprünglichen Grenzwert von 75 %. Im vorherigen Schritt haben Sie SPAM_THRESHOLD jedoch als über 98,5% zuversichtlich festgelegt. Vielleicht sind 96% besser? In diesem Fall würde einer der Kommentare im vorherigen Abschnitt (falsch positive Ergebnisse) jedoch als Spam markiert, wenn die Nachricht mit 98,46466 % legitim war.

In diesem Fall empfiehlt es sich, alle diese Spamkommentare zu erfassen und einfach die oben genannten Fehler neu zu trainieren. Wenn Sie den Grenzwert auf 96% festlegen, werden weiterhin alle richtig positiven Ergebnisse erfasst und zwei der falsch positiven Ergebnisse werden entfernt. Schon allein, wenn nur eine einzige Nummer geändert wird.

Weiter...

Spamkommentare, die gepostet werden konnten (falsch negative Ergebnisse):

  1. "Sieh dir mein Profil an, um weitere tolle Videos herunterzuladen, die noch besser sind!" Wahrscheinlichkeitsspam: 7,54926%
  2. &t Wahrscheinlichkeitsspam: 17,49849%
  3. &Ot-GOOG-Aktie hat gerade eben den Kopf geschafft! Komm zu spät!" Wahrscheinlichkeitsspam: 20,42894%

Für diese Kommentare kannst du einfach nicht den SPAM_THRESHOLD-Wert ändern. Wird der Grenzwert für Spam von 96% auf ~9% gesenkt, werden echte Kommentare als Spam markiert – eine davon hat eine Bewertung von 58 %, obwohl sie legitim ist. Um mit solchen Kommentaren zu umgehen, können Sie das Modell lediglich mit solchen Grenzfällen trainieren, die es in den Trainingsdaten gibt. So lernt das System, seine Sicht der Welt auf Spam anzupassen oder nicht.

Aktuell war die einzige Option, das Modell neu zu trainieren. Sie haben aber auch gesehen, wie der Grenzwert für Spamanrufe verbessert werden kann, um die Leistung zu verbessern. Als Mensch scheinen 75% ziemlich selbstbewusst zu sein, aber für dieses Modell müssen Sie den Wert näher an 81,5% erhöhen, um mit Beispieleingaben effektiver sein zu können.

Es gibt keinen magischen Wert, der für unterschiedliche Modelle gut funktioniert. Dieser Schwellenwert muss pro Modell festgelegt werden, nachdem Sie mit realen Daten für eine gute Leistung getestet haben.

Es kann Situationen geben, in denen ein falsch positives (oder negatives) Ergebnis ernste Folgen haben kann (z. B. in der Medizinbranche). In diesem Fall können Sie Ihren Grenzwert stark erhöhen und mehr manuelle Überprüfungen für diejenigen anfordern, die den Grenzwert nicht erreichen. Dies ist Ihre Entscheidung als Entwickler und erfordert einige Tests.

4. Kommentarerkennungsmodell neu trainieren

Im vorherigen Abschnitt haben Sie eine Reihe von Sonderfällen angegeben, bei denen das Modell nicht funktionierte, wobei die einzige Option darin stand, das Modell neu zu trainieren. In einem Produktionssystem kann es dazu kommen, dass jemand einen Kommentar manuell als Spam markiert oder die Moderatoren, die die gemeldeten Kommentare prüfen, feststellen, dass es sich eigentlich nicht um Spam handelt und dass solche Kommentare zur Nachschulung markiert werden. Nehmen wir weiter an, dass Sie für diese Grenzfälle viele neue Daten gesammelt haben. Die besten Ergebnisse erzielen Sie, wenn möglich.

Vorgefertigte Modelle

Das von Ihnen verwendete Modell war ein Modell, das von einem Drittanbieter über Model Maker erstellt wurde und ein durchschnittliches Worteinbettungsmodell hat.

Da das Modell mit Model Maker erstellt wurde, müssen Sie kurz zu Python wechseln, um das Modell neu zu trainieren und es dann in das Format TensorFlow.js zu exportieren, damit Sie es im Browser verwenden können. Zum Glück sind die Modelle des Modells sehr einfach zu verwenden. Es sollte also ganz leicht nachzuvollziehen sein. Wir zeigen euch Schritt für Schritt, warum ihr euch also noch nie mit Python beschäftigt habt.

Labs

Da Sie sich in diesem Codelab nicht zu viele Gedanken über die Einrichtung eines Linux-Servers mit allen installierten Python-Dienstprogrammen machen möchten, können Sie Code über den Webbrowser mit einem &Colab-Notebook ausführen. Diese Notebooks können eine Verbindung zu einem Back-End herstellen. Dies ist einfach ein Server, auf dem einige Inhalte vorinstalliert sind. Über diesen können Sie dann beliebigen Code im Webbrowser ausführen und die Ergebnisse sehen. Dies ist sehr nützlich für das schnelle Prototyping oder für solche Anleitungen.

Wenn Sie einfach colab.research.google.com aufrufen, wird ein Begrüßungsbildschirm angezeigt:

b2df89c1f7b38cc9.png

Klicken Sie jetzt rechts unten im Pop-up-Fenster auf die Schaltfläche Neues Notebook. Es sollte ein leeres Colab angezeigt werden:

94a875f67d6e34f6

Super! Als Nächstes verbinden Sie das Front-End-Colab mit einem Back-End-Server, damit Sie den von Ihnen geschriebenen Python-Code ausführen können. Klicken Sie dazu rechts oben auf Verbinden und wählen Sie Mit gehosteter Laufzeit verbinden aus.

f4fcd56ae53527bd.png

Sobald die Verbindung hergestellt ist, werden die RAM- und Laufwerk-Symbole an dieser Stelle angezeigt:

d979e93ba595d1de.png

Klasse! Sie können jetzt mit dem Coding in Python beginnen, um das Modell-Maker-Modell neu zu trainieren. Führen Sie stattdessen einfach die unten beschriebenen Schritte aus.

1.

Kopieren Sie den folgenden Code in die erste Zelle, die derzeit leer ist. Es installiert den TensorFlow Lite Model Maker mithilfe des Paketmanagers „Python“ mit dem Namen „pip“ und sieht in npm nach, wie die meisten Leser dieses Code-Labs mit der JS-Umgebung vertraut sind.

!pip install -q tflite-model-maker

Wenn Sie Code in die Zelle einfügen, wird er jedoch nicht ausgeführt. Bewegen Sie als Nächstes den Mauszeiger auf die graue Zelle, in die Sie den obigen Code eingefügt haben. Daraufhin erscheint links in der Zelle ein kleines Play-Symbol:

be966130d68b5aac Klicken Sie auf die Wiedergabeschaltfläche, um den Code auszuführen, den Sie gerade in die Zelle eingegeben haben.

Jetzt sehen Sie, dass der Modellhersteller installiert wird:

376bc0fbde89a60d.png

Fahren Sie mit dem nächsten Schritt fort, nachdem diese Zelle ausgeführt wurde.

Schritt 2

Fügen Sie als Nächstes eine neue Codezelle hinzu, damit Sie nach der ersten Zelle weiteren Code einfügen und separat ausführen können:

7ec405d0d82b2143

Die nächste Zelle enthält eine Reihe von Importen, die der Code im restlichen Notebook verwenden muss. Kopieren Sie den folgenden Text und fügen Sie ihn in die neue Zelle ein:

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')

Das gilt auch dann, wenn Sie mit Python nicht vertraut sind. Sie importieren nur einige Dienstprogramme und die Model Maker-Funktionen, die für den Spam-Klassifikator erforderlich sind. Außerdem wird festgestellt, ob Sie TensorFlow 2.x verwenden, das zur Verwendung von Model Maker erforderlich ist.

Führen Sie jetzt wie zuvor die Zelle aus. Drücken Sie dazu das Symbol &play, wenn Sie den Mauszeiger auf die Zelle bewegen. Fügen Sie dann eine neue Codezelle für den nächsten Schritt hinzu.

Schritt 3

Als Nächstes laden Sie die Daten von einem Remote-Server auf Ihr Gerät herunter und legen die Variable training_data als Pfad der resultierenden lokalen Datei fest:

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

Die Modelle können aus einfachen CSV-Dateien wie der heruntergeladenen Datei trainiert werden. Sie müssen nur angeben, welche Spalten den Text und welche die Labels enthalten. Wie das geht, erfahren Sie in Schritt 5. Sie können die CSV-Datei auch gern selbst herunterladen, um sich einen Überblick über sie zu verschaffen.

Sie sehen dann den Namen dieser Datei: jm_blog_comments_extras.csv. Dabei handelt es sich lediglich um die ursprünglichen Trainingsdaten, mit denen das erste Spamkommentare-Kommentar kombiniert wurde, und zwar mit den neuen Grenzfalldaten, die Sie gefunden haben, und zwar alles in einer Datei. Sie benötigen die ursprünglichen Trainingsdaten, mit denen Sie das Modell zusätzlich zu den neuen Sätzen trainieren können.

Optional:Wenn Sie diese CSV-Datei herunterladen und die letzten Zeilen prüfen, sehen Sie Beispiele für Grenzfälle, die zuvor nicht richtig funktioniert haben. Sie wurden lediglich am Ende der vorhandenen Trainingsdaten hinzugefügt, damit das vorgefertigte Modell für das Training verwendet werden kann.

Führen Sie diese Zelle aus, fügen Sie nach Abschluss der Ausführung eine neue Zelle hinzu und fahren Sie mit Schritt 4 fort.

Schritt 4

Wenn Sie die Modellerstellung verwenden, erstellen Sie Modelle nicht von Grund auf neu. Sie verwenden im Allgemeinen vorhandene Modelle, die Sie dann an Ihre Bedürfnisse anpassen.

Model Maker bietet verschiedene Einbettungen für vorgefertigte Modelle, die Sie verwenden können. Am einfachsten und schnellsten ist der Einstieg in average_word_vec, den Sie im vorherigen Codelab zum Erstellen Ihrer Website verwendet haben. Code:

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

Führen Sie diesen aus, nachdem Sie ihn in die neue Zelle eingefügt haben.

Der

num_words

parameter:

Das ist die Anzahl der Wörter, die das Modell verwenden soll. Je mehr Sie denken, desto besser, aber es gibt in der Regel auch einen guten Zeitpunkt, der auf der Häufigkeit der einzelnen Wörter basiert. Wenn Sie alle Wörter im gesamten Korpus verwenden, können Sie mit dem Modell versuchen, die Gewichtungen von Wörtern zu lernen und auszugleichen, die nur einmal verwendet werden. Dies ist nicht sehr hilfreich. Sie finden jeden Textkorpus davon, dass viele Wörter nur ein- oder zweimal verwendet werden. Im Allgemeinen lohnt es sich nicht, diese Wörter in Ihrem Modell zu verwenden, da sie sich nur negativ auf die Gesamtstimmung auswirken. So können Sie das Modell mit dem Parameter num_words auf die gewünschte Anzahl von Wörtern abstimmen. Eine kleinere Zahl hier hat ein kleineres und schnelleres Modell, kann aber auch ungenauer sein, da es weniger Wörter erkennt. Ein größerer Wert hat hier ein größeres und möglicherweise langsameres Modell. Den Anfang zu finden, ist der Schlüssel, den Sie als Machine Learning-Entwickler finden, um herauszufinden, was für Ihren Anwendungsfall am besten funktioniert.

Der

wordvec_dim

parameter:

Der Parameter wordvec_dim ist die Anzahl der Dimensionen, die Sie für den Vektor jedes Worts verwenden möchten. Dabei handelt es sich im Wesentlichen um die verschiedenen Merkmale, die der Algorithmus für maschinelles Lernen beim Training erzeugt und die von einem bestimmten Wort gemessen werden können. Das System versucht, nach ähnlichen Wörtern ähnliche Wörter zu kombinieren.

Wenn Sie beispielsweise eine Dimension für das Wort „Medizin“ haben, könnte ein Wort wie „Pille“ in dieser Dimension hoch bewertet werden und mit anderen Highscores-Wörtern wie „Xray“ und „Kätzchen“ in dieser Dimension verknüpft werden. Es kann vorkommen, dass eine „Medizindimension“ nützlich ist, um Spam zu ermitteln, wenn sie mit anderen möglichen Dimensionen kombiniert wird, die sie möglicherweise verwenden.

Bei Wörtern, die in der "Medizin-Dimension" sehr hoch sind, kann eine zweite Dimension hilfreich sein, die Wörter mit dem menschlichen Körper in Verbindung bringt. Wörter wie „leg“ und „arm“ können hier und auch im medizinischen Bereich relativ hoch sein.

Anhand dieser Dimensionen kann das Modell dann Wörter erkennen, die mit hoher Wahrscheinlichkeit mit Spam in Verbindung stehen. Manche Spam-E-Mails enthalten möglicherweise Wörter, die sowohl medizinische als auch menschliche Körperteile enthalten.

Die Faustregel, die sich aus der Recherche ergibt, ist, dass die vierte Wurzel der Anzahl der Wörter für diesen Parameter gut funktioniert. Wenn ich also 2.000 Wörter verwende, sind 7 Dimensionen ein guter Ausgangspunkt. Sie können auch die Anzahl der verwendeten Wörter ändern.

Der

seq_len

parameter:

Modelle sind im Hinblick auf Eingabewerte im Allgemeinen sehr hart. Bei einem Sprachmodell können also Sätze einer bestimmten statischen Länge klassifiziert werden. Diese wird durch den Parameter seq_len bestimmt, wobei es sich um die Sequenzlänge handelt. Wenn Sie Wörter in Zahlen (oder Tokens) umwandeln, wird ein Satz dann eine Abfolge dieser Tokens. Das Modell wird also in diesem Fall trainiert, Sätze mit 20 Tokens zu klassifizieren und zu erkennen. Wenn der Satz länger ist, wird er abgeschnitten. Wenn sie kürzer ist, wird ein Abstand hinzugefügt, so wie im ersten Codelab dieser Serie.

Schritt 5: Trainingsdaten laden

Sie haben die CSV-Datei heruntergeladen. Verwenden Sie jetzt 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'“ bezeichnet. 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 (wahr) oder FALSE (falsch) ist. Damit wird angegeben, ob dieser Text als Kommentar-Spam angesehen wird. Mit den anderen Eigenschaften wird die Modellspezifikation festgelegt, die Sie in Schritt 4 erstellt haben, zusammen mit einem Trennzeichen. In diesem Fall wird das Komma durch ein Komma getrennt. Sie können auch einen Shuffle-Parameter festlegen, um die Trainingsdaten nach dem Zufallsprinzip neu anzuordnen, damit Dinge, die sich ähneln oder gesammelt wurden, nach dem Zufallsprinzip im gesamten Datensatz verteilt werden.

Anschließend verwenden Sie data.split(), um die Daten in Trainings- und Testdaten aufzuteilen. Der Wert ,9 gibt an, dass 90% des Datasets für das Training verwendet werden – der Rest wird für Tests verwendet.

Schritt 6: Modell erstellen

Fügen Sie eine weitere Zelle hinzu, in der wir Code zum Erstellen des Modells hinzufügen:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

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

Das grundlegende Prinzip von Machine Learning ist, dass es eine Form des Musterabgleichs ist. Ursprünglich werden die vortrainierten Gewichtungen geladen und versucht, die Ergebnisse mit einer „Vorhersage“ zu gruppieren. Beim ersten Mal liegt sie wahrscheinlich nahe 50:50, da das Modell nur gerade erst anfängt:

d6c8116f8e7e781b.png

Es werden dann die Ergebnisse gemessen und die Gewichtungen des Modells geändert, um die Vorhersage zu verbessern. Dies ist eine Epoche. Wenn Sie also „eps=50“ angeben, durchläuft er diese „loop“ 50-mal:

fc7bf6a948b7aa26

Bis zum Ende der 50. Epoche wird das Modell eine viel höhere Genauigkeit anzeigen. In diesem Fall beträgt der Wert 99,1 %.

Schritt 7: Modell exportieren

Sobald das Training abgeschlossen ist, können Sie das Modell exportieren. TensorFlow trainiert ein Modell in seinem eigenen Format, das zur Verwendung auf einer Webseite in das TensorFlow.js-Format konvertiert werden muss. Fügen Sie Folgendes in eine neue Zelle ein:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

Wenn Sie nach der Ausführung dieses Codes auf das kleine Ordnersymbol links neben Colab klicken, können Sie zu dem Ordner gehen, den Sie oben exportiert haben (im Stammverzeichnis – Sie müssen möglicherweise eine Ebene nach oben gehen) und das ZIP-Paket der exportierten Dateien in ModelFiles.zip finden.

Laden Sie diese ZIP-Datei jetzt auf Ihren Computer herunter, da Sie sie genau wie im ersten Codelab verwenden werden:

a9d8595a3e2564dc.png

Super! Der Python-Teil ist beendet. Sie können jetzt zu JavaScript zurückkehren, das Sie kennen und lieben. Geschafft!

5. Das neue Modell für maschinelles Lernen bereitstellen

Sie können das Modell jetzt fast vollständig laden. Zuvor müssen Sie allerdings die neuen Modelldateien hochladen, die Sie vorher im Codelab heruntergeladen haben. Nur dann werden sie in Ihrem Code gehostet und verwendet.

Falls Sie dies noch nicht getan haben, entpacken Sie zuerst die Dateien für das Modell, die Sie gerade vom Notebook für das Modell Maker abgerufen haben. Die verschiedenen Dateien sollten folgende Dateien enthalten:

5634d536ef8be9ca

Was haben Sie hier?

  • model.json – Dies ist eine der Dateien, aus denen das trainierte TensorFlow.js-Modell besteht. Sie verweisen auf diese Datei im JS-Code.
  • group1-shard1of1.bin: Dies ist eine Binärdatei, die viele der gespeicherten Daten für das exportierte TensorFlow.js-Modell enthält. Sie muss irgendwo auf Ihrem Server gehostet werden, um sich im selben Verzeichnis wie model.json befinden zu können.
  • vocab – Diese ungewöhnliche Datei ohne Erweiterung stammt von Model Maker und zeigt uns, wie Wörter in den Sätzen codiert werden. So kann das Modell sie richtig verwenden. Im nächsten Abschnitt erfahren Sie mehr dazu.
  • labels.txt: Dieser enthält nur die resultierenden Klassennamen, die das Modell vorhersagen wird. Wenn Sie diese Datei in Ihrem Texteditor öffnen, sehen Sie lediglich die Vervollständigungen „"true“ und „true“ sowie „spam“ und „spam“ bzw. „spam“.

TensorFlow.js-Modelldateien hosten

Platzieren Sie zuerst die model.json- und *.bin-Dateien, die auf einem Webserver generiert wurden, damit Sie über Ihre Webseite darauf zugreifen können.

Vorhandene Modelldateien löschen

Da Sie am Ende des ersten Codelabs dieser Serie aufbauen, müssen Sie zuerst die hochgeladenen Modelldateien löschen. Wenn du Glitch.com verwendest, überprüfe einfach den Dateienbereich auf der linken Seite für model.json und group1-shard1of1.bin, klicke auf das Dreipunkt-Menü bei jeder Datei und wähle Löschen aus:

7412b0b795d3b84f

Neue Dateien in Glitch hochladen

Super! Jetzt kannst du die neuen hochladen:

  1. Öffne links im Glitch-Projekt den Ordner assets und lösche alle hochgeladenen Assets, die denselben Namen haben.
  2. Klicken Sie auf Asset hochladen und wählen Sie group1-shard1of1.bin aus, um die Datei in diesen Ordner hochzuladen. Nach dem Hochladen sollte sie so aussehen:

25a2251c7f165184

  1. Super! Wiederholen Sie den Vorgang für die Datei „model.json“, sodass sich zwei Dateien im Ordner mit den Assets befinden sollten:

51a6dbd5d3097ffc

  1. Wenn Sie auf die gerade hochgeladene group1-shard1of1.bin-Datei klicken, können Sie die URL an ihren Speicherort kopieren. Kopieren Sie diesen Pfad jetzt so:

92ded8d46442c404.png

  1. Klicken Sie jetzt links unten auf Tools > Terminal. Warten Sie, bis das Terminalfenster geladen ist.
  2. Geben Sie nach dem Laden den folgenden Code ein und drücken Sie die Eingabetaste, um das Verzeichnis in den Ordner www zu ändern:

terminal:

cd www
  1. Verwende dann wget, um die beiden gerade hochgeladenen Dateien herunterzuladen. Ersetzen Sie dazu die URLs unten durch die URLs, die Sie im Asset-Ordner von Glitch erstellt haben. Überprüfen Sie den Ordner mit den Assets für jede benutzerdefinierte URL.

Beachten Sie, dass sich die Leerzeichen zwischen den beiden URLs voneinander unterscheiden und die verwendeten URLs abweichen. Sie sehen aber ähnlich aus:

Terminal

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

Super! Sie haben jetzt eine Kopie der Dateien erstellt, die in den Ordner www hochgeladen wurden.

Derzeit werden sie jedoch mit seltsamen Namen heruntergeladen. Wenn Sie ls in das Terminal eingeben und die Eingabetaste drücken, sehen Sie etwa Folgendes:

9cc90f1d053f517f.png

  1. Verwenden Sie den Befehl mv, um die Dateien umzubenennen. Geben Sie Folgendes in die Konsole ein und drücken Sie nach jeder Zeile die Eingabetaste:

terminal:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. Aktualisiere anschließend das Glitch-Projekt, indem du refresh in das Terminal eingibst und die Eingabetaste drückst:

terminal:

refresh

Nach der Aktualisierung sollten jetzt model.json und group1-shard1of1.bin im Ordner www der Benutzeroberfläche zu sehen sein:

50tt98c0a8f3e629.png

Super! Im letzten Schritt aktualisieren Sie die Datei dictionary.js.

  1. Konvertieren Sie die neue heruntergeladene Vokablade-Datei manuell in Ihr Texteditor oder mit diesem Tool in das richtige JS-Format und speichern Sie die Ausgabe als dictionary.js im Ordner www. Wenn du schon eine dictionary.js-Datei hast, kannst du die neuen Inhalte einfach kopieren und einfügen und die Datei speichern.

Sehr gut! Sie haben alle geänderten Dateien aktualisiert. Wenn Sie jetzt die Website verwenden, werden Sie feststellen, dass das neu trainierte Modell die aus den folgenden Gründen erkannten und gelernten Grenzfälle berücksichtigen kann:

3ece5dbd0a673987

Wie Sie sehen, werden die ersten 6 jetzt korrekt als „Kein Spam“ klassifiziert und der zweite Batch von 6 wird alle als Spam eingestuft. Super!

Testen wir auch einige Varianten, um zu sehen, ob sie sich verallgemeinern lassen. Ursprünglich gab es einen fehlgeschlagenen Satz wie:

Ot-GOOG-Aktie hat gerade soeben aufgenommen! Komm zu spät!"

Sie wird nun korrekt als Spam eingestuft. Was passiert jedoch, wenn Sie sie ändern?

&t zur Verfügung. Die Börsenkurse von XYZ haben sich also erhöht. Etwas kaufen, bevor es zu spät ist!"

Hier sehen Sie eine Prognose von 98 %, die mit hoher Wahrscheinlichkeit Spam ist, obwohl Sie das Aktiensymbol und den Text etwas verändert haben.

Wenn Sie wirklich versuchen, dieses neue Modell zu brechen, werden Sie dies tun können und müssen schließlich mehr Trainingsdaten sammeln, um die besten Chancen zu erhalten, mehr einzigartige Varianten für die Situationen zu erfassen, in denen Sie online wahrscheinlich landen. In einem künftigen Codelab werden wir zeigen, wie Sie Ihr Modell kontinuierlich mit Live-Daten optimieren können, sobald es gemeldet wird.

6. Glückwunsch!

Glückwunsch! Sie haben ein vorhandenes Modell für maschinelles Lernen so trainiert, dass es sich automatisch in den Grenzfällen findet und diese Änderungen mit TensorFlow.js für eine echte Anwendung im Browser bereitstellt.

Zusammenfassung

In diesem Codelab kannst du Folgendes tun:

  1. Gefundene Grenzfälle, die bei Verwendung des vorgefertigten Spammodells für Kommentare nicht funktionierten
  2. Das Modell-Maker-Modell neu trainieren, um die erkannten Grenzfälle zu berücksichtigen
  3. Das neue trainierte Modell wurde in das TensorFlow.js-Format exportiert
  4. Die Web-App wurde aktualisiert, um die neuen Dateien verwenden zu können

Was liegt als Nächstes an?

Dieses Update funktioniert also hervorragend, aber wie bei jeder anderen Web-App ändern sich die Einstellungen mit der Zeit. Es wäre viel besser, wenn sich die App mit der Zeit immer weiter verbessern würde, statt jedes Mal manuell. Kannst du dir denken, dass du diese Schritte automatisiert hast, um ein Modell automatisch neu zu trainieren, nachdem du z. B. 100 neue Kommentare als falsch klassifiziert markiert hast? Wenn Sie Ihren regelmäßigen Web Engineering-Aufsatz verwenden, finden Sie sicher heraus, wie Sie dazu eine Pipeline erstellen können, die automatisch ausgeführt wird. Falls nicht, machen Sie sich keine Sorgen, denn im nächsten Codelab dieser Reihe werden wir Ihnen zeigen, wie das geht.

Teilen Sie uns Ihre Meinung mit

Sie können erweitern, was Sie heute für andere kreative Anwendungsfälle gemacht haben, und wir raten Ihnen, auch außerhalb des Internets zu denken und weiterzuhacken.

Denke daran, uns in den sozialen Medien mit dem Hashtag #MadeWithTFJS zu taggen, damit dein Projekt im TensorFlow-Blog oder sogar in nächsten Veranstaltungen präsentiert wird. Wir würden gern wissen, was du machst.

Weitere TensorFlow.js-Codelabs

Websites, die Sie kennenlernen möchten