Algorithme BlazingText - Amazon SageMaker

Algorithme BlazingText

L'algorithme BlazingText d'Amazon SageMaker fournit des mises en œuvre hautement optimisées des algorithmes de classification textuelle et Word2vec. L'algorithme Word2vec s'avère utile pour de nombreuses tâches de traitement du langage naturel en aval, telles que l'analyse de sentiment, la reconnaissance d'entités nommées, la traduction automatique, etc. La classification textuelle est une tâche importante pour les applications qui effectuent des recherches sur le web ou pour la récupération des informations, le classement et la classification des documents.

L'algorithme Word2vec mappe les mots à des vecteurs distribués de haute qualité. La représentation vectorielle résultante d'un mot est désignée sous le terme de plongement lexical. Les mots qui sont sémantiquement similaires correspondent aux vecteurs proches les uns des autres. Ainsi, les plongements lexicaux capturent les relations sémantiques entre les mots.

De nombreuses applications de traitement du langage naturel (NLP) apprennent les plongements lexicaux en se formant sur de grands ensembles de documents. Ces représentations vectorielles préentraînées fournissent des informations sur la sémantique et les distributions lexicales qui améliorent habituellement la généralisation des autres modèles qui sont ensuite entraînés à partir d'une quantité plus limitée de données. La plupart des implémentations de l'algorithme Word2vec ne sont pas optimisées pour les architectures à UC multicœurs. Il est donc difficile de procéder à un dimensionnement pour de grands ensembles de données.

Avec l'algorithme BlazingText, vous pouvez facilement procéder à une mise à l'échelle vers de grands ensembles de données. Semblable à Word2vec, il fournit les architectures d'entraînement skip-gram et CBOW (continuous bag of words). La mise en œuvre par BlazingText de l'algorithme de classification à appellations multiples à classes multiples supervisé étend le classifieur fastText afin d'utiliser l'accélération GPU avec des noyaux CUDA personnalisés. Vous pouvez entraîner un modèle sur plus d'un milliard de mots en quelques minutes à l'aide d'une UC multicœurs ou d'un GPU. En outre, vous obtenez des performances comparables à celles des algorithmes de classification textuelle de deep learning de pointe.

L'algorithme BlazingText n'est pas parallélisable. Pour plus d'informations sur les paramètres liés à l'entraînement, consultez les chemins de registre Docker pour les algorithmes intégrés SageMaker.

Les algorithmes BlazingText de SageMaker fournissent les fonctions suivantes :

  • Entraînement accéléré du classifieur fastText sur des UC multicœurs ou un GPU et Word2vec sur des GPU utilisant des noyaux CUDA hautement optimisés. Pour plus d'informations, consultez BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs.

  • Vecteurs lexicaux enrichis avec la structure interne des mots en apprenant les représentations vectorielles pour les n-grammes de caractère. Grâce à cette approche, BlazingText peut générer des vecteurs significatifs pour les mots hors vocabulaire (MHV) en représentant leurs vecteurs comme la somme des vecteurs de n-grammes de caractère (sous-mot).

  • Un batch_skipgram mode pour l'algorithme Word2vec qui accélère l'entraînement et le calcul distribué sur plusieurs nœuds d'UC. Le batch_skipgram mode procède à un traitement par mini-lots en appliquant la stratégie de partage d'échantillons négatifs afin de convertir les opérations BLAS de niveau 1 en opérations BLAS de niveau 3. Ainsi, les instructions multiply add des architectures modernes sont efficacement mises à profit. Pour plus d'informations, consultez l'article Mise en parallèle Word2vec en mémoire partagée et distribuée.

En résumé, les modes suivants sont pris en charge par BlazingText sur différents types d'instances :

Modes

Word2vec

(Apprentissage non supervisé)

Classification de texte

(Apprentissage supervisé)

Instance d'UC unique

cbow

Skip-gram

Batch Skip-gram

supervised

Instance GPU unique (avec un ou plusieurs GPU)

cbow

Skip-gram

supervised avec un GPU

Plusieurs instances d'UC

