Crie um pipeline de recomendação em lote usando o Amazon Personalize sem código PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Crie um pipeline de recomendação em lote usando o Amazon Personalize sem código

Com conteúdo personalizado com maior probabilidade de gerar engajamento do cliente, as empresas buscam continuamente fornecer conteúdo personalizado com base no perfil e no comportamento de seus clientes. Os sistemas de recomendação, em particular, procuram prever a preferência que um usuário final daria a um item. Alguns casos de uso comuns incluem recomendações de produtos em lojas de varejo online, personalização de boletins informativos, geração de recomendações de playlists de músicas ou até mesmo descoberta de conteúdo semelhante em serviços de mídia online.

No entanto, pode ser um desafio criar um sistema de recomendação eficaz devido às complexidades no treinamento de modelos, seleção de algoritmos e gerenciamento de plataforma. Amazon Customize permite que os desenvolvedores melhorem o envolvimento do cliente por meio de recomendações personalizadas de produtos e conteúdo sem a necessidade de conhecimento de machine learning (ML). Os desenvolvedores podem começar a envolver os clientes imediatamente usando dados de comportamento do usuário capturados. Nos bastidores, o Amazon Personalize examina esses dados, identifica o que é significativo, seleciona os algoritmos certos, treina e otimiza um modelo de personalização personalizado para seus dados e fornece recomendações por meio de um endpoint de API.

Embora fornecer recomendações em tempo real possa ajudar a aumentar o engajamento e a satisfação, às vezes isso pode não ser realmente necessário, e fazer isso em lote de forma programada pode ser simplesmente uma opção mais econômica e gerenciável.

Esta postagem mostra como usar os serviços da AWS não apenas para criar recomendações, mas também para operacionalizar um pipeline de recomendação em lote. Percorremos a solução de ponta a ponta sem uma única linha de código. Discutimos dois tópicos em detalhes:

Visão geral da solução

Nesta solução, usamos o Lente de filme conjunto de dados. Este conjunto de dados inclui 86,000 classificações de filmes de 2,113 usuários. Tentamos usar esses dados para gerar recomendações para cada um desses usuários.

A preparação de dados é muito importante para garantir que obtenhamos dados de comportamento do cliente em um formato pronto para o Amazon Personalize. A arquitetura descrita nesta postagem usa o AWS Glue, um serviço de integração de dados sem servidor, para realizar a transformação de dados brutos em um formato pronto para consumo do Amazon Personalize. A solução usa o Amazon Personalize para criar recomendações de lote para todos os usuários usando uma inferência de lote. Em seguida, usamos um fluxo de trabalho do Step Functions para que o fluxo de trabalho automatizado possa ser executado chamando as APIs do Amazon Personalize de maneira repetível.

O diagrama a seguir demonstra essa solução.Diagrama de Arquitetura

Construiremos esta solução com os seguintes passos:

  1. Crie um trabalho de transformação de dados para transformar nossos dados brutos usando o AWS Glue.
  2. Crie uma solução do Amazon Personalize com o conjunto de dados transformado.
  3. Crie um fluxo de trabalho do Step Functions para orquestrar a geração de inferências em lote.

Pré-requisitos

Você precisa do seguinte para este passo a passo:

Crie um trabalho de transformação de dados para transformar dados brutos com o AWS Glue

Com o Amazon Personalize, os dados de entrada precisam ter um esquema e formato de arquivo específicos. Os dados de interações entre usuários e itens devem estar no formato CSV com colunas específicas, enquanto a lista de usuários para os quais você deseja gerar recomendações deve estar no formato JSON. Nesta seção, usamos o AWS Glue Studio para transformar dados brutos de entrada nas estruturas e formatos necessários para o Amazon Personalize.

O AWS Glue Studio fornece uma interface gráfica projetada para facilitar a criação e execução de trabalhos de extração, transformação e carregamento (ETL). Você pode criar visualmente cargas de trabalho de transformação de dados por meio de operações simples de arrastar e soltar.

Primeiro, preparamos nossos dados de origem em Serviço de armazenamento simples da Amazon (Amazon S3), então transformamos os dados sem código.

  1. No console do Amazon S3, crie um bucket do S3 com três pastas: raw, transformado e curado.
  2. Faça o download do Conjunto de dados MovieLens e carregue o arquivo descompactado chamado user_ratingmovies-timestamp.dat em seu bucket na pasta raw.
  3. No console do AWS Glue Studio, escolha Empregos no painel de navegação.
  4. Selecionar Visual com origem e destino, Em seguida, escolha Crie.
  5. Escolha o primeiro nó chamado Fonte de dados – bucket do S3. É aqui que especificamos nossos dados de entrada.
  6. No Propriedades da fonte de dados guia, selecione Localização S3 e navegue até o arquivo carregado.
  7. Escolha Formato de dados, escolha CSV, E para Delimitador, escolha Aba.
    Estúdio AWS Glue-S3
  8. Podemos escolher a guia Esquema de saída para verificar se o esquema inferiu as colunas corretamente.
  9. Se o esquema não corresponder às suas expectativas, escolha Editar para editar o esquema.
    AWS Glue Studio - Campos

Em seguida, transformamos esses dados para seguir os requisitos de esquema do Amazon Personalize.

  1. Escolha o Transformar - Aplicar Mapeamento nó e, no Transformar guia, atualize a chave de destino e os tipos de dados.
    O Amazon Personalize, no mínimo, espera a seguinte estrutura para o conjunto de dados de interações:
    • user_id (corda)
    • item_id (corda)
    • timestamp (longo, no formato Unix epoch time)
      AWS Glue Studio - mapeamento de campo

Neste exemplo, excluímos os filmes com classificação ruim no conjunto de dados.

  1. Para fazer isso, remova o último nó chamado bucket do S3 e adicione um nó de filtro no Transformar aba.
  2. Escolha Adicionar condição e filtrar os dados onde a classificação < 3.5.
    AWS Glue Studio - Saída

Agora gravamos a saída de volta no Amazon S3.

  1. Expandir o Target menu e escolha Amazon S3.
  2. Escolha Local de destino do S3, escolha a pasta chamada transformed.
  3. Escolha CSV como o formato e sufixo o Localização de Destino de interactions/.

Em seguida, geramos uma lista de usuários para os quais desejamos obter recomendações.

  1. Escolha o Aplicar mapeamento nó novamente e, em seguida, expanda o Transformar menu e escolha Aplicar mapeamento.
  2. Solte todos os campos, exceto user_id e renomeie esse campo para userId. O Amazon Personalize espera que esse campo seja nomeado ID do usuário.
  3. Expandir o Target menu novamente e escolha Amazon S3.
  4. Desta vez, escolha JSON como o formato e, em seguida, escolha a pasta S3 transformada e dê o sufixo com batch_users_input/.

Isso produz um JSON lista de usuários como entrada para o Amazon Personalize. Devemos agora ter um diagrama que se parece com o seguinte.

AWS Glue Studio - fluxo de trabalho inteiro

Agora estamos prontos para executar nosso job de transformação.

  1. No console do IAM, crie uma função chamada glue-service-role e anexe as seguintes políticas gerenciadas:
    • AWSGlueServiceRole
    • AmazonS3FullAccess

Para obter mais informações sobre como criar funções de serviço do IAM, consulte o Criando uma função para delegar permissões a um serviço da AWS.

  1. Navegue de volta ao seu trabalho do AWS Glue Studio e escolha o Detalhes do trabalho aba.
  2. Defina o nome do trabalho como batch-personalize-input-transform-job.
  3. Escolha a função do IAM recém-criada.
  4. Mantenha os valores padrão para todo o resto.
    AWS Glue Studio - Detalhes do trabalho
  5. Escolha Salvar.
  6. Quando estiver pronto, escolha Execute e acompanhar o trabalho no Runs aba.
  7. Quando o trabalho estiver concluído, navegue até o console do Amazon S3 para validar se o arquivo de saída foi criado com êxito.

Agora moldamos nossos dados no formato e na estrutura exigidos pelo Amazon Personalize. O conjunto de dados transformado deve ter os seguintes campos e formato:

  • Conjunto de dados de interações – Formato CSV com campos USER_ID, ITEM_ID, TIMESTAMP
  • Conjunto de dados de entrada do usuário – Formato JSON com elemento userId

Crie uma solução do Amazon Personalize com o conjunto de dados transformado

