Transfer Learning für TensorFlow-Textklassifizierungsmodelle in Amazon SageMaker

Amazon Sage Maker bietet eine Reihe von eingebaute Algorithmen, vorgefertigte Modelle und vorgefertigte Lösungsvorlagen um Datenwissenschaftlern und Praktikern des maschinellen Lernens (ML) dabei zu helfen, schnell mit dem Training und der Bereitstellung von ML-Modellen zu beginnen. Sie können diese Algorithmen und Modelle sowohl für überwachtes als auch für unüberwachtes Lernen verwenden. Sie können verschiedene Arten von Eingabedaten verarbeiten, darunter Tabellen, Bilder und Text.

Dieser Beitrag ist der dritte in einer Reihe über die neuen integrierten Algorithmen in SageMaker. In dem erster Beitraghaben wir gezeigt, wie SageMaker einen integrierten Algorithmus zur Bildklassifizierung bereitstellt. In dem zweiter Beitraghaben wir gezeigt, wie SageMaker einen integrierten Algorithmus zur Objekterkennung bereitstellt. Heute kündigen wir an, dass SageMaker einen neuen integrierten Algorithmus für die Textklassifizierung mit TensorFlow bereitstellt. Dieser überwachte Lernalgorithmus unterstützt das Transferlernen für viele vortrainierte Modelle, die in verfügbar sind TensorFlow-Hub. Es nimmt ein Stück Text als Eingabe und gibt die Wahrscheinlichkeit für jede der Klassenbezeichnungen aus. Sie können diese vortrainierten Modelle mithilfe von Transfer Learning optimieren, selbst wenn kein großer Textkorpus verfügbar ist. Es ist über den SageMaker verfügbar eingebaute Algorithmen, sowie durch die SageMaker JumpStart-Benutzeroberfläche in Amazon SageMaker-Studio. Weitere Informationen finden Sie unter Textklassifizierung und das Beispiel-Notizbuch Einführung in JumpStart – Textklassifizierung.

Die Textklassifizierung mit TensorFlow in SageMaker bietet Transfer Learning für viele vortrainierte Modelle, die im TensorFlow Hub verfügbar sind. Entsprechend der Anzahl der Klassenbezeichnungen in den Trainingsdaten wird eine Klassifizierungsschicht an das vortrainierte TensorFlow-Hub-Modell angehängt. Die Klassifikationsschicht besteht aus einer Dropout-Schicht und einer dichten Schicht, einer vollständig verbundenen Schicht, mit einem 2-Norm-Regularisierer, der mit Zufallsgewichten initialisiert wird. Das Modelltraining hat Hyperparameter für die Dropout-Rate der Dropout-Schicht und den L2-Regularisierungsfaktor für die dichte Schicht. Dann kann entweder das gesamte Netzwerk, einschließlich des vortrainierten Modells, oder nur die oberste Klassifizierungsschicht auf die neuen Trainingsdaten abgestimmt werden. In diesem Transfer-Lernmodus kann das Training auch mit einem kleineren Datensatz erreicht werden.

So verwenden Sie den neuen TensorFlow-Textklassifizierungsalgorithmus

In diesem Abschnitt wird beschrieben, wie Sie den TensorFlow-Textklassifizierungsalgorithmus mit verwenden SageMaker Python-SDK. Informationen zur Verwendung über die Studio-Benutzeroberfläche finden Sie unter SageMaker-JumpStart.

Der Algorithmus unterstützt das Transferlernen für die in aufgeführten vortrainierten Modelle Tensorflow-Modelle. Jedes Modell wird durch ein Unikat identifiziert model_id. Der folgende Code zeigt, wie das durch identifizierte BERT-Basismodell feinabgestimmt wird model_id tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2 auf einem benutzerdefinierten Trainingsdatensatz. Für jeden model_id, um einen SageMaker-Schulungsjob über die zu starten Estimator -Klasse des SageMaker Python SDK müssen Sie den Docker-Image-URI, den Trainingsskript-URI und den vortrainierten Modell-URI über die in SageMaker bereitgestellten Hilfsfunktionen abrufen. Der Trainingsskript-URI enthält den gesamten erforderlichen Code für die Datenverarbeitung, das Laden des vorab trainierten Modells, das Modelltraining und das Speichern des trainierten Modells für die Inferenz. Der URI des vortrainierten Modells enthält die Architekturdefinition des vortrainierten Modells und die Modellparameter. Der vortrainierte Modell-URI ist spezifisch für das jeweilige Modell. Die vortrainierten Modell-Tarballs wurden vorab von TensorFlow heruntergeladen und mit der entsprechenden Modellsignatur gespeichert Amazon Simple Storage-Service (Amazon S3)-Buckets, sodass der Trainingsjob in Netzwerkisolation ausgeführt wird. Siehe folgenden Code:

