TensorFlow.js: Modell zur Spamerkennung für Kommentare neu trainieren, um Grenzfälle zu verarbeiten

1. Hinweis

Dieses Codelab baut auf dem Ergebnis des vorherigen Codelabs in dieser Reihe zur Erkennung von Kommentar-Spam mit TensorFlow.js auf.

Im letzten Codelab haben Sie eine voll funktionsfähige Webseite für einen fiktiven Videoblog erstellt. Sie konnten Kommentare mithilfe eines vortrainierten Modells zur Erkennung von Kommentar-Spam, das auf TensorFlow.js im Browser basiert, filtern, bevor sie zur Speicherung an den Server oder an andere verbundene Clients gesendet wurden.

Das Endergebnis dieses Codelabs ist unten zu sehen:

a4511e5d445706b1.gif

Das hat zwar sehr gut funktioniert, aber es gibt Grenzfälle, die nicht erkannt werden konnten. Sie können das Modell neu trainieren, um die Situationen zu berücksichtigen, die es nicht bewältigen konnte.

In diesem Codelab geht es um die Verarbeitung natürlicher Sprache (die Kunst, menschliche Sprache mit einem Computer zu verstehen). Sie erfahren, wie Sie eine vorhandene Web-App, die Sie erstellt haben, ändern können. Es wird dringend empfohlen, die Codelabs in der richtigen Reihenfolge durchzuarbeiten. So können Sie das sehr reale Problem von Kommentar-Spam angehen, dem viele Webentwickler bei der Arbeit an einer der ständig wachsenden Anzahl beliebter Web-Apps begegnen.

In diesem Codelab gehen Sie einen Schritt weiter und trainieren Ihr ML-Modell neu, um Änderungen im Inhalt von Spam-Nachrichten zu berücksichtigen, die sich im Laufe der Zeit aufgrund aktueller Trends oder beliebter Diskussionsthemen entwickeln können. So können Sie das Modell auf dem neuesten Stand halten und solche Änderungen berücksichtigen.

Vorbereitung

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

Umfang

Sie verwenden die zuvor erstellte Website für einen fiktiven Videoblog mit einem Echtzeit-Kommentarbereich wieder und aktualisieren sie, um eine benutzerdefinierte trainierte Version des Spam-Erkennungsmodells mit TensorFlow.js zu laden. So wird die Leistung bei Grenzfall-Szenarien verbessert, bei denen das Modell zuvor fehlgeschlagen wäre. Als Webentwickler und ‑ingenieure können Sie diese hypothetische UX natürlich ändern, um sie auf jeder Website wiederzuverwenden, an der Sie in Ihrer täglichen Arbeit arbeiten, und die Lösung an jeden Client-Anwendungsfall anpassen – vielleicht ist es ein Blog, ein Forum oder eine Art CMS wie Drupal.

Los gehts…

Lerninhalte

Sie werden Folgendes tun:

  • Grenzfälle identifizieren, bei denen das vortrainierte Modell fehlgeschlagen ist
  • Das mit Model Maker erstellte Modell zur Spamklassifizierung neu trainieren
  • Exportieren Sie dieses Python-basierte Modell in das TensorFlow.js-Format zur Verwendung in Browsern.
  • 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 Python-Code über ein „Co-Lab“-Notebook aus, um das mit Model Maker erstellte Modell neu zu trainieren. Dazu sind keine Python-Kenntnisse erforderlich.

2. Code schreiben

Sie verwenden Glitch.com noch einmal, um die Webanwendung zu hosten und zu ändern. Wenn Sie das erforderliche Codelab noch nicht durchlaufen haben, können Sie das Endergebnis hier klonen und als Ausgangspunkt verwenden. Wenn Sie Fragen zur Funktionsweise des Codes haben, empfehlen wir Ihnen dringend, das vorherige Codelab durchzuarbeiten, in dem beschrieben wird, wie Sie diese funktionierende Web-App erstellen.

Klicken Sie auf Glitch einfach auf die Schaltfläche remix this (Remix this), um das Projekt zu forken und einen neuen Satz von Dateien zu erstellen, die Sie bearbeiten können.