Batch Skip-gram Aucun

Pour plus d'informations sur les mathématiques sous-jacentes à BlazingText, consultez BlazingText : dimensionnement et accélération de Word2vec avec plusieurs processeurs graphiques.

Interface d'entrée/de sortie pour l'algorithme BlazingText

L'algorithme BlazingText attend que vous fournissiez un seul fichier texte prétraité avec des jetons séparés par des espaces. Chaque ligne du fichier doit contenir une seule phrase. Si l'entraînement doit porter sur plusieurs fichiers texte, concaténez-les en un seul fichier que vous chargerez dans le canal respectif.

Format des données d'entraînement et de validation

Format des données d'entraînement et de validation pour l'algorithme Word2vec

Pour l'entraînement Word2vec, chargez le fichier sous le canal d' entraînement. Aucun autre canal n'est pris en charge. Le fichier doit contenir une phrase d'entraînement par ligne.

Format des données d'entraînement et de validation pour l'algorithme de classification textuelle

En mode supervisé, vous pouvez procéder à l'entraînement en mode File (Fichier) ou à l'aide du format de texte manifeste augmenté.

Entraînement en mode File (Fichier)

En mode supervised, le fichier d'entraînement/validation doit contenir une phrase d'entraînement par ligne, ainsi que les étiquettes. Les étiquettes sont des mots préfixés de la chaîne __label__. Voici un exemple de fichier d'entraînement/validation :

__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 .
Note

L'ordre des étiquettes dans la phrase n'importe pas.

Chargez le fichier d'entraînement sous le canal d'entraînement et, le cas échéant, chargez le fichier de validation sous le canal de validation.

Entraînement à l'aide du format de texte manifeste augmenté

Le mode supervisé prend également en charge le format manifeste augmenté, ce qui vous permet de procéder à l'entraînement en mode Pipe (Tube) sans avoir à créer de fichiers RecordIO. Si vous utilisez ce format, un fichier manifeste S3 contenant la liste des phrases et de leurs étiquettes associées doit être généré. Le fichier manifeste doit être au format JSON Lines, où chaque ligne représente un exemple. Les phrases sont spécifiées à l'aide de la balise source ; l'étiquette peut être spécifiée à l'aide de la balise label. Les deux balises source et label doivent être fournies sous la valeur de paramètre AttributeNames, comme indiqué dans la demande.

{"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}

L'entraînement avec plusieurs étiquettes est également prise en charge en spécifiant un tableau d'étiquettes JSON.

{"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]}

Pour plus d'informations sur les fichiers manifeste augmenté, consultez Fournir des métadonnées d'ensembles de données à des tâches d'entraînement avec un fichier manifeste augmenté.

Artefacts de modèles et inférence

Artefacts de modèles pour l'algorithme Word2vec

Dans le cadre de l'entraînement Word2vec, les artefacts de modèles se composent de vectors.txt, qui contient le mappage mots-vecteurs, et de vectors.bin, un fichier binaire utilisé par BlazingText pour l'hébergement et/ou l'inférence. vectors.txt stocke les vecteurs dans un format compatible avec d'autres outils tels que Gensim et Spacy. Par exemple, un utilisateur de Gensim peut exécuter les commandes suivantes pour charger le fichier vectors.txt :

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

Si le paramètre d'évaluation est défini sur True, un autre fichier, eval.json, est créé. Ce fichier contient les résultats d'évaluation de similarité (d'après les coefficients de corrélation de Spearman) pour l'ensemble de données WS-353. Le nombre de mots de l'ensemble de données WS-353 absents du corps d'entraînement est signalé.

Pour les demandes d'inférence, le modèle accepte un fichier JSON contenant une liste de chaînes et renvoie une liste de vecteurs. Si le mot ne figure pas dans le vocabulaire, l'inférence renvoie un vecteur de zéros. Si les sous-mots sont définis sur True au cours de l'entraînement, le modèle peut générer des vecteurs correspondant aux mots hors vocabulaire (MHV).

Exemple de demande JSON

Type Mime : application/json

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

Artefacts de modèles pour l'algorithme de classification textuelle

L'entraînement avec des sorties supervisées génère un fichier model.bin qui peut être consommé par l'hébergement BlazingText. Pour l'inférence, le modèle BlazingText accepte un fichier JSON contenant une liste de phrases et renvoie une liste des étiquettes prédites et des scores de probabilité correspondants. Chaque phrase doit se présenter sous la forme d'une chaîne avec des jetons et/ou des mots séparés par un espace.

Exemple de demande JSON

Type Mime : application/json

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

Par défaut, le serveur renvoie une seule prédiction, celle qui a la plus haute probabilité. Pour récupérer les k premières prédictions, vous pouvez définir k dans la configuration, comme suit :

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

Dans le cadre de BlazingText, les paramètres content-type et accept doivent être égaux. Dans le cadre de la transformation par lots, ils doivent tous deux être application/jsonlines. S'ils diffèrent, le champ Accept est ignoré. Le format d'entrée se présente comme suit :

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}

Le format de sortie se présente comme suit :

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"]}

En modes supervisé (classification textuelle) et non supervisé (Word2vec), les fichiers binaires (*.bin) générés par BlazingText peuvent être consommés par fastText et vice versa. Les fichiers binaires générés avec BlazingText peuvent être utilisés dans fastText. De même, les fichiers binaires modèles créés avec fastText peuvent être hébergés dans BlazingText.

Voici un exemple d'utilisation d'un modèle généré à l'aide de BlazingText avec 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

Cependant, les binaires ne sont pris en charge que lors de l'entraînement sur CPU et GPU unique ; l'entraînement sur plusieurs GPU ne produira pas de binaires.

Pour plus d'informations sur les formats d'ensembles de données et l'hébergement des modèles, consultez les exemples de blocs-notes relatifs à laclassification textuelle avec l'algorithme BlazingText, aux modèles FastText et à la génération de plongements de sous-mots à l'aide de l'algorithme Word2vec.

Recommandation pour l'instance EC2 relative à l'algorithme BlazingText

En modes cbow et skipgram, BlazingText prend en charge les instances à une seule UC et à un seul processeur graphique (GPU). Ces deux modes prennent en charge l'apprentissage des plongements de sous-mots subwords. Afin d'optimiser la vitesse sans compromettre la précision, il est recommandé d'utiliser une instance ml.p3.2xlarge.

En mode batch_skipgram, BlazingText prend en charge les instances à une seule ou à plusieurs UC. Lors de l'entraînement sur plusieurs instances, définissez la valeur du champ S3DataDistributionType de l'objet S3DataSource que vous transmettez à CreateTrainingJob sur FullyReplicated. BlazingText s'occupe de la distribution des données sur plusieurs machines.

En mode de classification textuelle supervisé, il est recommandé d'utiliser une instance C5 si l'ensemble de données d'entraînement a une taille inférieure à 2 Go. Pour les ensembles de données plus volumineux, utilisez une instance avec un seul GPU (ml.p2.xlarge ou ml.p3.2xlarge).

Exemples de blocs-notes BlazingText

Afin d'obtenir un exemple de bloc-notes qui utilise l'algorithme BlazingText de SageMaker pour entraîner et déployer des modèles de classification multiclasse et binaire supervisés, consultez la page relative à la classification BlazingText sur le jeu de données DBPedia. Pour obtenir des instructions relatives à la création d'instances de blocs-notes Jupyter et à l'accès à ces instances pour exécuter l'exemple dans SageMaker, consultez Utilisation des instances de bloc-notes Amazon SageMaker. Après avoir créé et ouvert une instance de bloc-notes, choisissez l'onglet SageMaker Examples (Exemples SageMaker) afin d'afficher une liste de tous les exemples SageMaker. Vous trouverez des exemples de blocs-notes de modélisation des rubriques qui utilisent les le Blazing Text à la section Présentation des algorithmes Amazon. Pour ouvrir un bloc-notes, choisissez l'onglet Use (Utiliser) correspondant, puis Create copy (Créer une copie).