from sagemaker import image_uris, model_uris, script_urisfrom sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2", "*"
training_instance_type = "ml.p3.2xlarge"
# Retrieve the docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")# Retrieve the pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tensorflow-tc-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Mit diesen modellspezifischen Trainingsartefakten können Sie ein Objekt der erstellen Estimator Klasse:

# Create SageMaker Estimator instance
tf_tc_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,)

Als Nächstes müssen Sie für das Transferlernen in Ihrem benutzerdefinierten Dataset möglicherweise die Standardwerte der Trainings-Hyperparameter ändern, die in aufgeführt sind Hyperparameter. Sie können ein Python-Wörterbuch dieser Hyperparameter mit ihren Standardwerten abrufen, indem Sie aufrufen hyperparameters.retrieve_default, aktualisieren Sie sie nach Bedarf und übergeben Sie sie dann an die Estimator-Klasse. Beachten Sie, dass die Standardwerte einiger Hyperparameter für verschiedene Modelle unterschiedlich sind. Bei großen Modellen ist die Standardstapelgröße kleiner und die train_only_top_layer hyperparameter ist auf gesetzt True. Der Hyperparameter Train_only_top_layer definiert, welche Modellparameter sich während des Feinabstimmungsprozesses ändern. Wenn train_only_top_layer is True, dann ändern sich Parameter der Klassifikationsschichten und die restlichen Parameter bleiben während des Feinabstimmungsprozesses konstant. Andererseits, wenn train_only_top_layer is False, dann werden alle Parameter des Modells fein abgestimmt. Siehe folgenden Code:

from sagemaker import hyperparameters# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

Wir bieten die SST2 als Standarddatensatz für die Feinabstimmung der Modelle. Der Datensatz enthält positive und negative Filmkritiken. Es wurde von heruntergeladen TensorFlow für Apache 2.0 Lizenz. Der folgende Code stellt das standardmäßige Trainings-Dataset bereit, das in S3-Buckets gehostet wird.

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/SST2/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

Um schließlich den SageMaker-Trainingsjob zur Feinabstimmung des Modells zu starten, rufen Sie .fit für das Objekt der Estimator-Klasse auf, während Sie den Amazon S3-Speicherort des Trainingsdatensatzes übergeben:

# Launch a SageMaker Training job by passing s3 path of the training data
tf_od_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Für weitere Informationen zur Verwendung des neuen SageMaker TensorFlow-Textklassifizierungsalgorithmus für Transfer Learning auf einem benutzerdefinierten Dataset stellen Sie das feinabgestimmte Modell bereit, führen Sie Rückschlüsse auf das bereitgestellte Modell aus und stellen Sie das vorab trainierte Modell unverändert ohne vorherige Feinabstimmung bereit für ein benutzerdefiniertes Dataset finden Sie im folgenden Beispiel-Notebook: Einführung in JumpStart – Textklassifizierung.

Eingabe-/Ausgabeschnittstelle für den TensorFlow-Textklassifizierungsalgorithmus

Sie können jedes der in aufgeführten vortrainierten Modelle optimieren TensorFlow-Modelle zu einem beliebigen Datensatz, der aus Textsätzen mit einer beliebigen Anzahl von Klassen besteht. Das vorab trainierte Modell fügt eine Klassifizierungsebene an das Texteinbettungsmodell an und initialisiert die Ebenenparameter mit zufälligen Werten. Die Ausgabedimension der Klassifizierungsschicht wird basierend auf der Anzahl der in den Eingabedaten erkannten Klassen bestimmt. Ziel ist es, Klassifizierungsfehler bei den Eingabedaten zu minimieren. Das durch die Feinabstimmung zurückgegebene Modell kann für die Inferenz weiter eingesetzt werden.

Die folgenden Anweisungen beschreiben, wie die Trainingsdaten für die Eingabe in das Modell formatiert werden sollten:

  • Input – Ein Verzeichnis, das eine data.csv-Datei enthält. Jede Zeile der ersten Spalte sollte ganzzahlige Klassenbezeichnungen zwischen 0 und der Anzahl der Klassen haben. Jede Zeile der zweiten Spalte sollte die entsprechenden Textdaten enthalten.
  • Ausgabe – Ein fein abgestimmtes Modell, das für Inferenzen eingesetzt oder durch inkrementelles Training weiter trainiert werden kann. Zusammen mit den Modellen wird eine Datei gespeichert, die Klassenindizes Klassenkennzeichnungen zuordnet.

Im Folgenden finden Sie ein Beispiel für eine CSV-Eingabedatei. Beachten Sie, dass die Datei keinen Header haben sollte. Die Datei sollte in einem S3-Bucket mit einem Pfad ähnlich dem folgenden gehostet werden: s3://bucket_name/input_directory/. Beachten Sie, dass der Nachlauf / erforderlich.

|0 |hide new secretions from the parental units|
|0 |contains no wit , only labored gags|
|1 |that loves its characters and communicates something rather beautiful about human nature|
|...|...|

Inferenz mit dem TensorFlow-Textklassifizierungsalgorithmus

Die generierten Modelle können für Inferenz und unterstützenden Text als gehostet werden application/x-text Inhaltstyp. Die Ausgabe enthält die Wahrscheinlichkeitswerte, Klassenbezeichnungen für alle Klassen und die vorhergesagte Bezeichnung, die dem Klassenindex mit der höchsten Wahrscheinlichkeit entspricht, die im JSON-Format codiert ist. Das Modell verarbeitet einen einzelnen String pro Anfrage und gibt nur eine Zeile aus. Das Folgende ist ein Beispiel für eine Antwort im JSON-Format:

accept: application/json;verbose
{"probabilities": [prob_0, prob_1, prob_2, ...],
 "labels": [label_0, label_1, label_2, ...],
 "predicted_label": predicted_label}

If accept eingestellt ist application/json, dann gibt das Modell nur Wahrscheinlichkeiten aus. Weitere Einzelheiten zu Training und Inferenz finden Sie im Beispielnotebook Introduction to Einführung in JumpStart – Textklassifizierung.

Verwenden Sie die integrierten SageMaker-Algorithmen über die JumpStart-Benutzeroberfläche

Sie können auch die Textklassifizierung von SageMaker TensorFlow und alle anderen integrierten Algorithmen mit wenigen Klicks über die JumpStart-Benutzeroberfläche verwenden. JumpStart ist eine SageMaker-Funktion, mit der Sie integrierte Algorithmen und vortrainierte Modelle aus verschiedenen ML-Frameworks und Modell-Hubs über eine grafische Oberfläche trainieren und bereitstellen können. Darüber hinaus können Sie vollwertige ML-Lösungen bereitstellen, die ML-Modelle und verschiedene andere AWS-Services aneinanderreihen, um einen gezielten Anwendungsfall zu lösen.

Im Folgenden finden Sie zwei Videos, die zeigen, wie Sie denselben Feinabstimmungs- und Bereitstellungsprozess, den wir gerade durchlaufen haben, mit wenigen Klicks über die JumpStart-Benutzeroberfläche replizieren können.

Optimieren Sie das vortrainierte Modell

Hier ist der Prozess zur Feinabstimmung desselben vortrainierten Textklassifizierungsmodells.

Stellen Sie das optimierte Modell bereit

Nachdem das Modelltraining abgeschlossen ist, können Sie das Modell mit einem Klick direkt auf einem dauerhaften Echtzeit-Endpunkt bereitstellen.

Zusammenfassung

In diesem Beitrag haben wir die Einführung des integrierten Textklassifizierungsalgorithmus SageMaker TensorFlow angekündigt. Wir haben Beispielcode dafür bereitgestellt, wie Transfer Learning für ein benutzerdefiniertes Dataset unter Verwendung eines vortrainierten Modells von TensorFlow Hub mit diesem Algorithmus durchgeführt wird.

Weitere Informationen finden Sie in der Dokumentation und das Beispiel-Notizbuch Einführung in JumpStart – Textklassifizierung.


Über die Autoren

Übertragen Sie das Lernen für TensorFlow-Textklassifizierungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Vivek Madan ist Angewandte Wissenschaftlerin bei der Amazon SageMaker JumpStart-Team. Er promovierte an der University of Illinois at Urbana-Champaign und war Postdoktorand an der Georgia Tech. Er ist ein aktiver Forscher in den Bereichen maschinelles Lernen und Algorithmendesign und hat Beiträge auf Konferenzen von EMNLP, ICLR, COLT, FOCS und SODA veröffentlicht.

Übertragen Sie das Lernen für TensorFlow-Textklassifizierungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Joao Moura ist AI/ML Specialist Solutions Architect bei Amazon Web Services. Er konzentriert sich hauptsächlich auf NLP-Anwendungsfälle und hilft Kunden, das Training und die Bereitstellung von Deep-Learning-Modellen zu optimieren. Er ist auch ein aktiver Befürworter von Low-Code-ML-Lösungen und ML-spezialisierter Hardware.

Übertragen Sie das Lernen für TensorFlow-Textklassifizierungsmodelle in Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.Dr. Ashish Khetan ist Senior Applied Scientist mit Integrierte Amazon SageMaker-Algorithmen und hilft bei der Entwicklung von Algorithmen für maschinelles Lernen. Er promovierte an der University of Illinois Urbana Champaign. Er ist ein aktiver Forscher auf dem Gebiet des maschinellen Lernens und der statistischen Inferenz und hat viele Artikel auf den Konferenzen NeurIPS, ICML, ICLR, JMLR, ACL und EMNLP veröffentlicht.

Zeitstempel:

Mehr von AWS Maschinelles Lernen