Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 16, 2023 02:56 pm GMT

Cmo crear un modelo de recomendacin basado en machine learning.

Dev.to Linkedin GitHub Twitter Instagram Youtube

github: https://github.com/aws-samples/aws-recomendador-anime/tree/main/recomendador-de-anime

Recomendaciones personalizadas de anime

Blog original --> link

Conoc los animes cuando estaba en la universidad, entre amigos nos recomendbamos los ms populares y nuevos. Al terminar la universidad tambin acabaron los momentos para hablar de animes, qued desactualizada y dej de verlos.

Recientemente descubr un anime que me encanto, quera ver otro similar y a falta de los momentos universitarios record los modelos de recomendacin basados en Machine Learning (ML) utilizados en muchas aplicaciones, donde mejoran resultados entregando predicciones en forma de sugerencias personalizadas a cada usuario y, pueden disminuir los costos de promocin ofreciendo recomendaciones con gran probabilidad de aceptacin.

Algunos ejemplos de recomendaciones personalizadas son:

  • Las recomendaciones de series o pelculas en las plataformas de Video a Demanda (Video On Demand = VoD) son basadas en el historial de contenido.
  • Al buscar productos determinados en un comercio electrnico, por ejemplo Amazon.com entrega sugerencias basada en el historial de lo que se haya buscado o comprado.

Este es el primer episodio de una serie de artculos llamados Recomendaciones personalizadas de anime donde vamos a construir una aplicacin web capaz de entregar una experiencia personalizada de recomendaciones de animes nuevos de preferencia del usuario y, a medida que la utilice con mayor frecuencia, va a conocer sus gustos casi a la perfeccin.

Esta serie consistir en los siguientes episodios:

  1. Cmo crear un modelo de recomendaciones personalizadas (este episodio)
  2. Cmo desplegar el modelo de recomendacin de anime en una API REST.
  3. Cmo crear una aplicacin web para recomendaciones personalizadas de anime en tiempo real.
  4. Incorporar un pool de usuarios a tu aplicacin web para recomendaciones personalizadas.
  5. Analiza el comportamiento de tu aplicacin web para recomendaciones personalizadas en tiempo real con un dashboard.

Comencemos!

Crear un proyecto para generar recomendaciones personalizadas normalmente tiene un alto nivel de complejidad por los skills y tecnologas involucradas. En este articulo utilizaremos Amazon Personalize para convertirlo en algo sencillo sin necesidad de conocimientos avanzados de ML.

Amazon Personalize:

Es un servicio basado en la misma tecnologa de ML utilizada por Amazon.com, permite entrenar modelos de personalizacin y obtener recomendaciones relevantes, utiliza tcnicas de Deep Learning y no requiere tener experiencia en ML

Personalize brinda un servicio de motor de recomendaciones entrenado con tus propios datos, listo para entrenar, disminuyendo la carga de un proyecto de ML completo y con resultados ms rpidos (comparados con un proyecto tradicional de Machine Learning). Adems, ofrece una capa gratuita .

Cmo funciona Amazon Personalize?

Image description
Fig. 1 Funcionamiento Amazon Personalize.

  1. Debes proporcionar datos sobre usuarios e tems para realizar la personalizacin.Los datos que utilizamos para modelar en Personalize son de tres tipos:

a. Interactions DataSet(obligatorio): consiste en las interacciones de los usuarios con los tems, por ejemplo, clics, compras, visualizaciones, calificaciones.
b. Item DataSet (opcional): informacin de los tems, tales como categora o gnero.
c. Users DataSet (opcional): datos de los usuarios como edad o gnero.

  1. Detrs de cmaras, Amazon Personalize automticamente:
    a. Inspecciona los datos.
    b. Identifica las variables ms significativas.
    c. Selecciona los algoritmos adecuados, entrena y optimiza modelos candidatos. Seleccionando el modelo con mejor desempeo.
    d. Almacena el modelo entrenado.

  2. Despus del entrenamiento, Amazon Personalize permite desplegar el modelo entrenado para hacer inferencias a travs de una API.

