Genere recomendaciones personalizadas y reclasificadas con Amazon Personalize - Recomendaciones de AWS

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.

Genere recomendaciones personalizadas y reclasificadas con Amazon Personalize

Creada por Mason Cahill (AWS), Matthew Chasse () y Tayo Olajide (AWS) AWS

Repositorio de código: personalize-pet-recommendations

Entorno: PoC o piloto

Tecnologías: aprendizaje automático e inteligencia artificial CloudNative DevOps; infraestructura; sin servidor

Carga de trabajo: código abierto

AWSservicios: Amazon Data Firehose AWS CloudFormation; AWS Lambda; Amazon Personalize; Step Functions AWS

Resumen

Este patrón le muestra cómo usar Amazon Personalize para generar recomendaciones personalizadas, incluidas las recomendaciones reclasificadas, para sus usuarios en función de la ingesta de datos de interacción de los usuarios en tiempo real por parte de esos usuarios. El escenario de ejemplo utilizado en este patrón se basa en un sitio web de adopción de mascotas que genera recomendaciones para sus usuarios en función de sus interacciones (por ejemplo, qué mascotas visita un usuario). Siguiendo el escenario de ejemplo, aprenderá a utilizar Amazon Kinesis Data Streams para ingerir datos de interacción, AWS Lambda para generar recomendaciones y reordenar las recomendaciones, y Amazon Data Firehose para almacenar los datos en un bucket de Amazon Simple Storage Service (Amazon S3). También aprenderá a usar AWS Step Functions para crear una máquina de estados que administre la versión de la solución (es decir, un modelo entrenado) que genera sus recomendaciones.

Requisitos previos y limitaciones

Requisitos previos 

Versiones de producto

  • Python 3.9

  • AWSCDK2.23.0 o posterior

  • AWSCLI2.7.27 o posterior

Arquitectura

Pila de tecnología

  • Amazon Data Firehose

  • Amazon Kinesis Data Streams

  • Amazon Personalize

  • Amazon Simple Storage Service (Amazon S3)

  • AWSKit Cloud Development (AWSCDK)

  • AWSInterfaz de línea de comandos (AWSCLI)

  • AWSLambda

  • AWS Step Functions

Arquitectura de destino

El siguiente diagrama ilustra una canalización para incorporar datos en tiempo real a Amazon Personalize. Luego, la canalización utiliza esos datos para generar recomendaciones personalizadas y reclasificadas para los usuarios.

Arquitectura de ingesta de datos para Amazon Personalize

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Kinesis Data Streams ingiere datos de usuarios en tiempo real (por ejemplo, eventos como visitas de mascotas) para que Lambda y Firehose los procesen.

  2. Una función Lambda procesa los registros de Kinesis Data Streams y realiza una API llamada para añadir la interacción del usuario en el registro a un rastreador de eventos de Amazon Personalize.

  3. Una regla basada en el tiempo invoca un equipo de estados de Step Functions y genera nuevas versiones de soluciones para los modelos de recomendación y reclasificación mediante los eventos del rastreador de eventos de Amazon Personalize.

  4. El equipo de estados actualiza las campañas de Amazon Personalize para usar la nueva versión de la solución.

  5. Lambda cambia el orden de la lista de artículos recomendados mediante la campaña Amazon Personalize de reclasificación.

  6. Lambda devuelve la lista de artículos recomendados mediante la campaña de recomendaciones de Amazon Personalize.

  7. Firehose guarda los eventos en un bucket de S3 donde se puede acceder a ellos como datos históricos.

Herramientas

AWSherramientas

  • AWSCloud Development Kit (AWSCDK) es un marco de desarrollo de software que le ayuda a definir y aprovisionar AWS la infraestructura de nube en código.

  • AWSLa interfaz de línea de comandos (AWSCLI) es una herramienta de código abierto que te ayuda a interactuar con AWS los servicios mediante comandos en tu consola de línea de comandos.

  • Amazon Data Firehose le ayuda a entregar datos de streaming en tiempo real a otros AWS servicios, puntos de conexión personalizados HTTP y puntos de conexión propiedad de HTTP proveedores de servicios externos compatibles.

  • Amazon Kinesis Data Streams le ayuda a recopilar y procesar grandes secuencias de registros de datos en tiempo real.

  • AWSLambda es un servicio informático que le ayuda a ejecutar código sin necesidad de aprovisionar o administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

  • Amazon Personalize es un servicio de machine learning (ML) totalmente gestionado que le ayuda a generar recomendaciones de artículos para sus usuarios en función de sus datos.

  • AWSStep Functions es un servicio de organización sin servidor que le ayuda a combinar las funciones de Lambda y otros AWS servicios para crear aplicaciones críticas para la empresa.

Otras herramientas

  • pytest es un marco de Python para escribir pruebas pequeñas y legibles.

  • Python es un lenguaje de programación informático de uso general.

Código

El código de este patrón está disponible en el repositorio Animal Recommender. GitHub Puede usar la AWS CloudFormation plantilla de este repositorio para implementar los recursos de la solución de ejemplo.

Nota: Las versiones de la solución Amazon Personalize, el rastreador de eventos y las campañas están respaldadas por recursos personalizados (dentro de la infraestructura) que amplían CloudFormation los recursos nativos.

Epics

TareaDescripciónHabilidades requeridas

Cree un entorno Python aislado.