3. Grenzfälle in der vorherigen Lösung erkennen

Wenn Sie die gerade geklonte Website öffnen und versuchen, einige Kommentare einzugeben, werden Sie feststellen, dass sie in den meisten Fällen wie vorgesehen funktioniert. Kommentare, die wie Spam klingen, werden wie erwartet blockiert und legitime Antworten werden zugelassen.

Wenn Sie jedoch versuchen, das Modell durch geschickte Formulierungen zu überlisten, wird Ihnen das wahrscheinlich irgendwann gelingen. Mit etwas Übung können Sie manuell Beispiele wie die unten gezeigten erstellen. Fügen Sie diese in die vorhandene Web-App ein, prüfen Sie die Konsole und sehen Sie sich die Wahrscheinlichkeiten an, die zurückgegeben werden, wenn der Kommentar Spam ist:

Legitime Kommentare, die ohne Probleme gepostet wurden (richtig negativ):

  1. „Wow, ich liebe dieses Video. Tolle Arbeit.“ Wahrscheinlichkeit für Spam: 47,91854%
  2. „Diese Demos haben mir sehr gut gefallen. Haben Sie weitere Details?“ Wahrscheinlichkeit für Spam: 47,15898%
  3. „Auf welcher Website kann ich mehr erfahren?“ Wahrscheinlichkeit für Spam: 15,32495%

Das ist gut, die Wahrscheinlichkeiten für alle oben genannten Fälle sind ziemlich gering und liegen über dem Standardwert von SPAM_THRESHOLD (75% Mindestwahrscheinlichkeit), bevor Maßnahmen ergriffen werden (definiert im script.js-Code aus dem vorherigen Codelab).

Jetzt versuchen wir, einige provokantere Kommentare zu schreiben, die als Spam markiert werden, obwohl sie es nicht sind.

Seriöse Kommentare werden als Spam markiert (falsch positive Ergebnisse):

  1. „Kann mir jemand den Link zur Website für die Maske geben, die er trägt?“ Wahrscheinlichkeit für Spam: 98,46466%
  2. „Kann ich diesen Song auf Spotify kaufen? Bitte lasst es mich wissen!“ Wahrscheinlichkeit für Spam: 94,40953%
  3. „Kann mich jemand kontaktieren und mir Details zum Herunterladen von TensorFlow.js geben?“ Wahrscheinlichkeit für Spam: 83,20084%

Oh nein! Es scheint, dass diese legitimen Kommentare als Spam markiert werden, obwohl sie zulässig sein sollten. Wie können Sie das Problem beheben?

Eine einfache Möglichkeit besteht darin, die SPAM_THRESHOLD so zu erhöhen, dass die Wahrscheinlichkeit über 98,5% liegt. In diesem Fall würden diese falsch klassifizierten Kommentare dann veröffentlicht. Sehen wir uns nun die anderen möglichen Ergebnisse an…

Spam-Kommentare, die als Spam markiert wurden (richtig positiv):

  1. „Das ist cool, aber schau dir mal die Downloadlinks auf meiner Website an, die sind besser!“ Wahrscheinlichkeit für Spam: 99,77873%
  2. „Ich kenne einige Leute, die dir Medikamente besorgen können. Weitere Informationen findest du in meinem Profil.“ Wahrscheinlichkeit für Spam: 98,46955%
  3. „Auf meinem Profil findest du noch mehr tolle Videos, die noch besser sind! http://example.com“ Wahrscheinlichkeit für Spam: 96,26383%

Das funktioniert wie erwartet mit unserem ursprünglichen Schwellenwert von 75 %. Da Sie im vorherigen Schritt jedoch SPAM_THRESHOLD auf über 98,5% geändert haben, würden hier zwei Beispiele durchgelassen. Der Schwellenwert ist also möglicherweise zu hoch. Vielleicht sind 96% besser? Wenn Sie das tun, würde einer der Kommentare im vorherigen Abschnitt (falsch-positive Ergebnisse) als Spam markiert werden, obwohl er legitim war, da er mit 98,46466 % bewertet wurde.

