Association de résultats de prédiction à des enregistrements d'entrée - Amazon SageMaker

Association de résultats de prédiction à des enregistrements d'entrée

Lorsque vous effectuez des prédictions sur un ensemble de données volumineux, vous pouvez exclure les attributs qui ne sont pas nécessaires pour les prédictions. Une fois les prédictions effectuées, vous souhaitez dans la plupart des cas associer certains des attributs exclus avec ces prédictions ou avec d'autres données d'entrée dans votre rapport. En utilisant la transformation par lots pour effectuer ces étapes de traitement des données, vous pouvez souvent éliminer d'autres prétraitement ou post-traitement. Vous pouvez utiliser les fichiers d'entrée au format JSON et CVS uniquement.

Flux pour l'association d'inférences à des enregistrements d'entrée

Le schéma suivant illustre le flux de travail pour associer des inférences à des enregistrements d'entrée.

Pour associer des inférences à des données d'entrée, il y a trois étapes principales :

  1. Filtrez les données d'entrée qui ne sont pas nécessaires à l'inférence avant de les transmettre à la tâche de transformation par lots. Utilisez le paramètre InputFilter pour déterminer les attributs à utiliser en tant qu'entrée pour le modèle.

  2. Associez les données d'entrée aux résultats de l'inférence. Utilisez le paramètre JoinSource pour combiner les données d'entrée avec l'inférence.

  3. Filtrez les données associées afin de conserver les entrées nécessaires pour indiquer le contexte de l'interprétation des prédictions dans les rapports. Utilisez OutputFilter pour stocker la partie spécifiée du jeu de données associé dans le fichier de sortie.

Utilisation du traitement des données dans les tâches de transformation par lots

Lors de la création d'une tâche de transformation par lots avec CreateTransformJob pour traiter des données :

  1. Spécifiez la partie de l'entrée à transmettre au modèle avec le paramètre InputFilter dans la structure de données DataProcessing.

  2. Associez les données d'entrée brutes aux données transformées avec le paramètre JoinSource.

  3. Indiquez la partie de l'entrée associée et des données transformées issues de la tâche de transformation par lots à inclure dans le fichier de sortie avec le paramètre OutputFilter.

  4. Choisissez des fichiers au format JSON ou CSV pour l'entrée:

    • Pour les entrées au format JSON ou JSON Lines, SageMaker ajoute l'attribut SageMakerOutput au fichier d'entrée ou crée un fichier de sortie JSON avec les attributs SageMakerInput et SageMakerOutput. Pour de plus amples informations, veuillez consulter DataProcessing.

    • Pour les fichiers d'entrée au format CSV, les données d'entrée associées sont suivies des données transformées et la sortie est un fichier CSV.

Si vous utilisez un algorithme avec la structure DataProcessing, il doit prendre en charge le format que vous avez choisi tant pour les fichiers d'entrée que les fichiers de sortie. Par exemple, avec le champ TransformOutput de l'API CreateTransformJob, vous devez configurer les paramètres Content Type et Accept sur l'une des valeurs suivantes : text/csv, application/json ou application/jsonlines. La syntaxe permettant de spécifier des colonnes dans un fichier CSV est différente de la syntaxe permettant de spécifier des attributs dans un fichier JSON. L'utilisation d'une syntaxe incorrecte provoque une erreur. Pour de plus amples informations, veuillez consulter . Transformation par lots Examples. Pour plus d'informations sur les formats de fichier d'entrée et de sortie pour les algorithmes intégrés, consultez Utiliser les algorithmes intégrés Amazon SageMaker.

Les délimiteurs d'enregistrement pour l'entrée et la sortie doivent également être cohérents avec l'entrée de fichier que vous avez choisie. Le paramètre SplitType indique le mode de fractionnement des enregistrements dans l'ensemble de données en entrée. Le paramètre AssembleWith indique le mode de reconstitution des enregistrements pour la sortie. Si vous définissez les formats d'entrée et de sortie sur text/csv, vous devez également définir les paramètres SplitType et AssemblyType sur line. Si vous définissez les formats d'entrée et de sortie sur application/jsonlines, vous pouvez définir les paramètres SplitType et AssemblyType sur line.

