Algorithme seq2seq (Sequence-to-Sequence) - Amazon SageMaker

Algorithme seq2seq (Sequence-to-Sequence)

L'algorithme seq2seq d'Amazon SageMaker est un algorithme d'apprentissage supervisé où l'entrée est constituée d'une séquence de jetons (texte ou données audio, par exemple) et la sortie générée une autre séquence de jetons. Voici quelques exemples d'applications : traduction automatique (entrée d'une phrase dans une langue et prédiction de ce que sera la phrase dans une autre langue), résumé de texte (entrée d'une longue chaîne de mots et prédiction d'une chaîne plus courte correspondant au résumé), synthèse vocale (clips audio convertis en phrases de sortie dans les jetons). Récemment, les problèmes dans ce domaine ont été modélisés avec succès grâce aux réseaux neuronaux profonds qui offrent une amélioration significative des performances par rapport aux méthodologies précédentes. Amazon SageMaker seq2seq utilise les modèles des réseaux neuronaux récurrents (RNN, Recurrent Neural Networks) et des réseaux neuronaux convolutifs (CNN, Convolutional Neural Network ), avec une attention toute particulière pour les architectures encodeur/décodeur.

Interface d'entrée/sortie pour l'algorithme seq2seq

Entrainement

SageMaker seq2seq attend les données au format Record-IO Protobuf. Cependant, les jetons doivent être des nombres entiers, et non des nombres flottants, comme c'est habituellement le cas.

L'exemple de bloc-notes seq2seq contient un script permettant de convertir les fichiers texte tokenisés au format protobuf. En règle générale, l'algorithme empaquette les données au sein de tenseurs (entiers 32 bits) et génère les fichiers de vocabulaire nécessaires, requis pour le calcul des métriques et pour les inférences.

Une fois le prétraitement terminé, l'algorithme peut être appelée pour la formation. L'algorithme attend trois canaux :

  • train : ce canal doit contenir les données de formation (le fichier train.rec généré par le script de prétraitement, par exemple).

  • validation : ce canal doit contenir les données de validation (le fichier val.rec généré par le script de prétraitement, par exemple).

  • vocab : doit contenir deux fichiers de vocabulaire (vocab.src.json et vocab.trg.json)

Si l'algorithme ne trouve pas les données dans l'un de ces trois canaux, la formation se traduit par une erreur.

Inférence

Pour les points de terminaison hébergés, l'inférence prend en charge deux formats de données. Pour effectuer l'inférence en utilisant les jetons de texte séparés par un espace, utilisez le format application/json. Sinon, choisissez le format recordio-protobuf pour utiliser les données codées en nombres entiers. Les deux modes prennent en charge le traitement par lots des données d'entrée. Le format application/json vous permet également de visualiser la matrice d'attention.

  • application/json : attend l'entrée au format JSON et renvoie la sortie au format JSON. Les types du contenu et de l'acceptation doivent être tous les deux au format application/json. Chaque séquence doit se présenter sous forme d'une chaîne avec des jetons séparés par un espace. Ce format est recommandé lorsque le nombre de séquences source du lot est réduit. Il prend également en charge les options de configuration supplémentaires suivantes :

    configuration: {attention_matrix: true}: renvoie la matrice d'attention de la séquence d'entrée.

  • application/x-recordio-protobuf : attend l'entrée au format recordio-protobuf et renvoie la sortie au format recordio-protobuf format. Les types du contenu et de l'acceptation doivent être tous les deux au format applications/x-recordio-protobuf. En ce qui concerne ce format, les séquences source doivent être converties en une liste d'entiers pour les codages protobuf ultérieurs. Ce format est recommandé pour les inférences en bloc.

Pour les transformations par lots, l'inférence prend en charge le format JSON Lines. La transformation par lots attend l'entrée au format JSON Lines et renvoie la sortie au format JSON Lines. Les types du contenu et de l'acceptation doivent être tous les deux au format application/jsonlines. Le format d'entrée est le suivant :

content-type: application/jsonlines {"source": "source_sequence_0"} {"source": "source_sequence_1"}

Le format de la réponse est le suivant :

accept: application/jsonlines {"target": "predicted_sequence_0"} {"target": "predicted_sequence_1"}

Pour plus d'informations sur la sérialisation et la désérialisation des entrées et des sorties en formats spécifiques pour l'inférence, consultez Exemples de blocs-notes seq2seq .

Recommandation relative aux instances EC2 pour l'algorithme seq2seq

Actuellement, seq2seq d'Amazon SageMaker est uniquement pris en charge sur les types d'instance GPU et est uniquement configuré pour entraîner sur une seule machine. Mais il propose également la prise en charge de plusieurs processeurs graphiques.

Exemples de blocs-notes seq2seq

Afin d'obtenir un exemple de bloc-notes qui montre comment utiliser l'algorithme seq2seq de SageMaker pour entraîner un modèle de traduction anglais-allemand, consultez Machine Translation English-German Example Using SageMaker Seq2Seq. Pour savoir comment créer des instances de blocs-notes Jupyter et y accéder afin de les utiliser pour exécuter l'exemple dans SageMaker, consultez Utilisation des instances de bloc-notes Amazon SageMaker. Une fois que vous avez créé une instance de bloc-notes et que vous l'avez ouverte, sélectionnez l'onglet SageMaker Examples (Exemples SageMaker) pour afficher la liste de tous les exemples SageMaker. Les exemples de blocs-notes de modélisation de rubrique utilisant les algorithmes NTM se trouvent dans la section Introduction to Amazon algorithms (Présentation des algorithmes Amazon). Pour ouvrir un bloc-notes, cliquez sur son onglet Use (Utiliser) et sélectionnez Create copy (Créer une copie).