In diesem Fall ist es wahrscheinlich am besten, alle diese echten Spamkommentare zu erfassen und das Modell für die oben genannten Fehler neu zu trainieren. Wenn Sie den Schwellenwert auf 96% festlegen, werden weiterhin alle richtig positiven Ergebnisse erfasst und Sie eliminieren zwei der oben genannten falsch positiven Ergebnisse. Nicht schlecht für eine einzige Zahl.

Fahren wir fort…

Spam-Kommentare, die gepostet werden durften (falsch negative Ergebnisse):

  1. „Auf meinem Profil findest du noch mehr tolle Videos, die noch besser sind!“ Wahrscheinlichkeit für Spam: 7,54926%
  2. Hol dir einen Rabatt auf unsere Fitnesskurse – siehe Profil!“ Wahrscheinlichkeit für Spam: 17,49849%
  3. „omg GOOG stock just shot right up! Jetzt zugreifen, bevor es zu spät ist!“ Wahrscheinlichkeit für Spam: 20,42894%

Bei diesen Kommentaren können Sie nichts tun, indem Sie den Wert SPAM_THRESHOLD weiter ändern. Wenn der Schwellenwert für Spam von 96% auf etwa 9% gesenkt wird, werden echte Kommentare als Spam markiert. Einer dieser Kommentare hat eine Bewertung von 58 %, obwohl er legitim ist. Die einzige Möglichkeit, mit solchen Kommentaren umzugehen, besteht darin, das Modell mit solchen Grenzfallbeispielen in den Trainingsdaten neu zu trainieren, damit es lernt, seine Sichtweise der Welt anzupassen, was Spam ist und was nicht.

Derzeit besteht nur die Möglichkeit, das Modell neu zu trainieren. Sie haben aber auch gesehen, wie Sie den Schwellenwert für Spam anpassen können, um die Leistung zu verbessern. Als Mensch würde man 75% als ziemlich sicher ansehen, aber für dieses Modell mussten Sie den Wert auf etwa 81,5% erhöhen, um mit Beispiel-Eingaben effektiver zu sein.

Es gibt keinen magischen Wert, der für alle Modelle gut funktioniert. Dieser Grenzwert muss für jedes Modell einzeln festgelegt werden, nachdem mit Realdaten experimentiert wurde, um herauszufinden, was gut funktioniert.

In einigen Situationen kann ein falsch positives (oder negatives) Ergebnis schwerwiegende Folgen haben, z. B. in der Medizin. In solchen Fällen sollten Sie den Schwellenwert sehr hoch ansetzen und mehr manuelle Überprüfungen für Ergebnisse anfordern, die den Schwellenwert nicht erreichen. Das ist Ihre Entscheidung als Entwickler und erfordert einige Tests.

4. Modell zur Erkennung von Spamkommentaren neu trainieren

Im vorherigen Abschnitt haben Sie eine Reihe von Grenzbedingungen identifiziert, bei denen das Modell fehlgeschlagen ist. Die einzige Möglichkeit, diese Situationen zu berücksichtigen, bestand darin, das Modell neu zu trainieren. In einem Produktionssystem können Sie diese im Laufe der Zeit finden, wenn Nutzer einen Kommentar manuell als Spam melden, der durchgelassen wurde, oder wenn Moderatoren, die gemeldete Kommentare überprüfen, feststellen, dass einige nicht tatsächlich Spam sind, und solche Kommentare für das erneute Training markieren. Angenommen, Sie haben eine Reihe neuer Daten für diese Grenzfälle gesammelt (für optimale Ergebnisse sollten Sie nach Möglichkeit einige Variationen dieser neuen Sätze haben). Im Folgenden wird beschrieben, wie Sie das Modell unter Berücksichtigung dieser Grenzfälle neu trainieren.

Vorgefertigte Modellzusammenfassung

Das von Ihnen verwendete vorgefertigte Modell wurde von einem Drittanbieter über Model Maker erstellt und basiert auf einem Modell mit durchschnittlicher Worteinbettung.

