Creación de un trabajo de inferencia por lotes - Amazon Personalize

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Creación de un trabajo de inferencia por lotes

Cree un trabajo de inferencia de lotes para obtener recomendaciones de elementos por lotes para los usuarios en función de los datos de entrada de Amazon S3. Los datos de entrada pueden ser una lista de usuarios o elementos (o ambos) en JSON formato. Puede crear un trabajo de inferencia por lotes con la consola Amazon Personalize, el AWS Command Line Interface (AWS CLI) o AWS SDKs.

Cuando crea un trabajo de inferencia por lotes, especifica las rutas de Amazon S3 en sus ubicaciones de entrada y salida. Amazon S3 se basa en prefijos. Si proporciona un prefijo para la ubicación de los datos de entrada, Amazon Personalize utilizará todos los archivos que coincidan con ese prefijo como datos de entrada. Por ejemplo, si proporciona s3://amzn-s3-demo-bucket/folderName y su bucket también tiene una carpeta con una ruta de s3://amzn-s3-demo-bucket/folderName_test, Amazon Personalize utiliza todos los archivos de ambas carpetas como datos de entrada. Para usar solo los archivos de una carpeta específica como datos de entrada, finalice la ruta de Amazon S3 con un delimitador de prefijo, como/: s3://amzn-s3-demo-bucket/folderName/ Para obtener más información sobre cómo Amazon S3 organiza los objetos, consulte Organizar, enumerar y trabajar con sus objetos.

Para obtener más información sobre el flujo de trabajo por lotes en Amazon Personalize, incluidos los requisitos de permisos, la puntuación de las recomendaciones y la preparación e importación de los datos de entrada, consulte Obtener recomendaciones de artículos por lotes con recursos personalizados.

Creación de un trabajo de inferencia por lotes (consola)

Una vez que haya completado Preparación de los datos de entrada para las recomendaciones por lotes, estará listo para crear un trabajo de inferencia por lotes. En este procedimiento, se da por hecho que ya ha creado una solución y una versión de la solución (modelo entrenado).

Para crear un trabajo de inferencia por lotes (consola)
  1. Abre la consola Amazon Personalize en https://console.aws.amazon.com/personalize/casa e inicia sesión en tu cuenta.

  2. En la página Grupos de conjuntos de datos, elija su grupo de conjuntos de datos.

  3. En el panel de navegación, en Recursos personalizados, elija Trabajos de inferencia por lotes.

  4. Elija Crear trabajo de inferencia por lotes.

  5. Elija el tipo de trabajo de inferencia por lotes.

    • Para generar recomendaciones de elementos sin temas, elija Recomendaciones de elementos.

    • Si usa la receta Similar-Items y quiere agregar temas descriptivos a grupos de elementos similares, elija Recomendaciones de temas con el Generador de contenidos. Para generar temas, debe tener un conjunto de datos de elementos con datos de los nombres de elementos y datos textuales. Para obtener más información, consulte Recomendaciones por lotes con temas del Generador de contenidos.

  6. En Detalles del trabajo de inferencia por lotes, en Nombre del trabajo de inferencia por lotes, especifique un nombre para el trabajo de inferencia por lotes.

  7. En Solución, elija la solución y, a continuación, elija el ID de versión de la solución que desee utilizar para generar las recomendaciones.

  8. En Número de resultados, si lo desea, especifique el número de recomendaciones para cada línea de datos de entrada. El valor predeterminado es 25.

  9. Si el trabajo por lotes genera recomendaciones con temas, en Detalles de las recomendaciones de temas, elija la columna que contiene los nombres o los títulos de los elementos de su conjunto de datos de elementos. Estos datos pueden ayudar a generar temas más relevantes. Para obtener más información, consulte Recomendaciones por lotes con temas del Generador de contenidos.

  10. En Origen de la entrada, especifique la ruta de Amazon S3 al archivo de entrada.

    Utilice la siguiente sintaxis: s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json

    Los datos de entrada deben tener el formato correcto para la receta que utiliza su solución. Para ver ejemplos de datos de entrada, consulteEjemplos de entradas y salidas JSON de trabajos de inferencia por lotes.

  11. En el caso de la clave de descifrado, si utilizas tu propia AWS KMS clave para el cifrado de buckets, especifica el nombre del recurso de Amazon (ARN) de la clave. Amazon Personalize debe tener permiso para usar su clave. Para obtener información sobre cómo conceder permisos, consulte Concesión de permiso a Amazon Personalize para que utilice la clave AWS KMS.

  12. En Destino de salida, especifique la ruta a su ubicación de salida. Recomendamos que utilice una ubicación diferente para sus datos de salida (ya sea una carpeta o un bucket de Amazon S3 diferente).

    Utilice la siguiente sintaxis: s3://amzn-s3-demo-bucket/<output folder name>/

  13. En el caso de la clave de cifrado, si utiliza su propia AWS KMS clave para el cifrado, especifique ARN la clave. Amazon Personalize debe tener permiso para usar su clave. Para obtener información sobre cómo conceder permisos, consulte Concesión de permiso a Amazon Personalize para que utilice la clave AWS KMS.

  14. Para el rol de IAM servicio, elija el rol de IAM servicio que creó para Amazon Personalize durante la configuración. Este rol debe tener acceso de lectura y escritura a sus buckets de entrada y salida de Amazon S3, respectivamente.

  15. En Filtros, puede elegir un filtro para aplicarlo a las recomendaciones por lotes. Si el filtro utiliza parámetros de marcador de posición, asegúrese de que los valores de los parámetros estén incluidos en la entradaJSON. Para obtener más información, consulte Incluir valores de filtro en la entrada JSON.

  16. Para Etiquetas, si lo desea, añada cualquier etiqueta. Para obtener más información acerca del etiquetado de recursos de Amazon Personalize, consulte Etiquetado de recursos de Amazon Personalize.

  17. Elija Crear trabajo de inferencia por lotes. Se inicia la creación del trabajo de inferencia por lotes y aparece la página Trabajos de inferencia por lotes con la sección Detalles del trabajo de inferencia por lotes visible.

    Cuando el estado del trabajo de inferencia por lotes cambia a Activo, puede recuperar la salida del trabajo en el bucket de Amazon S3 de salida designado. El nombre del archivo de salida tendrá el formato input-name.out.

Creación de un trabajo de inferencia por lotes (AWS CLI)

Cuando haya completado Preparación de los datos de entrada para las recomendaciones por lotes, estará listo para crear un trabajo de inferencia por lotes con la operación CreateBatchInferenceJob.

Creación de un trabajo de inferencia por lotes

Puede usar el comando create-batch-inference-job para crear un trabajo de inferencia por lotes. Especifique un nombre de trabajo, Solution version ARN sustitúyalo por el nombre del recurso de Amazon (ARN) de la versión de la IAM service role ARN solución y sustitúyalo por el ARN del rol de IAM servicio que creó para Amazon Personalize durante la configuración. Este rol debe tener acceso de lectura y escritura a sus buckets de entrada y salida de Amazon S3, respectivamente. Si lo desea, proporcione un filtro ARN para filtrar las recomendaciones. Si el filtro usa parámetros de marcador de posición, asegúrese de que los valores de los parámetros estén incluidos en la entradaJSON. Para obtener más información, consulte Filtrado de las recomendaciones por lotes y segmentos de usuarios (recursos personalizados).

Sustituya S3 input path y S3 output path por la ruta de Amazon S3 al archivo de entrada y a las ubicaciones de salida. Recomendamos que utilice una ubicación diferente para sus datos de salida (ya sea una carpeta o un bucket de Amazon S3 diferente). Utilice la siguiente sintaxis para las ubicaciones de entrada y salida: s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json y s3://amzn-s3-demo-bucket/<output folder name>/.

El ejemplo incluye hiperparámetros de itemExplorationConfig opcionales específicos de la receta User-Personalization: explorationWeight y explorationItemAgeCutOff. Si lo desea, incluya los valores explorationWeight y explorationItemAgeCutOff para configurar la exploración. Para obtener más información, consulte Receta User-Personalization.