Configuración de Mac/Linux

  1. Para crear manualmente un entorno virtual, ejecute el comando $ python3 -m venv .venv desde su terminal.

  2. Una vez finalizado el proceso de inicio, ejecute el comando $ source .venv/bin/activate para activar el entorno virtual.

Configuración en Windows

Para crear manualmente un entorno virtual, ejecute el comando % .venv\Scripts\activate.bat desde su terminal.

DevOps ingeniero

Sintetiza la CloudFormation plantilla.

  1. Ejecute el comando $ pip install -r requirements.txt desde su terminal para asegurarse de que dispone de todas las dependencias necesarias.

  2. En AWSCLI, defina las siguientes variables de entorno:

    • export ACCOUNT_ID=123456789

    • export CDK_DEPLOY_REGION=us-east-1

    • export CDK_ENVIRONMENT=dev

  3. En el config/{env}.yml archivo, vpcId actualícelo para que coincida con su ID de nube privada virtual (VPC).

  4. Para sintetizar la CloudFormation plantilla de este código, ejecute el $ cdk synth comando.

Nota: En el paso 2, CDK_ENVIRONMENT hace referencia al archivo config/{env}.yml.

DevOps ingeniero

Implemente recursos y cree infraestructura.

Desde su terminal, ejecute el comando ./deploy.sh para implementar todos los recursos.

Este script instala las dependencias requeridas de Python. Un script de Python crea un depósito de S3 y una AWS clave del Servicio de administración de claves (AWSKMS) y, a continuación, agrega los datos iniciales para las creaciones iniciales del modelo. Por último, el script se ejecuta cdk deploy para crear la infraestructura restante.

Nota: El entrenamiento inicial del modelo se lleva a cabo durante la creación de la pila. La pila puede tardar hasta dos horas en terminar de crearse.

DevOps ingeniero

Recursos relacionados

Información adicional

Ejemplos de cargas útiles y respuestas

Función de Lambda de recomendación

Para recuperar las recomendaciones, envíe una solicitud a la función de Lambda de recomendaciones con una carga útil en el siguiente formato:

{ "userId": "3578196281679609099", "limit": 6 }

El siguiente ejemplo de respuesta contiene una lista de grupos de animales:

[{"id": "1-domestic short hair-1-1"}, {"id": "1-domestic short hair-3-3"}, {"id": "1-domestic short hair-3-2"}, {"id": "1-domestic short hair-1-2"}, {"id": "1-domestic short hair-3-1"}, {"id": "2-beagle-3-3"},

Si omite el campo userId, la función devuelve recomendaciones generales.

Reordenación de la función de Lambda

Para utilizar la reclasificación, envíe una solicitud a la función de Lambda de reclasificación. La carga útil contiene todos userId los elementos que se van IDs a reclasificar y sus metadatos. Los siguientes datos de ejemplo utilizan las clases de Oxford Pets para animal_species_id (1=gato, 2=perro) y los números enteros del 1 al 5 para animal_age_id y animal_size_id:

{ "userId":"12345", "itemMetadataList":[ { "itemId":"1", "animalMetadata":{ "animal_species_id":"2", "animal_primary_breed_id":"Saint_Bernard", "animal_size_id":"3", "animal_age_id":"2" } }, { "itemId":"2", "animalMetadata":{ "animal_species_id":"1", "animal_primary_breed_id":"Egyptian_Mau", "animal_size_id":"1", "animal_age_id":"1" } }, { "itemId":"3", "animalMetadata":{ "animal_species_id":"2", "animal_primary_breed_id":"Saint_Bernard", "animal_size_id":"3", "animal_age_id":"2" } } ] }

La función Lambda vuelve a clasificar estos artículos y, a continuación, devuelve una lista ordenada que incluye el artículo IDs y la respuesta directa de Amazon Personalize. Esta es una lista ordenada de los grupos de animales en los que se encuentran los artículos y su puntuación. Amazon Personalize utiliza recetas de Personalización por usuario y Clasificación personalizada para incluir una puntuación para cada artículo en las recomendaciones. Estas puntuaciones representan la certeza relativa que tiene Amazon Personalize respecto a qué elemento va a seleccionar el usuario a continuación. Las puntuaciones más altas representan una mayor certeza.

{ "ranking":[ "1", "3", "2" ], "personalizeResponse":{ "ResponseMetadata":{ "RequestId":"a2ec0417-9dcd-4986-8341-a3b3d26cd694", "HTTPStatusCode":200, "HTTPHeaders":{ "date":"Thu, 16 Jun 2022 22:23:33 GMT", "content-type":"application/json", "content-length":"243", "connection":"keep-alive", "x-amzn-requestid":"a2ec0417-9dcd-4986-8341-a3b3d26cd694" }, "RetryAttempts":0 }, "personalizedRanking":[ { "itemId":"2-Saint_Bernard-3-2", "score":0.8947961 }, { "itemId":"1-Siamese-1-1", "score":0.105204 } ], "recommendationId":"RID-d97c7a87-bd4e-47b5-a89b-ac1d19386aec" } }

Carga de Amazon Kinesis

La carga que se va a enviar a Amazon Kinesis tiene el formato siguiente:

{ "Partitionkey": "randomstring", "Data": { "userId": "12345", "sessionId": "sessionId4545454", "eventType": "DetailView", "animalMetadata": { "animal_species_id": "1", "animal_primary_breed_id": "Russian_Blue", "animal_size_id": "1", "animal_age_id": "2" }, "animal_id": "98765" } }

Nota: El campo userId se elimina para un usuario no autenticado.