Da das Modell mit Model Maker erstellt wurde, müssen Sie kurz zu Python wechseln, um das Modell neu zu trainieren, und das erstellte Modell dann in das TensorFlow.js-Format exportieren, damit Sie es im Browser verwenden können. Mit Model Maker ist die Verwendung der Modelle sehr einfach. Sie sollten also keine Probleme haben, der Anleitung zu folgen. Wir führen Sie durch den Prozess. Machen Sie sich also keine Sorgen, wenn Sie noch nie Python verwendet haben.

Colabs

Da Sie sich in diesem Codelab nicht mit der Einrichtung eines Linux-Servers mit allen verschiedenen installierten Python-Dienstprogrammen beschäftigen müssen, können Sie Code einfach über den Webbrowser mit einem „Colab-Notebook“ ausführen. Diese Notebooks können mit einem „Backend“ verbunden werden. Das ist einfach ein Server mit einigen vorinstallierten Komponenten, auf dem Sie dann beliebigen Code im Webbrowser ausführen und die Ergebnisse sehen können. Das ist sehr nützlich für schnelles Prototyping oder für die Verwendung in Tutorials wie diesem.

Rufen Sie einfach colab.research.google.com auf. Es wird ein Begrüßungsbildschirm wie unten angezeigt:

6b82258445885c50.png

Klicken Sie nun rechts unten im Pop-up-Fenster auf die Schaltfläche Neues Notebook. Sie sollten jetzt ein leeres Colab-Notebook sehen, das so aussieht:

2d52c8f7afa88564.png

Sehr gut! Als Nächstes müssen Sie das Frontend-Colab mit einem Backend-Server verbinden, damit Sie den Python-Code ausführen können, den Sie schreiben. Klicken Sie dazu rechts oben auf Verbinden und wählen Sie Mit gehosteter Laufzeitumgebung verbinden aus.

fa5f578a1a3d352b.png

Nach der Verbindung sollten an dieser Stelle RAM- und Festplattensymbole angezeigt werden, wie hier zu sehen:

541c9894fb39d4cb.png

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

Schritt 1

Kopieren Sie den folgenden Code in die erste Zelle, die derzeit leer ist. Damit wird TensorFlow Lite Model Maker mit dem Paketmanager „pip“ von Python installiert. „pip“ ähnelt „npm“, das die meisten Leser dieses Codelabs aus dem JS-Ökosystem kennen:

!apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
!pip install -q tflite-model-maker

Wenn Sie Code in die Zelle einfügen, wird er jedoch nicht ausgeführt. Bewegen Sie den Mauszeiger als Nächstes auf die graue Zelle, in die Sie den oben genannten Code eingefügt haben. Links in der Zelle wird ein kleines „Play“-Symbol angezeigt (siehe unten):

7ac5e3516bed6335.png Klicken Sie auf die Schaltfläche „Wiedergabe“, um den gerade in die Zelle eingegebenen Code auszuführen.

Die Installation von Model Maker wird jetzt angezeigt:

651f21b04fb648cc.png

Wenn die Ausführung dieser Zelle abgeschlossen ist, wie unten dargestellt, fahren Sie mit dem nächsten Schritt fort.

Schritt 2

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

869904a9d774c455.png

Die nächste Zelle, die ausgeführt wird, enthält eine Reihe von Importen, die für den Code im restlichen Notebook erforderlich sind. Kopieren Sie den folgenden Code 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 ist ziemlich standardmäßig, auch wenn Sie nicht mit Python vertraut sind. Sie importieren nur einige Dienstprogramme und die für den Spam-Klassifikator erforderlichen Model Maker-Funktionen. Dabei wird auch geprüft, ob Sie TensorFlow 2.x verwenden, was eine Voraussetzung für die Verwendung von Model Maker ist.

Führen Sie die Zelle wie zuvor aus, indem Sie den Mauszeiger auf die Zelle bewegen und auf das Wiedergabesymbol klicken. 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 auf den Pfad der heruntergeladenen lokalen Datei fest:

data_file = tf.keras.utils.get_file(fname='comment-spam-extras.csv', origin='https://storage.googleapis.com/jmstore/TensorFlowJS/EdX/code/6.5/jm_blog_comments_extras.csv', extract=False)

