Primeiros passos com o algoritmo NCF integrado

Neste tutorial, você vai treinar o modelo de Filtragem colaborativa neural (NCF, na sigla em inglês) no conjunto de dados MovieLens. Ele abrange o pré-processamento dos dados, o treinamento usando o algoritmo NCF integrado, a implantação do modelo no AI Platform e a solicitação de uma predição a partir do modelo implantado.

Conjunto de dados

Neste tutorial, são usados os seguintes conjuntos de dados do MovieLens para treinamento e avaliação de modelos:

  • ml-1m (curto para MovieLens 1 milhão)
  • ml-20m (curto para MovieLens 20 milhões)

ml-1m

O conjunto de dados ml-1m contém 1.000.209 avaliações anônimas de aproximadamente 3.706 filmes feitas por 6.040 usuários que entraram para o MovieLens em 2000. Todas as classificações estão contidas no arquivo "ratings.dat" sem uma linha de cabeçalho e estão no seguinte formato:

UserID::MovieID::Rating::Timestamp

  • Os códigos dos usuários variam entre 1 e 6040.
  • Os códigos dos filmes estão entre 1 e 3952.
  • As classificações são feitas em uma escala de 5 estrelas (somente classificações com estrelas inteiras).
  • O carimbo de data/hora é representado em segundos desde a meia-noite, horário Universal Coordenado (UTC, na sigla em inglês), de 1o de janeiro de 1970.

ml-20m

O conjunto de dados ml-20m contém 20.000.263 classificações de 26.744 filmes por 138493 usuários. Todas as avaliações estão contidas no arquivo "notas.csv". Cada linha desse arquivo depois da linha do cabeçalho representa uma classificação de um filme por um usuário e tem o seguinte formato:

userId,movieId,rating,timestamp

As linhas desse arquivo são ordenadas primeiro pelo userId. As linhas com o mesmo userId são ordenadas por movieId. As classificações são feitas em uma escala de 5 estrelas, com incrementos de meia estrela (0,5 estrelas - 5 estrelas). O carimbo de data/hora é representado em segundos desde a meia-noite, no horário universal, (UTC) de 1o de janeiro de 1970. Cada usuário tem pelo menos 20 avaliações.

Objetivos

  • Preparar o conjunto de dados do MovieLens
  • Executar treinamento e avaliação

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative a API AI Platform Training & Prediction.

    Ative a API

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative a API AI Platform Training & Prediction.

    Ative a API

  8. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

Prepare os dados

  1. No Cloud Shell, crie e ative um ambiente virtual em Python:

    (vm)$  virtualenv ncf-env
    
    (vm)$  source ncf-env/bin/activate
    
  2. Instale o código do TensorFlow Model Garden:

    (vm)$  pip install tf-models-official==2.3.0
    
  3. Adicione variáveis de ambiente para o URI a um bucket do Cloud Storage no projeto do Google Cloud e um diretório para armazenar dados nesse bucket. Substitua BUCKET_NAME pelo nome do seu bucket.

    (vm)$ export STORAGE_BUCKET=gs://BUCKET_NAME
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/ncf_data
    
  4. Gere dados de treinamento e avaliação para o conjunto de dados ml-20m em DATA_DIR:

    (vm)$ python -m official.recommendation.create_ncf_data \
        --dataset ml-20m \
        --num_train_epochs 4 \
        --meta_data_file_path ${DATA_DIR}/metadata \
        --eval_prebatch_size 160000 \
        --data_dir ${DATA_DIR}
    

Esse script gera e pré-processa o conjunto de dados no Cloud Shell. O pré-processamento converte os dados para o formato TFRecord necessário para o modelo. O download e o pré-processamento levam aproximadamente 25 minutos e geram uma saída semelhante a esta:

I0804 23:03:02.370002 139664166737728 movielens.py:124] Successfully downloaded /tmp/tmpicajrlfc/ml-20m.zip 198702078 bytes
I0804 23:04:42.665195 139664166737728 data_preprocessing.py:223] Beginning data preprocessing.
I0804 23:04:59.084554 139664166737728 data_preprocessing.py:84] Generating user_map and item_map...
I0804 23:05:20.934210 139664166737728 data_preprocessing.py:103] Sorting by user, timestamp...
I0804 23:06:39.859857 139664166737728 data_preprocessing.py:194] Writing raw data cache.
I0804 23:06:42.375952 139664166737728 data_preprocessing.py:262] Data preprocessing complete. Time: 119.7 sec.
%lt;BisectionDataConstructor(Thread-1, initial daemon)>
General:
  Num users: 138493
  Num items: 26744

Training:
  Positive count:          19861770
  Batch size:              99000
  Batch count per epoch:   1004

Eval:
  Positive count:          138493
  Batch size:              160000
  Batch count per epoch:   866

I0804 23:07:14.137242 139664166737728 data_pipeline.py:887] Negative total vector built. Time: 31.8 seconds
I0804 23:11:25.013135 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 250.9 seconds
I0804 23:15:46.391308 139664166737728 data_pipeline.py:674] Eval construction complete. Time: 261.4 seconds
I0804 23:19:54.345858 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 248.0 seconds
I0804 23:24:09.182484 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 254.8 seconds
I0804 23:28:26.224653 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 257.0 seconds

Enviar um job de treinamento

Para enviar um job, especifique alguns argumentos básicos de treinamento e outros relacionados ao algoritmo NCF.

Argumentos gerais do job de treinamento:

Argumentos do job de treinamento
Argumento Descrição
job-id Código exclusivo do job de treinamento. Use-o para encontrar registros de status do job de treinamento depois de enviá-lo.
job-dir Caminho do Cloud Storage em que o AI Platform Training salva arquivos de treinamento após a conclusão de um job de treinamento bem-sucedido.
scale-tier Especifica os tipos de máquina para treinamento. Use BASIC para selecionar uma configuração de apenas uma máquina.
master-image-uri URI do Container Registry usado para especificar qual contêiner do Docker usar no job de treinamento. Use o contêiner no algoritmo integrado NCF definido anteriormente como IMAGE_URI.
region Especifique a região disponível onde será executado o job de treinamento. Neste tutorial, use a região us-central1.

Argumentos específicos para o treinamento do algoritmo NCF integrado no MovieLens:

Argumentos do algoritmo
Argumento Valor a ser usado neste tutorial Descrição
train_dataset_path ${DATA_DIR}/training_cycle_*/* Caminho do Cloud Storage em que os dados de treinamento estão armazenados.
eval_dataset_path ${DATA_DIR}/eval_data/* Caminho do Cloud Storage em que os dados de avaliação são armazenados.
input_meta_data_path ${DATA_DIR}/metadata Caminho do Cloud Storage em que o esquema de entrada está armazenado.
train_epochs 3 Número de períodos de treinamento a serem executados.
batch_size 99000 Tamanho do lote para treinamento.
eval_batch_size 160000 Tamanho do lote para avaliação.
learning_rate 0,00382059 Taxa de aprendizado usada pelo otimizador Adam.
beta1 0,783529 Hiperparâmetro Beta para o otimizador Adam.
beta2 0,909003 hiperparâmetro 2 para o otimizador Adam.
epsilon 1.45439e-07 Hiperparâmetro do epsilon para o otimizador Adam.
num_factors 64 Tamanho de incorporação do modelo MF.
hr_threshold 0,635 Valor da métrica de avaliação de RH na qual o treinamento deve parar.
layers 256.256.128.64 Tamanhos das camadas ocultas para o MLP Formatar como números inteiros separados por vírgula.
keras_use_ctl Verdadeiro Usar loop de treinamento de Keras personalizado no treinamento de modelo.

Para uma lista detalhada de todas as outras sinalizações de algoritmo NCF, consulte a referência integrada de NCF.

Executar o job de treinamento

  1. No Console do Google Cloud, acesse a página do AI Platform:

    Acesse o AI Platform

  2. Na seção Treinamento de modelo, selecione Treinar com um algoritmo integrado.

  3. Na lista suspensa, selecione NCF. Clique em Avançar.

  4. Use o botão Procurar para selecionar os conjuntos de dados de treinamento e avaliação no bucket do Cloud Storage e escolha o diretório de saída. Clique em Avançar.

  5. Na página Argumentos do algoritmo, use os valores de argumento na tabela na seção anterior para configurar o job de treinamento.

  6. Dê um nome ao job de treinamento e use o tipo de máquina BASIC_TPU ou BASIC_GPU.

  7. Clique em Enviar para iniciar o job.

Compreender o diretório do job

Depois que o job de treinamento é concluído com êxito, o AI Platform Training cria um modelo treinado no seu intervalo do Cloud Storage com alguns outros artefatos. Você verá a estrutura de diretório a seguir no seu JOB_DIR:

  • model/ (um diretório SavedModel do TensorFlow)
    • saved_model.pb
    • assets/
    • variables/
  • summaries/ (geração de registros com treinamento e avaliação)
    • eval/
    • train/
  • vários arquivos de checkpoints (criados e usados durante o treinamento)
    • checkpoint
    • ctl_checkpoint-1.data-00000-of-00002
    • ...
    • ctl_checkpoint-1.index

Confirme se a estrutura de diretórios no JOB_DIR corresponde à estrutura descrita na lista anterior:

gsutil ls -a $JOB_DIR/*

Implantar o modelo treinado

O AI Platform Prediction organiza seus modelos treinados usando recursos de model e model. Um modelo do AI Platform Prediction é um contêiner para as versões do seu modelo de machine learning.

Para implantar um modelo, crie um recurso no AI Platform Prediction, crie uma versão desse modelo e use o modelo e a versão para solicitar previsões on-line.

Saiba mais sobre como implantar modelos no AI Platform Prediction.

Console

  1. Na página Jobs, você encontra uma lista de todos os jobs de treinamento. Clique no nome do job de treinamento que você acabou de enviar.

  2. Na página Detalhes do job, visualize o progresso geral do job ou clique em Visualizar registros para uma visualização mais detalhada do progresso.

  3. Quando o job é bem-sucedido, o botão Implantar modelo é exibido na parte superior. Clique em Implantar modelo.

  4. Selecione "Implantar como novo modelo" e digite um nome. Em seguida, clique em Confirmar.

  5. Na página Criar versão, insira o nome de uma versão, como v1, e mantenha as configurações padrão de todos os outros campos. Clique em Salvar.

  6. Na página Detalhes do modelo, o nome da versão é exibido. A criação da versão leva alguns minutos. Quando a versão estiver pronta, um ícone de marca de seleção aparecerá ao lado do nome da versão.

  7. Clique no nome da versão (v1) para navegar até a página Detalhes da versão. Na próxima etapa deste tutorial, você enviará uma solicitação de previsão

Receber predições on-line

Ao solicitar previsões, é necessário formatar os dados de entrada como JSON de maneira que o modelo espera. Os modelos NCF atuais não fazem o pré-processamento automático das entradas.

Console

  1. Na página Detalhes da versão da "v1" (a versão que você acabou de criar), envie uma amostra de solicitação de previsão.

    Selecione a guia Testar e usar.

  2. Copie a seguinte amostra para o campo de entrada:

     {
       "instances": [{
         "duplicate_mask": [0],
         "item_id": [1],
         "train_labels": [true],
         "user_id": [1],
         "valid_point_mask": [false]
       }]
      }
    
  3. Clique em Teste.

    Aguarde um momento, e um vetor de previsão será retornado.

A seguir