Gere recomendações personalizadas e reclassificadas usando o Amazon Personalize - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Gere recomendações personalizadas e reclassificadas usando o Amazon Personalize

Criado por Mason Cahill (AWS), Matthew Chasse (AWS) e Tayo Olajide (AWS)

Repositório de códigos: personalize-pet-recommendations

Ambiente: PoC ou piloto

Tecnologias: aprendizado de máquina e IA; nativo da nuvem;; infraestrutura DevOps; sem servidor

Workload: código aberto

Serviços da AWS: AWS CloudFormation; Amazon Kinesis Data Firehose; AWS Lambda; Amazon Personalize; AWS Step Functions

Resumo

Esse padrão mostra como usar o Amazon Personalize para gerar recomendações personalizadas para seus usuários, incluindo recomendações reclassificadas, com base na ingestão de dados de interação do usuário em tempo real desses usuários. O cenário de exemplo usado nesse padrão é baseado em um site de adoção de animais de estimação que gera recomendações para seus usuários com base em suas interações (por exemplo, quais animais de estimação visitados pelo usuário). Seguindo o cenário de exemplo, você aprende a usar o Amazon Kinesis Data Streams para ingerir dados de interação, o AWS Lambda para gerar recomendações e reclassificar as recomendações e o Amazon Data Firehose para armazenar os dados em um bucket do Amazon Simple Storage Service (Amazon S3). Você também aprende a usar o AWS Step Functions para criar uma máquina de estado que gerencia a versão da solução (ou seja, um modelo treinado) que gera suas recomendações.

Pré-requisitos e limitações

Pré-requisitos

Versões do produto

  • Python 3.9

  • CDK da AWS: 2.23.0 ou superior

  • CLI da AWS: 2.7.27 ou superior

Arquitetura

Pilha de tecnologia

  • Amazon Data Firehose

  • Amazon Kinesis Data Streams

  • Amazon Personalize

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Cloud Development Kit (AWS CDK)

  • AWS Command Line Interface (AWS CLI)

  • AWS Lambda

  • AWS Step Functions

Arquitetura de destino

O diagrama a seguir ilustra um pipeline para a ingestão de dados em tempo real no Amazon Personalize. O pipeline então usa esses dados para gerar recomendações personalizadas e reclassificadas para os usuários.

Arquitetura de ingestão de dados do Amazon Personalize

O diagrama mostra o seguinte fluxo de trabalho:

  1. O Kinesis Data Streams ingere dados do usuário em tempo real (por exemplo, eventos como animais de estimação visitados) para processamento pelo Lambda e pelo Firehose.

  2. Uma função do Lambda processa os registros do Kinesis Data Streams e faz uma chamada de API para adicionar a interação do usuário no registro a um rastreador de eventos no Amazon Personalize.

  3. Uma regra baseada em tempo invoca uma máquina de estado do Step Functions e gera novas versões da solução para os modelos de recomendação e reclassificação usando os eventos do rastreador de eventos no Amazon Personalize.

  4. As campanhas do Amazon Personalize são atualizadas pela máquina de estado para usar a nova versão da solução.

  5. O Lambda reclassifica a lista de itens recomendados chamando a campanha de reclassificação do Amazon Personalize.

  6. O Lambda recupera a lista de itens recomendados chamando a campanha de recomendações do Amazon Personalize.

  7. O Firehose salva os eventos em um bucket do S3, onde eles podem ser acessados como dados históricos.

Ferramentas

Ferramentas da AWS

  • O AWS Cloud Development Kit (AWS CDK) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código.

  • A ‭AWS Command Line Interface (AWS CLI)‭ é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

  • O Amazon Data Firehose ajuda você a entregar dados de streaming em tempo real para outros serviços da AWS, endpoints HTTP personalizados e endpoints HTTP de propriedade de provedores de serviços terceirizados compatíveis.

  • O Amazon Kinesis Data Streams ajuda a coletar e processar grandes fluxos de registros de dados em tempo real.

  • O AWS Lambda é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • O Amazon Personalize é um serviço de machine learning (ML) totalmente gerenciado que ajuda você a gerar recomendações de itens para seus usuários com base em seus dados.

  • O AWS Step Functions é um serviço de orquestração sem servidor que permite combinar funções do Lambda e outros serviços da AWS para criar aplicações essenciais aos negócios.