Image description
Fig. 2 Recursos de Amazon Personalize.

Y, ahora me detengo a explicarte los recursos que utiliza Amazon Personalize y como se relacionan con los trminos de Machine Learning (Fig.2)

Recipe (Receta): **Distintos casos de uso para recomendacin. Cada uno aprende algo distinto de los datasets, por ejemplo, recomendaciones de tems similares o recomendaciones para usuarios. El equivalente a un algoritmo de aprendizaje de Machine Learning.
**Solution (Solucin):
El modelo que utilizaremos para realizar predicciones.
Solution Version (Versin de Solucin): El resultado de la solucin despus del entrenamiento del modelo. De acuerdo a los conceptos de ML, es el modelo que ya aprendi de los datos y puede entregar recomendaciones.
Campaign (Campaa): Es como Amazon Personalize llama a un modelo en lnea que entrega recomendaciones en una modalidad request-response, como una API.

El proyecto : Recomendaciones personalizadas de Anime

Este primer episodio est basado en Personalize POC Guide, utilizaremos el servicio de Amazon Personalize para entrenar un modelo de recomendaciones con los datos de Anime Recommendation Database 2020 de kaggle, utilizando las interacciones que han tenido los usuarios con los animes y, otros datos disponibles como Genero y Calificacin.

Pre-requisitos

Manos a la obra

Paso 1: Crear una instancia de Notebook de Amazon SageMaker

Amazon SageMaker Notebook es una instancia de Amazon Elastic Compute Cloud (Amazon EC2) completamente administrada con los paquetes necesarios para crear un Notebooks de Jupyter

Para crearlo sigue el Paso 1 y 2 del tutorial Crear, entrenar e implementar un modelo de Machine Learning, en el Paso 2 selecciona la instancia ml.t3.medium.

Recuerda detener el notebook de SageMaker cuando no lo estes usando. No perders informacin, liberas el recurso sin gastar innecesariamente.

Paso 2: Agrega la poltica al AWS Identity and Access Management (IAM) al IAM Role de Amazon SageMaker para interactuar con Amazon Personalize

Los permisos al notebook de SageMaker permitirn crear el rol IAM para interactuar con Amazon Personalize y Amazon Simple Storage Service (S3).

  1. En el lado izquierdo del panel de la consola de SageMaker, selecciona Bloc de notas -> Instancias de bloc de notas.2.Selecciona la instancia creada en el paso anterior y en Permisos y cifrado selecciona el hyperlink del ARN del rol de IAM (ver Fig.3), se abrir una nueva pgina de IAM.

Image description
Fig. 3 ARN del rol de IAM hyperlink.

  1. En la nueva pgina, selecciona Aadir permisos y luego Crear poltica insertada.
  2. Selecciona JSON, copia y pega el texto a continuacin y sustituye TU-ID-CUENTA por el ID de tu cuenta:
{    "Version": "2012-10-17",    "Statement": [        {            "Sid": "VisualEditor0",            "Effect": "Allow",            "Action": [                "iam:CreateRole",                "iam:AttachRolePolicy"            ],            "Resource": "arn:aws:iam::TU-ID-CUENTA:role/*"        }    ]}
  1. Selecciona Revisar la poltica, escribe el Nombre IAM-W-ROLE, y selecciona Crear una poltica.
  2. Selecciona nuevamente Aadir permisos y esta vez Asociar polticas.
  3. En el buscador escribe AmazonPersonalizeFullAccess, presiona la tecla Enter y selecciona el cuadrado de la poltica.
  4. Quita el filtro anterior, escribe en el buscador AmazonS3FullAccess, presiona la tecla Enter y selecciona el cuadrado de la poltica.
  5. Selecciona Asociar polticas.
  6. Al finalizar deberas ver 5 polticas en el IAM rol (Fig. 4).

Image description
Fig. 4 Polticas en IAM rol.

