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

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

Repositorio de código: personalize-pet-recommendations

Entorno: PoC o piloto

Tecnologías: aprendizaje automático e inteligencia artificial; nativas de la nube; infraestructura DevOps; sin servidor

Carga de trabajo: código abierto

Servicios de AWS: AWS CloudFormation; Amazon Kinesis Data Firehose; AWS Lambda; Amazon Personalize; AWS Step Functions

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

  • CDK de AWS 2.23.0 o posterior

  • AWS SDK: 2.7.27 o posterior

Arquitectura

Pila de tecnología

  • Amazon Data Firehose

  • Amazon Kinesis Data Streams

  • Amazon Personalize

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Cloud Development Kit (AWS CDK)

  • Interfaz de la línea de comandos de AWS (AWS CLI)

  • AWS Lambda

  • 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 de Lambda procesa los registros de flujo de datos de Kinesis y realiza una llamada a la API 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

Herramientas de AWS

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

  • La interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.

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

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

  • AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni 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.

  • AWS Step Functions es un servicio de orquestación sin servidor que le permite combinar funciones de Lambda y otros servicios de AWS para crear aplicaciones esenciales desde el punto de vista empresarial.

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 GitHub Animal Recommender. Puede usar la CloudFormation plantilla de AWS 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 el shell de la CLI de AWS, configure las siguientes variables de entorno:

    • export ACCOUNT_ID=123456789

    • export CDK_DEPLOY_REGION=us-east-1

    • export CDK_ENVIRONMENT=dev

  3. En el archivo config/{env}.yml, actualice vpcId 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 bucket de S3 y una clave de AWS Key Management Service (AWS KMS) y, a continuación, agrega los datos de base 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 el userId todos los identificadores de los elementos que se van 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 de Lambda vuelve a clasificar estos artículos y, a continuación, devuelve una lista ordenada que incluye los ID de los artículos 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.