Pour les fichiers CSV, vous ne pouvez pas utiliser de caractères de saut de ligne intégrés. Pour les fichiers JSON, le nom d'attribut SageMakerOutput est réservé à la sortie. Le fichier d'entrée JSON ne peut pas avoir d'attribut portant ce nom. Si c'est le cas, les données du fichier d'entrée risquent d'être écrasées.

Opérateurs JSONPath pris en charge

Pour filtrer et associer les données d'entrée et l'inférence, utilisez une sous-expression JSONPath. SageMaker ne prend en charge qu'un sous-ensemble des opérateurs JSONPath définis. Le tableau suivant répertorie les opérateurs JSONPath pris en charge. Pour les données CSV, chaque ligne est considérée comme un tableau JSON. Par conséquent, seules les valeurs JSONPaths basées sur l'index peuvent être appliquées, par exemple $[0], $[1:]. Les données CSV doivent également respecter le format RFC.

Opérateur JSONPath Description Exemple
$

Élément racine d'une requête. Cet opérateur est requis au début de toutes les expressions de chemin d'accès.

$
.<name>

Élément enfant à notation point.

$.id

*

Caractère générique. Utilisez-le pour remplacer un nom d'attribut ou une valeur numérique.

$.id.*

['<name>' (,'<name>')]

Élément à notation crochet ou éléments enfants multiples.

$['id','SageMakerOutput']

[<number> (,<number>)]

Index ou tableau d'index. Les valeurs d'index négatives sont également prises en charge. Un index -1 correspond au dernier élément d'un tableau.

$[1] , $[1,3,5]

[<start>:<end>]

Opérateur de découpage de tableau. La méthode array slice() extrait une section d'un tableau et renvoie un nouveau tableau. Si vous omettez <start>, SageMaker utilise le premier élément du tableau. Si vous omettez <end>, SageMaker utilise le dernier élément du tableau.

$[2:5], $[:5], $[2:]

Lorsque vous utilisez la notation entre crochets pour spécifier plusieurs éléments enfants d'un champ donné, l'imbrication supplémentaire d'enfants entre parenthèses n'est pas prise en charge. Par exemple, $.field1.['child1','child2'] est pris en charge alors qu'$.field1.['child1','child2.grandchild'] ne l'est pas.

Pour plus d'informations sur les opérateurs JSONPath, consultez JsonPath sur GitHub.

Transformation par lots Examples

Les exemples suivants illustrent les méthodes courantes permettant d'associer des données d'entrée aux résultats de prédiction.

Exemple : Inférences de sortie uniquement

Par défaut, le paramètre DataProcessing ne joint pas les résultats d'inférence à l'entrée. Il génère uniquement les résultats de l'inférence.

Si vous voulez spécifier de façon explicite de ne pas associer les résultats aux données d'entrée, utilisez le kit SDK Amazon SageMaker Python et spécifiez les paramètres suivants dans un appel de transformateur.

sm_transformer = sagemaker.transformer.Transformer(…) sm_transformer.transform(…, input_filter="$", join_source= "None", output_filter="$")

Pour générer des inférences à l'aide du kit SDK AWS pour Python, ajoutez le code suivant à votre demande CreateTransformJob. Le code suivant imite le comportement par défaut.

{ "DataProcessing": { "InputFilter": "$", "JoinSource": "None", "OutputFilter": "$" } }

Exemple : données d'entrée et inférences de sortie

Si vous utilisez le kit SDK Amazon SageMaker Python, pour combiner les données d'entrée avec les inférences dans le fichier de sortie, spécifiez "Input" pour le paramètre JoinSource dans un appel de transformateur.

sm_transformer = sagemaker.transformer.Transformer(…) sm_transformer.transform(…, join_source= "Input")

Si vous utilisez le kit SDK AWS pour Python (Boto 3), associez toutes les données d'entrée avec l'inférence en ajoutant le code suivant à votre demande CreateTransformJob.