Mit Model Maker können Modelle anhand einfacher CSV-Dateien wie der heruntergeladenen trainiert werden. Sie müssen nur angeben, in welchen Spalten sich der Text und in welchen die Labels befinden. Wie das geht, erfahren Sie in Schritt 5. Sie können die CSV-Datei auch direkt herunterladen, um sich den Inhalt anzusehen.

Aufmerksame Nutzer werden feststellen, dass der Name dieser Datei jm_blog_comments_extras.csv lautet. Diese Datei enthält einfach die ursprünglichen Trainingsdaten, die wir zum Generieren des ersten Modells für Kommentar-Spam combined verwendet haben, zusammen mit den neuen Edge-Case-Daten, die Sie gefunden haben. Sie benötigen die ursprünglichen Trainingsdaten, die zum Trainieren des Modells verwendet wurden, sowie die neuen Sätze, aus denen das Modell lernen soll.

Optional:Wenn Sie diese CSV-Datei herunterladen und die letzten Zeilen ansehen, finden Sie Beispiele für Grenzfälle, die zuvor nicht richtig funktioniert haben. Sie wurden einfach an das Ende der vorhandenen Trainingsdaten angehängt, die das vorgefertigte Modell zum Trainieren verwendet hat.

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 Model Maker verwenden, erstellen Sie keine Modelle von Grund auf neu. In der Regel verwenden Sie vorhandene Modelle, die Sie dann an Ihre Anforderungen anpassen.

Model Maker bietet mehrere vortrainierte Modelleinbettungen, die Sie verwenden können. Am einfachsten und schnellsten ist jedoch average_word_vec, das Sie im vorherigen Codelab zum Erstellen Ihrer Website verwendet haben. Hier ist der Code:

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

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

Grundlegendes

num_words

parameter

Dies ist die Anzahl der Wörter, die das Modell verwenden soll. Sie denken vielleicht, dass mehr immer besser ist, aber es gibt in der Regel einen optimalen Punkt, der auf der Häufigkeit basiert, mit der die einzelnen Wörter verwendet werden. Wenn Sie jedes Wort im gesamten Korpus verwenden, versucht das Modell möglicherweise, die Gewichte von Wörtern zu lernen und auszugleichen, die nur einmal verwendet werden. Das ist nicht sehr sinnvoll. 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, auf die Ihr Modell abgestimmt werden soll. Ein kleinerer Wert führt zu einem kleineren und schnelleren Modell, das jedoch weniger genau sein kann, da es weniger Wörter erkennt. Eine größere Zahl führt zu einem größeren und potenziell langsameren Modell. Es ist wichtig, den richtigen Mittelweg zu finden. Als Machine Learning Engineer müssen Sie herausfinden, was für Ihren Anwendungsfall am besten funktioniert.

Grundlegendes

wordvec_dim

parameter

Der Parameter wordvec_dim gibt die Anzahl der Dimensionen an, die Sie für den Vektor jedes Wortes verwenden möchten. Diese Dimensionen sind im Wesentlichen die verschiedenen Merkmale, die vom Algorithmus für maschinelles Lernen beim Training erstellt werden und anhand derer jedes Wort gemessen werden kann. Das Programm verwendet sie, um Wörter, die in irgendeiner Weise ähnlich sind, bestmöglich zuzuordnen.

Wenn Sie beispielsweise eine Dimension dafür haben, wie „medizinisch“ ein Wort ist, kann ein Wort wie „Pillen“ in dieser Dimension einen hohen Wert erzielen und mit anderen Wörtern mit hohem Wert wie „Röntgenbild“ in Verbindung gebracht werden, während „Katze“ in dieser Dimension einen niedrigen Wert erzielen würde. Es kann sich herausstellen, dass eine „medizinische Dimension“ in Kombination mit anderen potenziellen Dimensionen, die verwendet werden können, um Spam zu erkennen, nützlich ist.

