Previsão de pontuação de filmes com BigQuery, Vertex AI e MongoDB Atlas
Abirami Sukumaran, Stanimira Vlaeva11 min read • Published Jan 05, 2023 • Updated Jul 11, 2023
Avalie esse Tutorial
Olá! Faz um minuto desde a última vez que escrevemos sobre GCP e MongoDB Atlas juntos. Tínhamos uma ideia para esse novo gênero de experimento que envolve BigQuery, BQML, Vertex AI, Cloud Functions, MongoDB Atlas e Cloud Run e resolvemos reuni-la neste blog. Você aprenderá como reunimos esses serviços para fornecer um aplicativo de pilha completa e outras funções e serviços independentes que o aplicativo usa. Você leu nosso último blog sobre Aplicativos de pilha MEAN sem servidor com Cloud Run e MongoDB Atlas? Caso contrário, este seria um bom momento para dar uma olhada nisso, porque alguns tópicos que abordamos nesta discussão foram projetados para fazer referência a algumas etapas desse blog. Neste experimento, vamos trazer BigQuery, Vertex AI e MongoDB Atlas para prever uma variável categórica usando um modelo de aprendizado de máquina supervisado criado com AutoML.
Todos nós usamos filmes, não é mesmo? Bem, a maioria de nós faz. Independentemente do idioma, da geografia ou da cultura, gostamos não apenas de assistir a filmes, mas também de falar sobre as nuances e as qualidades que Go para o sucesso de um filme. Sempre me perguntei: “If only I could alter a few aspects and create an impactful difference in the outcome in terms of the movie’s rating or success factor.” Isso envolveria prever a pontuação de sucesso do filme para que eu pudesse brincar com as variáveis, aumentando e diminuindo os valores para impactar o resultado. Foi exatamente o que fizemos nesta experiência.
Hoje vamos prever uma pontuação de filme usando o Vertex AI AutoML e armazená-lo transacionalmente no MongoDB Atlas. O modelo é modelado com dados armazenados no BigQuery e registrados no Vertex AI. A lista de serviços pode ser composta em três seções:
1. Criação de modelo de ML 2. Interface do usuário/aplicativo de cliente 3. Trigger para prever usando a API de ML
- Fonte de dados de CSV para BigQuery
- MongoDB Atlas para armazenar dados transacionais e alimentar o aplicativo do cliente
- Aplicativo cliente Angular interagindo com o MongoDB Atlas
- Container do cliente implantado no cloud Run
- Dados do BigQuery integrados à Vertex AI para criação de modelos AutoML
- MongoDB Atlas para armazenar dados transacionais e alimentar o aplicativo do cliente
- Aplicativo cliente Angular interagindo com o MongoDB Atlas
- Container do cliente implantado no cloud Run
- Modelo implantado no Registro de modelo de Vertex AI para gerar API de endpoint
- Java Cloud Functions para trigger a invocação do endpoint do modelo de AutoML implementado que recebe detalhes do filme como solicitação da UI, retorna o SCORE de filme previsto e grava a resposta de volta no MongoDB
Você pode usar qualquer conjunto de dados disponível publicamente, criar o seu próprio ou usar o conjunto de dados do CSV no Github. Realizei as etapas básicas de processamento para este experimento no conjunto de dados no link. Sinta-se à vontade para fazer uma limpeza e um pré-processamento detalhados para sua implementação. Abaixo estão as variáveis independentes no conjunto de dados:
- Nome (String)
- Classificação (String)
- gênero (string, categórico)
- Ano (número)
- – Lançamento (Data)
- Realizador (String)
- Escritor (String)
- Estrela (String)
- País (string, categórico)
- Orçamentação (número)
- Empresa (String)
- Tempo de execução (número)
O BigQuery é um armazenamento de dados em várias nuvens e sem servidor que pode ser dimensionado de bytes a petabytes sem sobrecarga operacional. Isso o torna uma ótima opção para armazenar dados de treinamento de ML. Mas há mais: os recursos integrados de aprendizado de máquina (ML) e análise permitem criar projeções sem código usando apenas consultas SQL. E você pode acessar dados de fontes externas com queries federadas, eliminando a necessidade de pipelines ETL complicados. Você pode ler mais sobre tudo o que o BigQuery tem a oferecer na página do produto BigQuery.
O BigQuery permite que você se concentre na análise de dados para encontrar insights significativos. Neste blog, você usará a ferramenta de linha de comandobq para carregar um arquivo CSV local em uma nova tabela do BigQuery. Siga as etapas abaixo para habilitar o BigQuery:
Você usará o Cloud Shell, um ambiente de linha de comando em execução no Google Cloud. O Cloud Shell vem pré-carregado com bq.
- No Console do Google Cloud, na página do seletor de projeto, selecione ou crie um projetodo Google Cloud.
- Certifique-se de que o faturamento esteja ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
- No Console do Cloud, clique em Ativar Cloud Shell. Certifique-se de navegar até o projeto e que ele esteja autenticado. Consulte comandos de configuração dogcloud .
Um conjunto de dados doBigQuery é uma coleção de tabelas. Todas as tabelas em um conjunto de dados são armazenadas no mesmo local de dados. Você também pode anexar controles de acesso personalizados para limitar o acesso a um conjunto de dados e suas tabelas .
- No Cloud Shell, use o comando
bq mk
para criar um conjunto de dados chamado "movies."1 bq mk –location=<<LOCATION>> movies Use –location=LOCATION para definir o local para uma região que você também se lembre de definir como a região para a etapaVERTEX AI (as duas instâncias devem estar na mesma região). - Verifique se o arquivo de dados (.csv) está pronto. O arquivo pode ser baixado do Github. Execute os seguintes comandos no Cloud shell para clonar o repositório e navegar até o projeto:
1 git clone https://github.com/AbiramiSukumaran/movie-score.git 2 cd movie-score Você também pode usar um conjunto dedados público de sua escolha. Para abrir e consultar o conjunto de dados público, siga a documentação. - Use o comando
bq load
para carregar seu arquivo CSV em uma tabela do BigQuery (observe que você também pode fazer o upload diretamente da UI do BigQuery):1 bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \ 2 ./movies_bq_src.csv \ 3 Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string --source_format=CSV
— usa o formato de dados CSV ao analisar o arquivo de dados.--skip_leading_rows=1
— pula a primeira linha no arquivo CSV porque é uma linha de cabeçalho.movies.movies_score
— define a tabela na qual os dados devem ser carregados../movies_bq_src.csv
— define o arquivo a ser carregado. O comandobq load
pode carregar arquivos do Cloud Storage com gs://my_bucket/path/to/file URIs.
Um esquema, que pode ser definido em um arquivo de JSON schema ou como uma lista separada por vírgula. (Use uma lista separada por vírgula.)Viva! Nossos dados CSV agora estão carregados na tabelamovies.movies
. Lembre-se de que você pode criar uma visualização para manter apenas as colunas essenciais que contribuem para o treinamento do modelo e ignorar o restante. - Vamos fazer uma query rápido!Podemos interagir com o BigQuery de três maneiras:
- O comando bq
- API
Suas consultas também podem unir seus dados a qualquer conjunto de dados (ou conjuntos de dados, desde que estejam no mesmo local) que você tenha permissão para ler. Encontre um trecho dos dados de exemplo abaixo:1 SELECT name, rating, genre, runtime FROM movies.movies_score limit 3; Usei o espaço de trabalho do SQL na web do BigQuery para executar queries. O espaço de trabalho SQL é parecido com o seguinte:
Neste experimento, estou prevendo a pontuação de sucesso (pontuação/classificação do usuário) do filme como um modelo de classificação multiclasse no conjunto de dados do filme.
Uma observação rápida sobre a escolha do modelo
Esta é uma escolha experimental do modelo escolhido aqui, com base na avaliação dos resultados Corri alguns modelos inicialmente e, finalmente, continuei com o LOGISTIC REG para mantê-lo simples e obter resultados mais próximos da classificação real do filme em vários bancos de dados. Observe que isso deve ser considerado apenas uma amostra para implementar o modelo e, definidamente, não é o modelo recomendado para esse caso de uso. Outra maneira de implementar isso é prever o resultado do filme como BOM/ MAL usando o modelo deRegressão Logística em vez de prever a pontuação.
Use seus dados do BigQuery para criar diretamente um modelo de AutoML com a Vertex AI. Lembre-se de que também podemos executar o AutoML a partir do próprio BigQuery, registrar o modelo com a VertexAI e expor o endpoint. Consulte a documentação do BigQuery AutoML. Neste exemplo, no entanto, usaremos o Vertex AI AutoML para criar nosso modelo.
Go para o Vertex AI no GCP, ative a API Vertex AI se ainda não tiver feito isso, expanda os dados e selecione Conjuntos de dados, clique em Criar conjunto de dados, selecione o tipo de dados TABULAR e a opção “Regression / classification” e clique em Criar:
Na próxima página, selecione uma fonte de dados:
Escolha a opção "Select a table or view from BigQuery" e selecione a tabela do BigQuery no campo PROCURAR caminho do BigQuery. Clique em Continuar.
Uma nota para lembrar
Os conjuntos de dados da instância do BigQuery e da Vertex AI devem ter a mesma região para que a tabela do BigQuery apareça na Vertex AI.
Ao selecionar sua tabela/visualização de origem, na lista de navegação, lembre-se de clicar no botão de rádio para continuar com as etapas abaixo. Se você clicar acidentalmente no nome da tabela/visualização, será levado ao Dataplex. Você só precisa navegar de volta para a Vertex AI se isso acontecer com você.
Depois que o conjunto de dados for criado, você deverá ver a página Analisar com a opção de treinar um novo modelo. Clique nisso:
Go as etapas do Processo de treinamento.
Deixe Objetivo como Classificação.
Selecione a opção AutoML na primeira página e clique em continuar:
Dê um nome ao seu modelo.
Selecione o nome da coluna de destino como “Score” no menu suspenso exibido e clique em Continuar.
Observe também que você pode marcar a opção “Export test dataset to BigQuery”, que facilita a visualização eficiente do conjunto de testes com resultados no banco de dados, sem uma camada de integração extra ou a necessidade de mover dados entre serviços.
Nas próximas páginas, você tem a opção de selecionar as opções de treinamento avançado necessárias e as horas em que deseja definir o modelo para treinar. Observe que você deve estar atento aos preços antes de aumentar o número de horas de nó que deseja usar para treinamento.
Clique emIniciar treinamento para começar a treinar seu novo modelo.
Depois que o treinamento for concluído, você poderá clicar em Treinamento (sob o título Desenvolvimento de modelo no menu à esquerda) e ver seu treinamento listado na seção Pipelines de treinamento. Clique nele para acessar a página de registro do modelo. Você deve ser capaz de:
- Visualize e avalie os resultados do treinamento.
- Implemente e teste o modelo com seu ponto de conexão API.Depois de implantar o modelo, é criado um endpoint de API que pode ser usado em seu aplicativo para enviar solicitações e obter os resultados da predição do modelo na resposta.
- Prever pontuações de filmes em lote.Você também pode integrar previsões em lote com objetos de banco de dados do BigQuery. Leia a partir do objeto BigQuery (neste caso, criei uma visualização para prever em lote a pontuação de filmes) e escreva em uma nova tabela do BigQuery. Forneça os respectivos caminhos do BigQuery conforme mostrado na imagem e clique em CREATE:Quando ela for concluída, você poderá consultar seu banco de dados para obter os resultados da predição em lote. Mas antes de prosseguir para esta seção, certifique-se de anotar a ID, a localização e os outros detalhes do endpoint do modelo implantado na seção deendpointda Vertex AI.Criamos um modelo de ML personalizado para o mesmo caso de uso usando o BigQuery ML sem código, apenas SQL, e ele já está detalhado em outro blog.
A interface do usuário para este experimento está usando o Angular e MongoDB Atlas e está implantada no Cloud Run. Confira o blog post que descreve como configurar uma instância sem servidor do MongoDB para usar em um aplicativo da web e implantá-la no Cloud Run.
No aplicativo, também estamos utilizando Atlas Search, um recurso de pesquisa de texto completo, integrado ao MongoDB Atlas. O Atlas Search ativa o preenchimento automático ao inserir informações sobre nossos filmes. Para os dados, importamos o mesmo conjunto de dados que usamos anteriormente para o Atlas.
Neste experimento, o MongoDB Atlas é usado para registrar transações na forma de:
- Solicitações de usuários em tempo real.
- Resposta do resultado da previsão.
- Dados históricos para facilitar o preenchimento automático dos campos da interface do usuário.
Se, em vez disso, você quiser configurar um pipeline para transmitir dados do MongoDB para o BigQuery e vice-versa, confira os modelos dedicadosde fluxo de dados.
Depois de provisionar o cluster e configurar o banco de dados, certifique-se de observar o seguinte na preparação da próxima etapa, a criação do trigger:
- Nome do Banco de Dados
- Nome da coleção
Observe que esse aplicativo cliente usa o Cloud Function Endpoint (explicado na seção abaixo) que usa a entrada do usuário para prever a pontuação e inserções do filme no MongoDB.
O Cloud Functions é uma solução de computação leve e sem servidor para os desenvolvedores criarem funções autônomas e de finalidade única que respondam a eventos da nuvem sem precisar gerenciar um servidor ou ambiente de tempo de execução. Nesta seção, prepararemos o código e as dependências do Java Cloud Functions e autorizaremos para que ele seja executado em gatilhos
Lembra-se de como temos o endpoint e outros detalhes da etapa de implantação do ML? Vamos usar isso aqui e, como estamos usando o Java Cloud Functions, usaremos pom.xml para lidar com dependências. Usamos a biblioteca google-cloud-aiplatform para consumir a API de endpoint do Vertex AI AutoML:
1 <dependency> 2 <groupId>com.google.cloud</groupId> 3 <artifactId>google-cloud-aiplatform</artifactId> 4 <version>3.1.0</version> 5 </dependency>
- Procure Cloud Functions no console do Google Cloud e clique em "Create Function. "
- Insira os detalhes de configuração, como Ambiente, Nome da função, Região, Trigger (neste caso, HTTPS), Autenticação de sua escolha, ative "Require HTTPS, " e clique em Avançar/Salvar.
- Na próxima página, selecione Tempo de execução (Java 11), Código-fonte (embutido ou upload) e comece a editar
- Se você estiver usando o Gen2 (recomendado), poderá usar o nome da classe e o pacote no estado em que se encontram. Se você usa o Cloud Functions do Gen1 , altere o nome do pacote e o nome da classe para "Example."
- No arquivo .java , você notará a parte em que nos conectamos à instância do MongoDB para escrever dados: (use suas credenciais)
1 MongoClient client = MongoClients.create(YOUR_CONNECTION_STRING); 2 MongoDatabase database = client.getDatabase("movies"); 3 MongoCollection<Document> collection = database.getCollection("movies"); - Você também deve observar a parte de invocação do modelo de ML no código java (use seu endpoint):
1 PredictionServiceSettings predictionServiceSettings = PredictionServiceSettings.newBuilder().setEndpoint("<<location>>-aiplatform.googleapis.com:443") 2 .build(); 3 int cls = 0; 4 … 5 EndpointName endpointName = EndpointName.of(project, location, endpointId); - Go em frente e implemente a função quando todas as alterações forem concluídas. Você deve ver o URL do endpoint que será usado no aplicativo cliente para enviar solicitações para essa função do Cloud.
É isso ai! Não há mais nada a fazer nesta seção. O endpoint é usado no aplicativo cliente para que a interface do usuário envie parâmetros do usuário para o Cloud Functions como uma solicitação e receba a pontuação de filmes como resposta. O endpoint também escreve a resposta e a solicitação na collection do MongoDB.
Obrigado por nos acompanhar nesta jornada! Como recompensa pela sua paciência, você pode conferir a pontuação prevista para o seu filme favorito.
- Analise e compare a precisão e outros parâmetros de avaliação entre o BigQuery ML manualmente usando SQLs e o modelo Vertex AI Auto ML.
- Brinque com as variáveis independentes e tente aumentar a precisão do resultado da previsão.
- Dê um passo adiante e tente o mesmo problema como um modelo de regressão linear, prevendo a pontuação como um valor de ponto flutuante/decimal em vez de números inteiros arredondados.
Para saber mais sobre alguns dos principais conceitos neste post, você pode mergulhar aqui: