Crear un trabajo de inferencia por lotes (AWS SDK) - 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.

Crear un trabajo de inferencia por lotes (AWS SDK)

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 de recurso de Amazon (ARN) de la versión de la solución y el ARN del rol de servicio de IAM 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://<name of your S3 bucket>/<folder name>/<input JSON file name>.json y s3://<name of your S3 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 ARN de filtro para filtrar las recomendaciones. 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 el JSON de entrada. Para 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://<name of your S3 bucket>/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3://<name of your S3 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://<name of your S3 bucket>/<folder name>/<input JSON file name>.json"}}, jobOutput = {"s3DataDestination": {"path": "s3://<name of your S3 bucket>/<output folder name>/"}} )