Bei Wörtern, die in der „medizinischen Dimension“ gut abschneiden, kann es sinnvoll sein, eine zweite Dimension zu verwenden, die Wörter mit dem menschlichen Körper in Verbindung bringt. Wörter wie „Bein“, „Arm“ und „Hals“ können hier und auch in der medizinischen Dimension hohe Werte erzielen.

Das Modell kann diese Dimensionen verwenden, um Wörter zu erkennen, die mit größerer Wahrscheinlichkeit mit Spam in Verbindung gebracht werden. Vielleicht enthalten Spam-E‑Mails eher Wörter, die sich sowohl auf medizinische Themen als auch auf Körperteile beziehen.

Die aus der Forschung abgeleitete Faustregel besagt, dass die vierte Wurzel der Anzahl der Wörter für diesen Parameter gut geeignet ist. Wenn ich also 2.000 Wörter verwende, ist ein guter Ausgangspunkt für die Anzahl der Dimensionen 7. Wenn Sie die Anzahl der verwendeten Wörter ändern, können Sie auch diese Zahl ändern.

Grundlegendes

seq_len

parameter

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 bestimmt, wobei dieser für „sequence length“ (Sequenzlänge) steht. 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. Wenn sie kürzer ist, wird sie aufgefüllt – genau wie im ersten Codelab dieser Reihe.

Schritt 5: Trainingsdaten laden

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. Mit den anderen Attributen wird die Modellspezifikation festgelegt, die Sie in Schritt 4 erstellt haben, sowie ein Trennzeichen, in diesem Fall ein Komma, da die Datei kommagetrennt ist. Außerdem legen Sie einen Shuffle-Parameter fest, um die Trainingsdaten zufällig neu anzuordnen. So werden ähnliche oder gemeinsam erfasste Daten zufällig im gesamten Dataset verteilt.

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

Schritt 6: Modell erstellen

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

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

Dadurch wird mit Model Maker ein Textklassifizierungsmodell erstellt. Sie geben die Trainingsdaten an, die Sie verwenden möchten (die in Schritt 4 definiert wurden), die Modellspezifikation (die ebenfalls in Schritt 4 eingerichtet wurde) 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, um vorherzusagen, welche Wörter in Kombination Spam sind und welche nicht. Beim ersten Mal ist das Verhältnis wahrscheinlich nahe 50:50, da das Modell noch am Anfang steht (siehe unten):

bbe4b896d8060bc4.png

Anschließend werden die Ergebnisse gemessen und die Gewichte des Modells angepasst, 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, wie unten dargestellt:

4ed286d114960ca.png

Wenn Sie die 50. Epoche erreichen, wird für das Modell also eine viel höhere Genauigkeit angegeben. In diesem Fall sind es 99,1 %.

Schritt 7: Modell exportieren

Nach Abschluss des Trainings können Sie das Modell exportieren. TensorFlow trainiert ein Modell im eigenen Format. Für die Verwendung auf einer Webseite muss es in das TensorFlow.js-Format konvertiert werden. Fügen Sie einfach Folgendes in eine neue Zelle ein und führen Sie sie aus:

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 links im Colab auf das kleine Ordnersymbol klicken, können Sie zu dem Ordner navigieren, in den Sie die Dateien oben exportiert haben (im Stammverzeichnis – möglicherweise müssen Sie eine Ebene nach oben gehen). Dort finden Sie das ZIP-Archiv der exportierten Dateien in ModelFiles.zip.

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

cda3c681ebf144b4.png

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

5. Neues Modell für maschinelles Lernen bereitstellen

Sie können das Modell jetzt fast laden. Dazu müssen Sie jedoch zuerst die neuen Modelldateien hochladen, die Sie zuvor im Codelab heruntergeladen haben, damit sie in Ihrem Code gehostet und verwendet werden können.

Entpacken Sie zuerst die Dateien für das Modell, das Sie gerade aus dem Model Maker Colab-Notebook heruntergeladen haben, falls noch nicht geschehen. In den verschiedenen Ordnern sollten die folgenden Dateien enthalten sein:

3ace87c57b98cfbc.png

