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
Una AWScuenta
activa con un AWSCloud Development Kit () AWS CDK AWSInterfaz de línea de comandos (AWSCLI) con credenciales configuradas
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](images/pattern-img/42eb193b-2347-408a-8b25-46beeb3b29ca/images/786dbd56-7d7f-41bb-90f6-d4485d73fe15.png)
En el diagrama, se muestra el siguiente flujo de trabajo:
Kinesis Data Streams ingiere datos de usuarios en tiempo real (por ejemplo, eventos como visitas de mascotas) para que Lambda y Firehose los procesen.
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.
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.
El equipo de estados actualiza las campañas de Amazon Personalize para usar la nueva versión de la solución.
Lambda cambia el orden de la lista de artículos recomendados mediante la campaña Amazon Personalize de reclasificación.
Lambda devuelve la lista de artículos recomendados mediante la campaña de recomendaciones de Amazon Personalize.
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
Código
El código de este patrón está disponible en el repositorio Animal Recommender. GitHub
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
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree un entorno Python aislado. | Configuración de Mac/Linux
Configuración en Windows Para crear manualmente un entorno virtual, ejecute el comando | DevOps ingeniero |
Sintetiza la CloudFormation plantilla. |
Nota: En el paso 2, | DevOps ingeniero |
Implemente recursos y cree infraestructura. | Desde su terminal, ejecute el comando 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 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.