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
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction API.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Prepare os dados
No Cloud Shell, crie e ative um ambiente virtual em Python:
(vm)$ virtualenv ncf-env
(vm)$ source ncf-env/bin/activate
Instale o código do TensorFlow Model Garden:
(vm)$ pip install tf-models-official==2.3.0
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
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. |
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
No Console do Google Cloud, acesse a página do AI Platform:
Na seção Treinamento de modelo, selecione Treinar com um algoritmo integrado.
Na lista suspensa, selecione NCF. Clique em Avançar.
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.
Na página Argumentos do algoritmo, use os valores de argumento na tabela na seção anterior para configurar o job de treinamento.
Dê um nome ao job de treinamento e use o tipo de máquina
BASIC_TPU
ouBASIC_GPU
.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:
gcloud storage ls -a $JOB_DIR/*
Implantar o modelo treinado
O AI Platform Prediction organiza seus modelos treinados usando recursos de modelo e versão. 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
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.
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.
Quando o job é bem-sucedido, o botão Implantar modelo é exibido na parte superior. Clique em Implantar modelo.
Selecione "Implantar como novo modelo" e digite um nome. Em seguida, clique em Confirmar.
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.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.
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
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.
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] }] }
Clique em Teste.
Aguarde um momento, e um vetor de previsão será retornado.
A seguir
- Saiba mais sobre como usar o algoritmo NCF integrado.