Was hast du hier?

  • model.json: Dies ist eine der Dateien, aus denen das trainierte TensorFlow.js-Modell besteht. Sie verweisen im JS-Code auf diese Datei.
  • group1-shard1of1.bin: Dies ist eine Binärdatei, die einen Großteil der gespeicherten Daten für das exportierte TensorFlow.js-Modell enthält. Sie muss auf Ihrem Server gehostet werden, damit sie im selben Verzeichnis wie model.json oben heruntergeladen werden kann.
  • vocab: Diese ungewöhnliche Datei ohne Erweiterung stammt aus Model Maker und zeigt uns, wie Wörter in den Sätzen codiert werden, damit das Modell sie verwenden kann. Im nächsten Abschnitt gehen wir genauer darauf ein.
  • labels.txt – Diese Spalte enthält einfach die resultierenden Klassennamen, die das Modell vorhersagt. Wenn Sie diese Datei für dieses Modell in Ihrem Texteditor öffnen, werden einfach „false“ und „true“ angezeigt, was „kein Spam“ oder „Spam“ als Vorhersageergebnis angibt.

TensorFlow.js-Modelldateien hosten

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

Vorhandene Modelldateien löschen

Da Sie auf dem Endergebnis des ersten Codelabs dieser Reihe aufbauen, müssen Sie zuerst die hochgeladenen Modelldateien löschen. Wenn Sie Glitch.com verwenden, suchen Sie einfach im Dateibereich auf der linken Seite nach model.json und group1-shard1of1.bin, klicken Sie für jede Datei auf das Dreipunkt-Menü und wählen Sie Löschen aus:

c72bfdc5a0db4d0d.png

Neue Dateien in Glitch hochladen

Sehr gut! Laden Sie die neuen Dateien jetzt hoch:

  1. Öffnen Sie im linken Bereich Ihres Glitch-Projekts den Ordner assets und löschen Sie alle alten hochgeladenen Assets, die denselben Namen haben.
  2. Klicken Sie auf Asset hochladen und wählen Sie das group1-shard1of1.bin aus, das in diesen Ordner hochgeladen werden soll. Nach dem Hochladen sollte es so aussehen:

c6739dd30e6df977.png

  1. Sehr gut! Wiederholen Sie den Vorgang für die Datei „model.json“. Im Ordner „assets“ sollten sich nun zwei Dateien befinden:

b7858eb08bea9ac3.png

  1. Wenn Sie auf die gerade hochgeladene group1-shard1of1.bin-Datei klicken, können Sie die URL zu ihrem Speicherort kopieren. Kopieren Sie diesen Pfad jetzt wie gezeigt:

19999f6644f61153.png

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

terminal:

cd www
  1. Verwenden Sie dann wget, um die beiden gerade hochgeladenen Dateien herunterzuladen. Ersetzen Sie dazu die URLs unten durch die URLs, die Sie für die Dateien im Ordner „assets“ auf Glitch generiert haben. Die benutzerdefinierte URL für jede Datei finden Sie im Ordner „assets“.

Beachten Sie den Leerraum zwischen den beiden URLs. Die URLs, die Sie verwenden müssen, unterscheiden sich von den gezeigten, 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 in den Ordner www hochgeladenen Dateien erstellt.

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

6c417fdfc64762f1.png

  1. Benennen Sie die Dateien mit dem Befehl mv um. 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. Aktualisieren Sie das Glitch-Projekt, indem Sie refresh in das Terminal eingeben und die Eingabetaste drücken:

terminal:

refresh

Nach dem Aktualisieren sollten Sie model.json und group1-shard1of1.bin im Ordner www der Benutzeroberfläche sehen:

530bb651f4dbac64.png

Sehr gut! Der letzte Schritt besteht darin, die Datei dictionary.js zu aktualisieren.

  1. Konvertieren Sie die neu heruntergeladene Vokabeldatei entweder manuell über Ihren Texteditor oder mit diesem Tool in das richtige JS-Format und speichern Sie die resultierende Ausgabe als dictionary.js im Ordner www. Wenn Sie bereits eine dictionary.js-Datei haben, können Sie den neuen Inhalt einfach kopieren und einfügen und die Datei speichern.