Com nosso conjunto de dados de interações e dados de entrada do usuário no formato certo, agora podemos criar nossa solução Amazon Personalize. Nesta seção, criamos nosso grupo de conjuntos de dados, importamos nossos dados e, em seguida, criamos um trabalho de inferência em lote. Um grupo de conjuntos de dados organiza recursos em contêineres para componentes do Amazon Personalize.

  1. No console do Amazon Personalize, escolha Crie grupo de conjuntos de dados.
  2. Escolha Domínio, selecione Personalizadas.
  3. Escolha Criar grupo de conjuntos de dados e continuar.
    Amazon Personalize - criar grupo de conjuntos de dados

Em seguida, crie o conjunto de dados de interações.

  1. Insira um nome de conjunto de dados e selecione Criar novo esquema.
  2. Escolha Criar conjunto de dados e continuar.
    Amazon Personalize - crie um conjunto de dados de interações

Agora importamos os dados de interações que criamos anteriormente.

  1. Navegue até o bucket do S3 no qual criamos nosso conjunto de dados CSV de interações.
  2. No Permissões guia, adicione a seguinte política de acesso ao bucket para que o Amazon Personalize tenha acesso. Atualize a política para incluir o nome do bucket.
    {
       "Version":"2012-10-17",
       "Id":"PersonalizeS3BucketAccessPolicy",
       "Statement":[
          {
             "Sid":"PersonalizeS3BucketAccessPolicy",
             "Effect":"Allow",
             "Principal":{
                "Service":"personalize.amazonaws.com"
             },
             "Action":[
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
             ],
             "Resource":[
                "arn:aws:s3:::<your-bucket-name>",
                "arn:aws:s3:::<your-bucket-name> /*"
             ]
          }
       ]
    }

Navegue de volta ao Amazon Personalize e escolha Crie seu job de importação do conjunto de dados. Nosso conjunto de dados de interações agora deve ser importado para o Amazon Personalize. Aguarde a conclusão do trabalho de importação com o status Ativo antes de prosseguir para a próxima etapa. Isso deve levar aproximadamente 8 minutos.

  1. No console do Amazon Personalize, escolha Visão geral no painel de navegação e escolha Criar solução.
    Amazon Personalize - Painel
  2. Insira um nome de solução.
  3. Escolha Tipo de solução, escolha Recomendação de itens.
  4. Escolha Receita, escolha o aws-user-personalization receita.
  5. Escolha Criar e treinar solução.
    Amazon Personalize - criar solução

A solução agora treina com base no conjunto de dados de interações que foi importado com a receita de personalização do usuário. Monitore o status desse processo sob Versões de solução. Aguarde a conclusão antes de prosseguir. Isso deve levar aproximadamente 20 minutos.
Amazon Personalize – Status

Agora criamos nosso trabalho de inferência em lote, que gera recomendações para cada um dos usuários presentes na entrada JSON.

  1. No painel de navegação, em Recursos personalizados, escolha Trabalhos de inferência em lote.
  2. Insira um nome de trabalho e, para Solução, escolha a solução criada anteriormente.
  3. Escolha Criar trabalho de inferência em lote.
    Amazon Personalize - crie um trabalho de inferência em lote
  4. Escolha Configuração de dados de entrada, insira o caminho S3 de onde o batch_users_input arquivo está localizado.

Este é o arquivo JSON que contém userId.

  1. Escolha Configuração de dados de saída caminho, escolha o caminho selecionado no S3.
  2. Escolha Criar trabalho de inferência em lote.

Esse processo leva aproximadamente 30 minutos. Quando o trabalho é concluído, as recomendações para cada um dos usuários especificados no arquivo de entrada do usuário são salvas no local de saída do S3.

Geramos com sucesso um conjunto de recomendações para todos os nossos usuários. No entanto, só implementamos a solução usando o console até agora. Para garantir que essa inferência em lote seja executada regularmente com o conjunto de dados mais recente, precisamos criar um fluxo de trabalho de orquestração. Na próxima seção, mostramos como criar um fluxo de trabalho de orquestração usando o Step Functions.

Crie um fluxo de trabalho do Step Functions para orquestrar o fluxo de trabalho de inferência em lote