Outras ferramentas

  • pytest é uma estrutura Python para escrever testes pequenos e legíveis.

  • Python é uma linguagem de programação de computador de uso geral.

Código

O código desse padrão está disponível no repositório GitHub Animal Recommender. Você pode usar o CloudFormation modelo da AWS desse repositório para implantar os recursos para a solução de exemplo.

Nota: As versões da solução Amazon Personalize, o rastreador de eventos e as campanhas são apoiadas por recursos personalizados (dentro da infraestrutura) que expandem os recursos nativos. CloudFormation

Épicos

TarefaDescriçãoHabilidades necessárias

Crie um ambiente Python isolado.

Configuração Mac/Linux

  1. Para criar manualmente um ambiente virtual, execute o $ python3 -m venv .venv comando no seu terminal.

  2. Depois que o processo de inicialização for concluído, execute o comando $ source .venv/bin/activate para ativar o ambiente virtual.

Configuração do Windows

Para criar manualmente um ambiente virtual, execute o % .venv\Scripts\activate.bat comando no seu terminal.

DevOps engenheiro

Sintetize o modelo. CloudFormation

  1. Execute o comando $ pip install -r requirements.txt do terminal para instalar as dependências necessárias.

  2. No CLI da AWS, defina as seguintes variáveis de ambiente:

    • export ACCOUNT_ID=123456789

    • export CDK_DEPLOY_REGION=us-east-1

    • export CDK_ENVIRONMENT=dev

  3. No arquivo config/{env}.yml, atualize vpcId para corresponder ao ID da nuvem privada virtual (VPC).

  4. Para sintetizar o CloudFormation modelo para esse código, execute o $ cdk synth comando.

Observação: Na etapa 2, CDK_ENVIRONMENT refere-se ao arquivo config/{env}.yml.

DevOps engenheiro

Implante recursos e crie infraestrutura.

Para implantar os recursos da solução, execute o comando ./deploy.sh no seu terminal.

Esse comando instala as dependências necessárias do Python. Um script do Python cria um bucket do S3 e uma chave do AWS Key Management Service (AWS KMS) e, em seguida, adiciona os dados iniciais para as criações iniciais do modelo. Por fim, o script cdk deploy é executado para criar a infraestrutura restante.

Observação: o treinamento inicial do modelo acontece durante a criação da pilha. Poderá levar até duas horas para a pilha terminar de ser criada.

DevOps engenheiro

Recursos relacionados

Mais informações

Exemplos de cargas e respostas

Função do Lambda de recomendação

Para recuperar recomendações, envie uma solicitação para a função do Lambda de recomendação com uma carga no seguinte formato:

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

O exemplo de resposta a seguir contém uma lista de grupos de animais:

[{"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"},

Se você omitir o campo userId, a função retornará recomendações gerais.

Reclassificar a função do Lambda

Para usar a reclassificação, envie uma solicitação para a função do Lambda de reclassificação. A carga contém os userId de todos os IDs de itens a serem reclassificados e seus metadados. Os dados de exemplo a seguir usam as classes Oxford Pets para animal_species_id (1=gato, 2=cachorro) e números inteiros de 1 a 5 para animal_age_id e 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" } } ] }

A função do Lambda reclassifica esses itens e, em seguida, retorna uma lista ordenada que inclui os IDs dos itens e a resposta direta do Amazon Personalize. Esta é uma lista classificada dos grupos de animais em que os itens estão e sua pontuação. O Amazon Personalize usa receitas de Personalização do usuário e Classificação personalizada para incluir uma pontuação para cada item nas recomendações. Essas pontuações representam a certeza relativa que o Amazon Personalize tem em relação ao item que o usuário selecionará em seguida. As pontuações mais altas representam maior 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 útil do Amazon Kinesis

A carga a ser enviada ao Amazon Kinesis tem o seguinte formato:

{ "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" } }

Observação: o campo userId é removido para um usuário não autenticado.