Endlich! Sie haben alle geänderten Dateien erfolgreich aktualisiert. Wenn Sie die Website jetzt verwenden, werden Sie feststellen, dass das neu trainierte Modell die erkannten und gelernten Grenzfälle berücksichtigen kann:

64e5cf6f6e158d6c.gif

Wie Sie sehen, werden die ersten sechs jetzt korrekt als „Kein Spam“ klassifiziert und die zweiten sechs als Spam. Super!

Wir probieren auch einige Variationen aus, um zu sehen, ob das Modell gut generalisiert. Ursprünglich gab es einen Satz, der nicht den Richtlinien entsprach, z. B.:

omg GOOG stock just shot right up! Jetzt zugreifen, bevor es zu spät ist!

Diese Nachricht wird jetzt korrekt als Spam klassifiziert. Was passiert aber, wenn Sie sie so ändern:

Die Aktie von XYZ hat also gerade an Wert gewonnen! Kaufen Sie sie, bevor es zu spät ist!

Hier erhalten Sie eine Vorhersage, dass die E-Mail mit einer Wahrscheinlichkeit von 98% Spam ist. Das ist korrekt, obwohl Sie das Aktiensymbol und die Formulierung leicht geändert haben.

Wenn Sie wirklich versuchen, dieses neue Modell zu manipulieren, wird Ihnen das natürlich gelingen. Um die Wahrscheinlichkeit zu erhöhen, dass auch einzigartige Variationen für die häufigen Situationen, die Ihnen wahrscheinlich online begegnen, erfasst werden, müssen noch mehr Trainingsdaten gesammelt werden. In einem zukünftigen Codelab zeigen wir Ihnen, wie Sie Ihr Modell mit Live-Daten kontinuierlich verbessern können, sobald diese gekennzeichnet werden.

6. Glückwunsch!

Sie haben ein vorhandenes Modell für maschinelles Lernen neu trainiert, damit es auch für die von Ihnen gefundenen Grenzfälle funktioniert, und diese Änderungen mit TensorFlow.js für eine reale Anwendung im Browser bereitgestellt.

Zusammenfassung

In diesem Codelab:

  1. Edge-Cases entdeckt, die bei Verwendung des vorgefertigten Modells für Spamkommentare nicht funktionierten
  2. Das Model Maker-Modell wurde neu trainiert, um die von Ihnen erkannten Grenzfälle zu berücksichtigen.
  3. Das neu trainierte Modell wurde in das TensorFlow.js-Format exportiert.
  4. Sie haben Ihre Web-App aktualisiert, um die neuen Dateien zu verwenden.

Nächste Schritte

Diese Aktualisierung funktioniert also gut, aber wie bei jeder Web-App werden sich im Laufe der Zeit Änderungen ergeben. Es wäre viel besser, wenn sich die App im Laufe der Zeit kontinuierlich verbessern würde, anstatt dass wir das jedes Mal manuell tun müssen. Wie könnten Sie diese Schritte automatisieren, um ein Modell automatisch neu zu trainieren, nachdem beispielsweise 100 neue Kommentare als falsch klassifiziert markiert wurden? Wenn Sie sich mit Webentwicklung auskennen, wissen Sie wahrscheinlich, wie Sie eine Pipeline erstellen, um dies automatisch zu erledigen. Wenn nicht, keine Sorge. Im nächsten Codelab der Reihe erfährst du, wie das geht.

Teilen Sie uns mit, was Sie erstellen

Sie können Ihre heutigen Kreationen ganz einfach für andere kreative Anwendungsfälle erweitern. Wir möchten Sie ermutigen, kreativ zu werden und weiter zu experimentieren.

Vergessen Sie nicht, uns in den sozialen Medien mit dem Hashtag #MadeWithTFJS zu taggen. So haben Sie die Chance, dass Ihr Projekt im TensorFlow-Blog oder sogar bei zukünftigen Veranstaltungen vorgestellt wird. Wir sind gespannt auf deine Kreationen.

Weitere TensorFlow.js-Codelabs

Websites, die Sie sich ansehen sollten