Paso 3: Clonar el repositorio de GitHub y descargar el dataset

Abre JupyterLab en el jupyter notebook creado en el Paso 1, luego accede a la terminal y copia lo siguiente:

cd SageMaker/git clone https://github.com/aws-samples/aws-recomendador-anime_

Image description
Fig. 5 Clonacin de repositorio exitosa.

Una vez listo (Fig. 5), podrs acceder al cdigo de este proyecto (Fig. 6).

Para descargar los datos de kaggle necesitas un API Token, genralo siguiendo estos pasos:

  1. Crear una cuenta en https://www.kaggle.com. Es una buena fuente de datasets para seguir experimentando en futuros proyectos.
  2. Ve al men de la cuenta: https://www.kaggle.com//account
  3. Descarga el API Token (json) en Create New API Token (Fig. 7).

Image description
Fig. 7 Descargar API Token de kaggle

Sube el archivo kaggle.json a la carpeta /home/ec2-user/.kaggle del notebook de SageMaker:

  1. Arrastra el archivo a la ventana del notebook de SageMaker y djalo en la carpeta recomendador-de-anime.

Image description
Fig. 8 kaggle.json en el notebook de SageMaker

  1. Abre el terminal y ejecuta las siguiente lneas:
mv aws-recomendador-anime/recomendador-de-anime/kaggle.json  /home/ec2-user/.kagglechmod 600 /home/ec2-user/.kaggle/kaggle.json

Luego, accede a la carpeta aws-recomendador-anime -> recomendador-de-anime y abre el notebook 01_Descarga_Dataset.ipynb y ejecuta los comandos para descargar el dataset en la carpeta anime-data (Fig. 9):

!pip3 install kaggledata_dir = "anime-data"dataset_name =  "hernan4444/anime-recommendation-database-2020"!mkdir $data_dir!kaggle datasets download -p {data_dir}/ --unzip {dataset_name}

Image description
Fig.9 Dataset anime-recommendation-database-2020

Paso 4: Preparar el dataset y crear un DatasetGroup

Emplea el notebook 02_Exploracin_Prepariacin.ipynb.

En la preparacin se crea la columna TIMESTAMP, el momento de la interaccin, un campo necesario para el dataset interaction.

Luego se crea el Dataset Group, una agrupacin lgica de todos los recursos del proyecto de Personalize (dataset, modelos, endpoints).Es posible crear varios Dataset Groups, uno para cada aplicacin. Por ejemplo, un Dataset Groups para una aplicacin de recomendaciones de vdeos y otro para una que recomienda audiolibros.

El Dataset Group se crea con estos comandos:

create_dataset_group_response = personalize.create_dataset_group(    name = "personalize-anime")dataset_group_arn = create_dataset_group_response['datasetGroupArn']

El resultado en la consola:

Image description
Fig.10 DataSet groups en la consola

Paso 5: Creacin de los conjuntos de datos y el esquema

El esquema en Personalize permite analizar la estructura, define las columnas y el tipo de dato.

Para el recomendador de anime utilizaremos dos conjuntos de datos:

  • Interaction DataSet
  • Items DataSet

En este proyecto no vamos a emplear el User DataSet.

Interaction DataSet

Corresponde a los datos del archivo interactions.csv, creado en el paso anterior, con las columnas:

  • USER_ID (ID del usuario Requerido)
  • ITEM_ID (ID del anime Requerido)
  • TIMESTAMP (cuando ocurri esta evaluacin Requerido)
  • EVENT_VALUE (valor obtenido por el anime Opcional).
  • EVENT_TYPE (tipo del valor, en este caso rating Opcional)

Image description
Fig.11 Interaction Dataset

El esquema se crea con los comandos:

interactions_schema = schema = {    "type": "record",    "name": "Interactions",    "namespace": "com.amazonaws.personalize.schema",    "fields": [        {            "name": "USER_ID",            "type": "string"        },        {            "name": "ITEM_ID",            "type": "string"        },        {            "name": "TIMESTAMP",            "type": "long"        },        {            "name": "EVENT_VALUE",            "type": "float"        },        {            "name": "EVENT_TYPE",            "type": "string"        },    ],    "version": "1.0"}create_schema_response = personalize.create_schema(    name = "personalize-anime-interactions1",    schema = json.dumps(interactions_schema))

Items DataSet

Corresponde a los datos del archivo item-meta.csv con las columnas:

  • ITEM_ID (ID del anime Requerido)
  • STUDIOS (estudio que lo creo Opcional)
  • YEAR (ao de su lanzamiento -Opcional)
  • GENRE (gneros Opcional)

Image description
Fig.12 Items DataSets

En la creacin del esquema los atributos adicionales deben tener categorical = True para que sean tomados en cuenta en el entrenamiento del modelo, estas caractersticas adicionales las podemos usar para crear filtros (ya hablaremos de los filtros).

El esquema se define con los comandos:

itemmetadata_schema = {    "type": "record",    "name": "Items",    "namespace": "com.amazonaws.personalize.schema",    "fields": [        {            "name": "ITEM_ID",            "type": "string"        },        {            "name": "STUDIOS",            "type": "string",            "categorical": True        },        {            "name": "YEAR",            "type": "int",        },        {            "name": "GENRE",            "type": "string",            "categorical": True        },    ],    "version": "1.0"}create_schema_response = personalize.create_schema(    name = "personalize-anime-item",    schema = json.dumps(itemmetadata_schema))

En la consola:

Image description
Fig.13 DataSets en la consola

Paso 6: importacin de los datos para uso de Amazon Personalize.

Previa a la importacin, los datos deben estar en el formato correcto (Formatear los datos) y deben estar en un bucket de Amazon S3 (Cargar a un bucket de S3).

La importacin de los datos de forma masiva se hace creando un import jobs:

create_dataset_import_job_response = personalize.create_dataset_import_job(    jobName = "personalize-anime-item-import",    datasetArn = items_dataset_arn,    dataSource = {        "dataLocation": "s3://{}/{}".format(bucket_name, itemmetadata_filename)    },    roleArn = role_arn)dataset_import_job_arn = create_dataset_import_job_response['datasetImportJobArn']

Paso 7: Creacin de la solucin: modelo de recomendacin de anime

Image description
Fig.14 La solucin: modelo de recomendacin de anime.

La solucin (Fig. 14) la creamos en el notebook 03_Creacin_Soluciones.ipynb.

Pasos a seguir:

  1. Seleccionar los recipes para las soluciones:Personalize proporciona 3 tipos de recipes:

User personalization: recomendaciones para un usuario (USER_ID) especfico.

Personalized Ranking: reordenar un listado de tems (ITEM_ID) de acuerdo a las recomendaciones de un usuario (USER_ID) especfico.

Similar items: Items Similares a un item (ITEM_ID) especfico.

Las soluciones se crean con los comandos:

user_personalization_create_solution_response = personalize.create_solution(name = "personalize-anime-userpersonalization",datasetGroupArn = dataset_group_arn,recipeArn = user_personalization_recipe_arn)user_personalization_solution_arn = user_personalization_create_solution_response['solutionArn']

Se repite para cada solucin.

Resultado en la consola:

Image description
Fig.15 Soluciones en la consola

  1. Creacin de versin de la solucin (entrenar un modelo de aprendizaje automtico):

Creamos una versin de la solucin para cada recipe con los siguientes comandos:

user_personalization_create_solution_version_response = personalize.create_solution_version(    solutionArn = user_personalization_solution_arn)user_personalization_solution_version_arn = user_personalization_create_solution_version_response['solutionVersionArn']

Puede tardar ms de una hora, el cdigo tiene un loop donde informa el estado cada 60 segundos.

Finaliza con el siguiente resultado:

Image description
Fig.16 Construccin exitosa de la versin del modelo.

Nota: La solucin admite HPO y AutoML y el entrenamiento admite training_mode.