Para orquestrar seu pipeline, conclua as etapas a seguir:

  1. No console Step Functions, escolha Criar máquina de estado.
  2. Selecionar Projete seu fluxo de trabalho visualmente, Em seguida, escolha Próximo.
    Funções de etapa da AWS - Criar fluxo de trabalho
  3. Arraste o CreateDatasetImportJob nó da esquerda (você pode procurar por esse nó na caixa de pesquisa) na tela.
  4. Escolha o nó e você verá os parâmetros da API de configuração à direita. Registre o ARN.
  5. Insira seus próprios valores no Parâmetros da API caixa de texto.

Isso chama o CriarDatasetImportJob API com os valores de parâmetro que você especificar.

Fluxo de trabalho do AWS Step Functions

  1. Arraste o CreateSolutionVersion nó na tela.
  2. Atualize os parâmetros da API com o ARN da solução que você anotou.

Isso cria uma nova versão da solução com os dados recém-importados chamando o método CriarSoluçãoVersão API.

  1. Arraste o CreateBatchInferenceJob node na tela e, da mesma forma, atualize os parâmetros da API com os valores relevantes.

Certifique-se de usar o $.SolutionVersionArn sintaxe para recuperar o parâmetro ARN da versão da solução da etapa anterior. Esses parâmetros de API são passados ​​para o CriarBatchInferenceJob API.

Fluxo de trabalho do AWS Step Functions

Precisamos criar uma lógica de espera no fluxo de trabalho do Step Functions para garantir que o trabalho de inferência em lote de recomendação seja concluído antes que o fluxo de trabalho seja concluído.

  1. Localize e arraste em um nó Wait.
  2. Na configuração para Espere, insira 300 segundos.

Este é um valor arbitrário; você deve alterar esse tempo de espera de acordo com seu caso de uso específico.

  1. Escolha o CreateBatchInferenceJob nó novamente e navegue até o Tratamento de erros aba.
  2. Escolha luta erros, entrar Personalize.ResourceInUseException.
  3. Escolha Estado substituto, escolha Espere.

Esta etapa nos permite verificar periodicamente o status do trabalho e ele só sai do loop quando o trabalho é concluído.

  1. Escolha Caminho do resultado, entrar $.errorMessage.

Isso significa efetivamente que, quando a exceção de “recurso em uso” é recebida, o trabalho aguarda x segundos antes de tentar novamente com as mesmas entradas.

Fluxo de trabalho do AWS Step Functions

  1. Escolha Salvar, e então escolha Inicie a execução.

Orquestramos com sucesso nosso pipeline de recomendação em lote para o Amazon Personalize. Como uma etapa opcional, você pode usar Amazon Event Bridge para agendar um acionador desse fluxo de trabalho regularmente. Para mais detalhes, consulte EventBridge (CloudWatch Events) para alterações de status de execução do Step Functions.

limpar

Para evitar cobranças futuras, exclua os recursos que você criou para este passo a passo.

Conclusão

Nesta postagem, demonstramos como criar um pipeline de recomendação em lote usando uma combinação de AWS Glue, Amazon Personalize e Step Functions, sem precisar de uma única linha de código ou experiência de ML. Usamos o AWS Glue para preparar nossos dados no formato exigido pelo Amazon Personalize. Em seguida, usamos o Amazon Personalize para importar os dados, criar uma solução com uma receita de personalização do usuário e criar um trabalho de inferência em lote que gera um padrão de 25 recomendações para cada usuário, com base em interações anteriores. Em seguida, orquestramos essas etapas usando o Step Functions para que possamos executar esses trabalhos automaticamente.

Para as etapas a serem consideradas a seguir, a segmentação de usuários é uma das receitas mais recentes do Amazon Personalize, que você pode explorar para criar segmentos de usuários para cada linha dos dados de entrada. Para mais detalhes, consulte Obtendo recomendações em lote e segmentos de usuários.


Sobre o autor

Maxine Wee

Maxine Wee é arquiteto de soluções de laboratório de dados da AWS. A Maxine trabalha com os clientes em seus casos de uso, projeta soluções para resolver seus problemas de negócios e os orienta na construção de protótipos escaláveis. Antes de sua jornada com a AWS, Maxine ajudou os clientes a implementar projetos de BI, data warehousing e data lake na Austrália.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS