BlazingText-Algorithmus - Amazon SageMaker KI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

BlazingText-Algorithmus

Der Algorithmus von Amazon SageMaker AI BlazingText bietet hoch optimierte Implementierungen der Word2vec- und Textklassifizierungsalgorithmen. Der Word2vec-Algorithmus ist für viele nachgelagerte natürliche Sprachverarbeitungsaufgaben (Natural Language Processing, NLP) wie z. B. Stimmungsanalyse, Erkennung benannter Entitäten und Maschinenübersetzung nützlich. Die Textklassifizierung ist eine wichtige Aufgabe für Anwendungen, die Web-Suchvorgänge, Informationsabrufe, Rangfolgeneinstufungen und Klassifizierung von Dokumenten durchführen.

Der Word2vec-Algorithmus ordnet Wörter hochwertigen verteilten Vektoren zu. Die resultierende Vektordarstellung eines Wortes wird als Worteinbettung bezeichnet. Wörter, die semantisch ähnlich sind, entsprechen Vektoren, die nahe beieinander liegen. Auf diese Weise erfassen Worteinbettungen die semantischen Beziehungen zwischen Wörtern.

Viele Anwendungen mit natürlicher Sprachverarbeitung (NLP, Natural Language Processing) erlernen Worteinbettungen, indem sie mit großen Sammlungen von Dokumenten trainiert werden. Diese vortrainierten Vektordarstellungen liefern Informationen zur Semantik und zu den Wortverteilungen, was in der Regel die Generalisierung anderer Modelle verbessert, die später mit einer eher begrenzten Datenmenge trainiert werden. Die meisten Implementierungen des Word2vec-Algorithmus sind nicht für Multi-Core-CPU-Architekturen optimiert. Auf diese Weise lassen sich große Datensätze nur schwer skalieren.

Mit dem BlazingText-Algorithmus können Sie problemlos große Datensätze skalieren. Ähnlich wie Word2vec stellt er das Skipgram und fortlaufende CBOW-Trainingsarchitekturen (Continuous Bag of Words) bereit. Die BlazingText-Implementierung des überwachten Textklassifizierungsalgorithmus mit mehreren Klassen und Bezeichnungen erweitert den fastText-Text-Classifier zur Verwendung der GPU-Beschleunigung mit benutzerdefinierten CUDA-Kernel. Sie können ein Modell mit mehr als eine Milliarde Wörter in wenigen Minuten mithilfe einer Multi-Core-CPU oder GPU trainieren. Sie erreichen eine Leistung, die mit den modernen Deep-Learning-Textklassifizierungsalgorithmen gleichwertig ist.

Der BlazingText-Algorithmus ist nicht parallelisierbar. Weitere Informationen zu Trainingsparametern finden Sie unter Docker-Registry-Pfade für integrierte Algorithmen von SageMaker.

Die Algorithmen von SageMaker AI BlazingText bieten die folgenden Funktionen:

  • Beschleunigtes Training des fastText Text-Classifier auf Multi-Core-CPUs oder einer GPU und Word2Vec auf GPUs mithilfe eines hochgradig optimierten CUDA-Kernels. Weitere Informationen finden Sie unter BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs.

  • Angereicherte Wortvektoren mit Teilwortinformationen durch Erlernen von Vektordarstellungen für N-Gramm-Zeichen. Dieser Ansatz ermöglicht dem BlazingText-Algorithmus die Generierung aussagekräftiger Vektoren für Wörter außerhalb des Vokabulars (out-of-vocabulary, OOV) durch Darstellen ihrer Vektoren als Summe der N-Gramm-Zeichen-Vektoren.

  • Ein batch_skipgram mode für den Word2Vec-Algorithmus, mit dem schnellere Trainings und verteilte Berechnungen auf mehreren CPU-Knoten möglich sind. Das batch_skipgram mode führt eine Mini-Stapelverarbeitung mithilfe der Strategie des Austauschs von Negativbeispielen zum Konvertieren von BLAS-Operationen der ersten Ebene in BLAS-Operationen der dritten Ebene durch. Damit werden die Anweisungen zum Multiplizieren und Hinzufügen moderner Architekturen effizient genutzt. Weitere Informationen finden Sie unter Parallelizing Word2Vec in Shared und Distributed-Memory.

Zusammenfassend werden die folgenden Modi von BlazingText auf verschiedenen Arten von Instances unterstützt:

Modi

Word2Vec

(Unüberwachtes Lernen)

Textklassifizierung

(Überwachtes Lernen)

Einzelne CPU-Instance

cbow

Skip-gram

Batch Skip-gram

supervised

Einzelne GPU-Instance (mit einer oder mehreren GPUs)

cbow

Skip-gram

supervised mit einer GPU

Mehrere CPU-Instances

Batch Skip-gram Keine

Mehr Informationen über die Mathematik hinter BlazingText finden Sie unter BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs.

E/A-Schnittstelle für den BlazingText-Algorithmus

Der BlazingText-Algorithmus erwartet eine einzelne vorverarbeitete Textdatei mit durch Leerzeichen getrennten Token. Jede Zeile in der Datei enthält einen einzelnen Satz. Wenn Sie mehrere Textdateien trainieren, verketten Sie sie in einer Datei und laden Sie die Datei in den jeweiligen Kanal hoch.

Trainings- und Validierungsdatenformat

Trainings- und Validierungsdatenformat für den Word2Vec-Algorithmus

Für Word2Vec-Trainings laden Sie die Datei unter dem train-Kanal hoch. Andere Kanäle werden nicht unterstützt. Die Datei enthält einen einzelnen Trainingssatz pro Zeile.

Trainings- und Validierungsdatenformat für den Textklassifizierungsalgorithmus

Im Rahmen des beaufsichtigten Modus können Sie im Dateimodus oder im erweiterten Manifesttextformat trainieren.

Trainieren im Dateimodus

Im supervised-Modus sollte das Trainings-/Validierungsdatei einen Trainingssatz pro Zeile zusammen mit den Bezeichnungen enthalten. Bezeichnungen sind Wörter, denen die Zeichenfolge __label__ vorangestellt ist. Hier finden Sie ein Beispiel für eine Trainings-/Validierungsdatei:

__label__4 linux ready for prime time , intel says , despite all the linux hype , the open-source movement has yet to make a huge splash in the desktop market . that may be about to change , thanks to chipmaking giant intel corp . __label__2 bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly as the indian skippers return to international cricket was short lived .
Anmerkung

Die Reihenfolge der Bezeichnungen innerhalb des Satzes ist unerheblich.

Laden Sie das Trainingsdatei unter dem Trainingskanal hoch. Die Validierungsdatei können Sie optional unter dem Validierungskanal hochladen.

Schulen im erweiterten Manifesttextformat

Der überwachte Modus für CPU-Instances unterstützt auch das erweiterte Manifestformat, mit dem Sie im Pipe-Modus trainieren können, ohne RecordIO-Dateien erstellen zu müssen. Bei der Verwendung dieses Formats muss eine S3-Manifestdatei generiert werden, die die Liste der Sätze und ihre entsprechenden Bezeichnungen enthält. Das Manifestdateiformat sollte im JSON Lines-Format vorliegen, bei dem jede Zeile ein Muster darstellt. Die Sätze werden unter Verwendung des source-Tags angegeben und die Bezeichnung kann mithilfe des label-Tags angegeben werden. Die – sourceund label-Tags sollten beide unter dem AttributeNames-Parameterwert bereitgestellt werden, wie in der Anforderung angegeben.

{"source":"linux ready for prime time , intel says , despite all the linux hype", "label":1} {"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label":2}

Multi-Label-Training wird auch durch die Angabe eines JSON-Arrays von Labels unterstützt.

{"source":"linux ready for prime time , intel says , despite all the linux hype", "label": [1, 3]} {"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label": [2, 4, 5]}

Weitere Informationen zu erweiterten Manifestdateien finden Sie unter Erweiterte Manifestdateien für Trainingsjobs.

Modellartefakte und Inferenz

Modellartefakte für den Word2Vec-Algorithmus

Für Word2Vec-Trainings bestehen die Modellartefakte aus der Datei vectors.txt, die eine Zuweisung von Wörtern zu Vektoren enthält, und der Datei vectors.bin. Dies ist eine binäre Datei, die von BlazingText für Hosting, Inferenz oder beides verwendet wird. Die Datei vectors.txt speichert die Vektoren in einem Format, das mit anderen Tools wie Gensim und Spacy kompatibel ist. Beispiel: Ein Gensim-Benutzer kann die folgenden Befehle zum Laden der Datei vectors.txt ausführen:

from gensim.models import KeyedVectors word_vectors = KeyedVectors.load_word2vec_format('vectors.txt', binary=False) word_vectors.most_similar(positive=['woman', 'king'], negative=['man']) word_vectors.doesnt_match("breakfast cereal dinner lunch".split())

Wenn der Auswertungsparameter auf True festgelegt ist, wird eine zusätzliche Datei, eval.json, erstellt. Diese Datei enthält die Ergebnisse der Ähnlichkeitsauswertung (unter Verwendung der Rangkorrelationskoeffizienten von Spearman) im WS-353-Datensatz. Die Anzahl der Wörter aus dem WS-353-Datensatz, die im Trainingsdatensatz nicht vorhanden waren, werden gemeldet.

Für Inferenzanforderungen akzeptiert das Modell eine JSON-Datei mit einer Liste von Zeichenfolgen und gibt eine Liste der Vektoren zurück. Wenn das Wort im Vokabular nicht gefunden wird, gibt die Inferenz einen Vektor mit Nullen zurück. Wenn "subwords (Teilwörter)" während des Trainings auf True festgelegt ist, ist das Modell in der Lage, Vektoren für Wörter außerhalb des Vokabulars (OOV-Wörter) zu generieren.

JSON-Beispielanfrage

Mime-Typ: application/json

{ "instances": ["word1", "word2", "word3"] }

Modellartefakte für den Textklassifizierungsalgorithmus

Durch das Training mit überwachten Ausgaben wird eine model.bin-Datei erstellt, die vom BlazingText-Hosting in Anspruch genommen werden kann. Für Inferenzen akzeptiert das BlazingText-Modell eine JSON-Datei mit einer Liste von Sätzen und gibt eine Liste der entsprechenden vorausgesagten Bezeichnungen und Wahrscheinlichkeitspunktzahlen zurück. Jeder Satz muss eine Zeichenfolge mit durch Leerzeichen getrennten Token, Wörtern oder beidem sein.

JSON-Beispielanfrage

Mime-Typ: application/json

{ "instances": ["the movie was excellent", "i did not like the plot ."] }

Standardmäßig gibt der Server nur eine Voraussage zurück, und zwar die mit der höchsten Wahrscheinlichkeit. Zum Abrufen der top k-Voraussagen können Siek in der Konfiguration wie folgt festlegen:

{ "instances": ["the movie was excellent", "i did not like the plot ."], "configuration": {"k": 2} }

Für BlazingText müssen die Parameter content-type und accept gleich sein. Für die Stapeltransformation müssen beide application/jsonlines lauten. Wenn sie sich voneinander unterscheiden, wird das Feld Accept ignoriert. Das Format für die Eingabe lautet wie folgt:

content-type: application/jsonlines {"source": "source_0"} {"source": "source_1"} if you need to pass the value of k for top-k, then you can do it in the following way: {"source": "source_0", "k": 2} {"source": "source_1", "k": 3}

Das Format für die Ausgabe lautet wie folgt:

accept: application/jsonlines {"prob": [prob_1], "label": ["__label__1"]} {"prob": [prob_1], "label": ["__label__1"]} If you have passed the value of k to be more than 1, then response will be in this format: {"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]} {"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}

Für den überwachten (Textklassifizierungs-) sowie für den unüberwachten (Word2Vec-) Modus können die von BlazingText erzeugten Binärdateien (*.bin) von fastText in Anspruch genommen werden und umgekehrt. Sie können Binärdateien, die von BlazingText generiert werden, mit fastText verwenden. Entsprechend können Sie die Modellbinärdateien, die mit fastText erstellt werden, unter Verwendung von BlazingText hosten.

Hier ist ein Beispiel für die Verwendung eines mit BlazingText erstellten Modells mit fastText:

#Download the model artifact from S3 aws s3 cp s3://<YOUR_S3_BUCKET>/<PREFIX>/model.tar.gz model.tar.gz #Unzip the model archive tar -xzf model.tar.gz #Use the model archive with fastText fasttext predict ./model.bin test.txt

Die Binärdateien werden jedoch nur beim Training auf CPU und einer einzigen GPU unterstützt; das Training auf mehreren GPUs erzeugt keine Binärdateien.

EC2-Instance-Empfehlung für den BlazingText-Algorithmus

Für – cbowund skipgram-Modi unterstützt BlazingText einzelne CPU- und GPU-Instances. Beide Modi unterstützen das Erlernen von subwords-Einbettungen. Um die höchste Geschwindigkeit ohne Genauigkeitseinbußen zu erzielen, empfehlen wir die Verwendung einer ml.p3.2xlarge-Instance.

Im batch_skipgram-Modus unterstützt BlazingText einzelne oder mehrere CPU-Instances. Bei Trainings auf mehreren Instances legen Sie den Wert des S3DataDistributionType-Felds des S3DataSource-Objekts, das Sie an CreateTrainingJob übergeben, auf FullyReplicated fest. BlazingText übernimmt die Verteilung von Daten auf mehrere Maschinen.

Im überwachten Textklassifizierungsmodus wird eine C5-Instance empfohlen, wenn der Trainingsdatensatz kleiner ist als 2 GB. Für größere Datensätze verwenden Sie eine Instance mit einer einzelnen GPU. BlazingText unterstützt P2, P3, G4dn und G5 Instances für Training und Instance.

BlazingText-Beispiel-Notebooks

Ein Beispiel-Notebook, das den Algorithmus von SageMaker AI BlazingText trainiert und einsetzt, um Wortvektoren zu erzeugen, finden Sie unter Lernen von Word2Vec-Wortrepräsentationen mit BlazingText. Anweisungen zum Erstellen von und Zugreifen auf Jupyter-Notebook-Instances, die Sie verwenden können, um das Beispiel in SageMaker AI auszuführen, finden Sie unter SageMaker Amazon-Notebook-Instanzen. Sobald Sie eine Notebook-Instance erstellt und geöffnet haben, wählen Sie die Registerkarte SageMaker-AI-Beispiele aus. Dort finden Sie eine Liste aller SageMaker-AI-Beispiele. Die Beispiel-Notebooks für die Themenmodellierung, die Blazing Text verwenden, befinden sich im Abschnitt Introduction to Amazon algorithms. Zum Öffnen eines Notebooks wählen Sie die Registerkarte Use (Verwenden) und dann Create copy (Kopie erstellen).