Image description
Fig.16 Construccin exitosa de la versin del modelo en la consola.

  1. Evaluar la versin de la solucin:

Para evaluar que versin es la ms adecuada Personalize separa el dataset en entrenamiento y pruebas.

Las mtricas las obtienes para cada recipe con estos comandos:

user_personalization_solution_metrics_response = personalize.get_solution_metrics(    solutionVersionArn = userpersonalization_solution_version_arn)['metrics']

Al finalizar el notebook 03_Creacin_Soluciones.ipynb, veremos el cuadro con la evaluacin (Fig. 17):

Image description
Fig.17 Evaluacin de la versin del modelo entrenado.

Para visualizar las mtricas en la consola debes acceder a cada versin de solucin :

Image description
Fig.18 Evaluacin de la versin del modelo entrenado en la consola.

  • Coverage es el porcentaje de los items que el modelo est recomendando en general. Por ejemplo, en SIMS, tiene un coverage de 45% es decir hay un 55% de items que no estn siendo recomendados.
  • Precision 5, 10 y 25 son la precisin de las recomendaciones. Por ejemplo, si recomienda 10 items y el usuario interactu con 2, mi precisin a 10 es de 20%.
  • Normalized discount gain 5,10 y 25 es muy similar a precisin, pero el orden importa, y hay incentivo por entregar las recomendaciones en orden real de preferencia.

Para mejorar el coverage el modelo debe incorporar los tems nuevos y los antiguos con poca preferencia, esto lo puedes modificar con el parmetro campaignConfig al crear la campaa.

Ms Informacin en create_campaign() de Boto3 Amazon Personalize Documentation.

Paso 8: Crear un endpoint de inferencias (Campaa)

Entrenada la Solution Version, creamos la campaa para cada recipe y las desplegamos ejecutando el cdigo en el notebbok 04_Desplegando_campanas.ipynb .

Los comandos que crean las campaas son:

sims_create_campaign_response = personalize.create_campaign(    name = "personalize-anime-SIMS",    solutionVersionArn = sims_solution_version_arn,    minProvisionedTPS = 1)sims_campaign_arn = sims_create_campaign_response['campaignArn']

Nota: minProvisionedTPS = 1 corresponde a la cantidad de TPS (transacciones por segundo) que este endpoint podr soportar, este dimensionamiento depender del volumen de recomendaciones que queramos entregar.

Nota: en el notebook hay un loop que consulta el estado hasta que estn creadas.

El estado de las Solution Version en la consola:

Image description
Fig.19 Campaas creadas en la consola

Paso 9: Creacin del Event Tracker

Para que el modelo de recomendaciones realice sugerencias ms acertadas se debe interactuar con l, alimentarlo con las preferencias de los usuarios. Este proceso har que el modelo aprenda y actualice las recomendaciones mientras se usa la aplicacin, mejorando la relevancia de las recomendaciones no solo para el usuario que interacta, sino que tambin para usuarios nuevos o con gustos parecidos.

Las interacciones pueden ser compras, en el caso de una tienda, o visualizar el contenido en una plataforma de VoD, que es el caso de uso para el proyecto de recomendaciones personalizadas de anime. Otra forma de alimentar al modelo de recomendaciones, es calificando de acuerdo a tus gustos.

En Personalize puedes incorporar estas nuevas interacciones utilizando Event Tracker, lo creamos con los comandos en el notebook 05_Probando_Recomendaciones.ipynb:

response = personalize.create_event_tracker(    name='AnimeTracker',    datasetGroupArn=dataset_group_arn)

El resultado en la consola:

Image description
Fig.20 Anime Tracker en la consola

Paso 10: Creacin de filtros

Los filtros permiten entregar recomendaciones bajo una condicin del tem dataset. En este proyecto se puede filtrar por ao, estudio o gneros, pero solo crearemos el filtro de gneros.

Se crea con estos comandos en el notebook 05_Probando_Recomendaciones.ipynb:

createfilter_response = personalize.create_filter(            name=genre,            datasetGroupArn=dataset_group_arn,            filterExpression='INCLUDE ItemID WHERE Items.GENRE IN ("'+ genre +'")'        )

Vista en la consola:

Image description
Fig.21 Filtros en la consola.

Paso 11: Obtener recomendaciones.

En el notebook 05_Probando_Recomendaciones estn las funciones necesarias para la comunicacin con Personalize y probar la solucin.

  • Recomendaciones por campaas (SIMS Filters User personalization) :

Para recibir las recomendaciones por anime, usamos get_recommendations() de la librera Boto3 Amazon Personalize Run time, con la siguiente sintaxis:

get_recommendations_response = personalize_runtime.get_recommendations(        campaignArn = campaign_arn,        itemId = str(anime_ID),    )

Si la campaa es de personalizacin de usuario, pasamos el user_id:

get_recommendations_response = personalize_runtime.get_recommendations(        campaignArn = userpersonalization_campaign_arn,        userId = str(user_id),    )

Para recibir las recomendaciones filtradas, agregamos filterArn:

get_recommendations_response = personalize_runtime.get_recommendations(        campaignArn = userpersonalization_campaign_arn,        userId = str(user_id),        filterArn = filter_arn    )
  • Actualizar datos con Event Tracker:

Para ingresar nuevos datos, por ejemplo, calificar un nuevo anime, empleamos la funcin put_events() de la librera Boto3 Amazon personalize events:

personalize_events.put_events(    trackingId = TRACKING_ID,    userId= str(USER_ID),    sessionId = session_ID,    eventList = [{        'sentAt': int(time.time()),        'eventType': str(EVENT_TYPE),        'eventValue': int(EVENT_VALUE),        'properties': event_json        }]    )

Te invito a explorar el notebook 05_Probando_Recomendaciones en la instancia de SageMaker, las funciones estn listas para que hagas volar tu imaginacin.

Paso 12: Borrar los recursos de la cuenta de AWS.

Estos pasos son opcionales, si tu intencin es continuar con la construccin de la aplicacin web, puedes mantener el notebook de Sagemaker en estado Stopped (Acciones -> Detener) , lo vamos a utilizar en el prximo episodio de esta serie.

De lo contrario, sigue los siguientes pasos:

Borrar recursos de Amazon Personalize: sigue los pasos del notebookipynb.

Borrar el notebook de Amazon SageMaker: antes de proceder, copia el nombre del IAM Role que se cre con el notebook, es necesario en el siguiente paso. Ahora, con el notebook en estado Stopped, selecciona Acciones ->
**Borrar AWS IAM Role: **en la consola de AWS IAM en el men de la izquierda selecciona Roles, y pega en el buscador el nombre del role que copiaste en el paso anterior, presiona la tecla Enter, seleccinalo y luego

Conclusin:

En este episodio creaste un modelo de recomendaciones de anime utilizando la data histrica del dataset Recommendation Database 2020 de kaggle.

No fue necesario aplicar conocimientos de AI/ML para crear este modelo de recomendaciones y, con esta experiencia ya eres capaz de crear otros tipos de recomendadores, solo debes tener un dataset y usar el repositorio de github empelado ac como base.

Si quieres aprender ms sobre Amazon Personalize puedes revisar los siguientes recursos:

Developer Guide
Boto3 Amazon Personalize Documentation
Boto3 Amazon Personalize Events Documentation
Boto3 Amazon Personalize Runtime Documentation
Amazon Personalize Samples
Caso de uso exitoso en LATAM

En la prxima entrega de esta serie aprenderemos cmo disponibilizar un modelo de recomendacin de anime en una API REST, para invocar el modelo de recomendacin que creamos en este blog.

Gracias!

Te dejo mis redes:
Dev.to Linkedin GitHub Twitter Instagram Youtube


Original Link: https://dev.to/aws/como-crear-un-modelo-de-recomendacion-basado-en-machine-learning-37mj

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To