{ "DataProcessing": { "JoinSource": "Input" } }

Pour le format JSON ou JSON Lines, les résultats figurent dans la clé SageMakerOutput du fichier JSON en entrée. Par exemple, si l'entrée est un fichier JSON qui contient la paire clé-valeur {"key":1}, le résultat de la transformation des données peut être {"label":1}.

SageMaker stocke ces deux éléments dans le fichier d'entrée sous la clé SageMakerInput.

{ "key":1, "SageMakerOutput":{"label":1} }
Note

Le résultat associé pour JSON doit être un objet de type paire clé-valeur. Si l'entrée n'est pas un objet de type paire clé-valeur, SageMaker crée un fichier JSON. Dans le nouveau fichier JSON, les données d'entrée sont stockées dans la clé SageMakerInput et les résultats sont stockés dans la valeur SageMakerOutput.

Pour un fichier CSV, si l'enregistrement est [1,2,3] et le résultat d'étiquette est [1] par exemple, le fichier de sortie contient alors [1,2,3,1].

Exemple : génération d'une colonne ID avec Results et exclusion de cette colonne de l'entrée (CSV)

Si vous utilisez le kit SDK Amazon SageMaker Python, pour inclure des résultats ou une colonne ID dans la sortie, spécifiez les index du jeu de données associé dans un appel de transformateur. Par exemple, si vos données incluent cinq colonnes (la première étant la colonne ID), utilisez la demande de transformateur suivante.

sm_transformer = sagemaker.transformer.Transformer(…) sm_transformer.transform(…, input_filter="$[1:]", join_source= "Input", output_filter="$")

Si vous utilisez le kit SDK AWS pour Python (Boto 3), ajoutez le code suivant à votre demande CreateTransformJob.

{ "DataProcessing": { "InputFilter": "$[1:]", "JoinSource": "Input", "OutputFilter": "$" } }

Pour spécifier des colonnes dans SageMaker, utilisez l'index des éléments du tableau. La première colonne est l'index 0, la deuxième est l'index 1 et la sixième est l'index 5.

Pour exclure la première colonne de l'entrée, définissez InputFilter sur "$[1:]". Les deux points (:) indiquent à SageMaker d'inclure tous les éléments entre deux valeurs, incluses. Par exemple, $[1:4] spécifie les colonnes 2 à 5.

Si vous omettez le nombre après les deux points, par exemple, [5:], le sous-ensemble inclut toutes les colonnes, de la sixième à la dernière. Si vous omettez le nombre avant les deux points, par exemple, [:5], le sous-ensemble inclut toutes les colonnes, de la première (index 0) à la sixième.

Exemple : génération d'un attribut ID avec Results et exclusion de cet attribut de l'entrée (JSON)

Si vous utilisez le kit SDK Amazon SageMaker Python, incluez les résultats d'un attribut ID dans la sortie en le spécifiant dans un appel de transformateur. Par exemple, si vous stockez des données sous l'attribut features et l'ID d'enregistrement sous l'attribut ID, vous utilisez la demande de transformateur suivante.

sm_transformer = sagemaker.transformer.Transformer(…) sm_transformer.transform(…, input_filter="$.features", join_source= "Input", output_filter="$['id','SageMakerOutput']")

Si vous utilisez le kit SDK AWS pour Python (Boto 3), associez toutes les données d'entrée avec l'inférence en ajoutant le code suivant à votre demande CreateTransformJob.

{ "DataProcessing": { "InputFilter": "$.features", "JoinSource": "Input", "OutputFilter": "$['id','SageMakerOutput']" } }
Avertissement

Si vous utilisez un fichier d'entrée au format JSON, le fichier ne peut pas contenir le nom d'attribut SageMakerOutput. Le nom d'attribut est réservé au fichier de sortie. Si votre fichier d'entrée au format JSON contient un attribut portant ce nom, les valeurs du fichier d'entrée peuvent être remplacées par l'inférence.