aws personalize create-batch-inference-job \ --job-name Batch job name \ --solution-version-arn Solution version ARN \ --filter-arn Filter ARN \ --job-input s3DataSource={path=s3://S3 input path} \ --job-output s3DataDestination={path=s3://S3 output path} \ --role-arn IAM service role ARN \ --batch-inference-job-config "{\"itemExplorationConfig\":{\"explorationWeight\":\"0.3\",\"explorationItemAgeCutOff\":\"30\"}}"

Creación de un trabajo de inferencia por lotes que genere temas

Si quiere generar temas para elementos similares, debe usar la receta Similar-Items y el conjunto de datos de elementos debe tener un campo textual y una columna de datos de nombre de elemento. Para obtener más información sobre las recomendaciones con temas, consulte Recomendaciones por lotes con temas del Generador de contenidos.

El siguiente código crea un trabajo de inferencia por lotes que genera recomendaciones con temas. Deje el valor batch-inference-job-mode establecido en THEME_GENERATION. Sustituya COLUMN_NAME por el nombre de la columna que almacena los datos de nombre de elemento.

aws personalize create-batch-inference-job \ --job-name Themed batch job name \ --solution-version-arn Solution version ARN \ --filter-arn Filter ARN \ --job-input s3DataSource={path=s3://S3 input path} \ --job-output s3DataDestination={path=s3://S3 output path} \ --role-arn IAM service role ARN \ --batch-inference-job-mode THEME_GENERATION \ --theme-generation-config "{\"fieldsForThemeGeneration\": {\"itemName\":\"COLUMN_NAME\"}}"

Creación de un trabajo de inferencia por lotes (AWS SDKs)

Cuando haya completado Preparación de los datos de entrada para las recomendaciones por lotes, estará listo para crear un trabajo de inferencia por lotes con la operación CreateBatchInferenceJob.

Creación de un trabajo de inferencia por lotes

Puede usar el siguiente código para crear un trabajo de inferencia por lotes. Especifique un nombre de trabajo, el nombre del recurso de Amazon (ARN) de la versión de la solución y el rol ARN de IAM servicio que creó para Amazon Personalize durante la configuración. Este rol debe tener acceso de lectura y escritura a los buckets de entrada y salida de Amazon S3.

Recomendamos que utilice una ubicación diferente para sus datos de salida (ya sea una carpeta o un bucket de Amazon S3 diferente). Utilice la siguiente sintaxis para las ubicaciones de entrada y salida: s3:/amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json y s3://amzn-s3-demo-bucket/<output folder name>/.

Para numResults, especifica el número de elementos que desea que Amazon Personalize prediga para cada línea de datos de entrada. Si lo desea, proporcione un filtro ARN para filtrar las recomendaciones. Si el filtro usa parámetros de marcador de posición, asegúrese de que los valores de los parámetros estén incluidos en la entradaJSON. Para obtener más información, consulte Filtrado de las recomendaciones por lotes y segmentos de usuarios (recursos personalizados).

SDK for Python (Boto3)

El ejemplo incluye hiperparámetros de itemExplorationConfig opcionales específicos de la receta User-Personalization: explorationWeight y explorationItemAgeCutOff. Si lo desea, incluya los valores explorationWeight y explorationItemAgeCutOff para configurar la exploración. Para obtener más información, consulte Receta User-Personalization.

import boto3 personalize_rec = boto3.client(service_name='personalize') personalize_rec.create_batch_inference_job ( solutionVersionArn = "Solution version ARN", jobName = "Batch job name", roleArn = "IAM service role ARN", filterArn = "Filter ARN", batchInferenceJobConfig = { # optional USER_PERSONALIZATION recipe hyperparameters "itemExplorationConfig": { "explorationWeight": "0.3", "explorationItemAgeCutOff": "30" } }, jobInput = {"s3DataSource": {"path": "s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3:/amzn-s3-demo-bucket/<output folder name>/"}} )
SDK for Java 2.x

El ejemplo incluye hiperparámetros de itemExplorationConfig opcionales específicos de la receta User-Personalization: explorationWeight y explorationItemAgeCutOff. Si lo desea, incluya los valores explorationWeight y explorationItemAgeCutOff para configurar la exploración. Para obtener más información, consulte Receta User-Personalization.

public static String createPersonalizeBatchInferenceJob(PersonalizeClient personalizeClient, String solutionVersionArn, String jobName, String filterArn, String s3InputDataSourcePath, String s3DataDestinationPath, String roleArn, String explorationWeight, String explorationItemAgeCutOff) { long waitInMilliseconds = 60 * 1000; String status; String batchInferenceJobArn; try { // Set up data input and output parameters. S3DataConfig inputSource = S3DataConfig.builder() .path(s3InputDataSourcePath) .build(); S3DataConfig outputDestination = S3DataConfig.builder() .path(s3DataDestinationPath) .build(); BatchInferenceJobInput jobInput = BatchInferenceJobInput.builder() .s3DataSource(inputSource) .build(); BatchInferenceJobOutput jobOutputLocation = BatchInferenceJobOutput.builder() .s3DataDestination(outputDestination) .build(); // Optional code to build the User-Personalization specific item exploration config. HashMap<String, String> explorationConfig = new HashMap<>(); explorationConfig.put("explorationWeight", explorationWeight); explorationConfig.put("explorationItemAgeCutOff", explorationItemAgeCutOff); BatchInferenceJobConfig jobConfig = BatchInferenceJobConfig.builder() .itemExplorationConfig(explorationConfig) .build(); // End optional User-Personalization recipe specific code. CreateBatchInferenceJobRequest createBatchInferenceJobRequest = CreateBatchInferenceJobRequest.builder() .solutionVersionArn(solutionVersionArn) .jobInput(jobInput) .jobOutput(jobOutputLocation) .jobName(jobName) .filterArn(filterArn) .roleArn(roleArn) .batchInferenceJobConfig(jobConfig) // Optional .build(); batchInferenceJobArn = personalizeClient.createBatchInferenceJob(createBatchInferenceJobRequest) .batchInferenceJobArn(); DescribeBatchInferenceJobRequest describeBatchInferenceJobRequest = DescribeBatchInferenceJobRequest.builder() .batchInferenceJobArn(batchInferenceJobArn) .build(); long maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60; // wait until the batch inference job is complete. while (Instant.now().getEpochSecond() < maxTime) { BatchInferenceJob batchInferenceJob = personalizeClient .describeBatchInferenceJob(describeBatchInferenceJobRequest) .batchInferenceJob(); status = batchInferenceJob.status(); System.out.println("Batch inference job status: " + status); if (status.equals("ACTIVE") || status.equals("CREATE FAILED")) { break; } try { Thread.sleep(waitInMilliseconds); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } return batchInferenceJobArn; } catch (PersonalizeException e) { System.out.println(e.awsErrorDetails().errorMessage()); } return ""; }
SDK for JavaScript v3
// Get service clients module and commands using ES6 syntax. import { CreateBatchInferenceJobCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the batch inference job's parameters. export const createBatchInferenceJobParam = { jobName: 'JOB_NAME', jobInput: { /* required */ s3DataSource: { /* required */ path: 'INPUT_PATH', /* required */ // kmsKeyArn: 'INPUT_KMS_KEY_ARN' /* optional */' } }, jobOutput: { /* required */ s3DataDestination: { /* required */ path: 'OUTPUT_PATH', /* required */ // kmsKeyArn: 'OUTPUT_KMS_KEY_ARN' /* optional */' } }, roleArn: 'ROLE_ARN', /* required */ solutionVersionArn: 'SOLUTION_VERSION_ARN', /* required */ numResults: 20 /* optional integer*/ }; export const run = async () => { try { const response = await personalizeClient.send(new CreateBatchInferenceJobCommand(createBatchInferenceJobParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();

El procesamiento del trabajo por lotes puede tardar un tiempo en completarse. Puede comprobar el estado de un trabajo llamando a DescribeBatchInferenceJob y pasando un batchRecommendationsJobArn como el parámetro de entrada. También puede enumerar todos los trabajos de inferencia por lotes de Amazon Personalize de su AWS entorno llamando al teléfonoListBatchInferenceJobs.

Creación de un trabajo de inferencia por lotes que genere temas

Si quiere generar temas para elementos similares, debe usar la receta Similar-Items y el conjunto de datos de elementos debe tener un campo textual y una columna de datos de nombre de elemento. Para obtener más información sobre las recomendaciones con temas, consulte Recomendaciones por lotes con temas del Generador de contenidos.

El siguiente código crea un trabajo de inferencia por lotes que genera recomendaciones con temas. Deje el valor batchInferenceJobMode establecido en "THEME_GENERATION". Sustituya COLUMNN_NAME por el nombre de la columna que almacena los datos de nombre de elemento.

import boto3 personalize_rec = boto3.client(service_name='personalize') personalize_rec.create_batch_inference_job ( solutionVersionArn = "Solution version ARN", jobName = "Batch job name", roleArn = "IAM service role ARN", filterArn = "Filter ARN", batchInferenceJobMode = "THEME_GENERATION", themeGenerationConfig = { "fieldsForThemeGeneration": { "itemName": "COLUMN_NAME" } }, jobInput = {"s3DataSource": {"path": "s3://amzn-s3-demo-bucket/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3://amzn-s3-demo-bucket/<output folder name>/"}} )