Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Learn why MongoDB was selected as a leader in the 2024 Gartner® Magic Quadrant™
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

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
Google cloudIAAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
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.

O experimento

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.

Resumo da arquitetura

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

Criação de modelo ML

  1. 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
  2. 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
  3. 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
Diagrama de arquitetura.

Preparando dados de treinamento

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)

Conjunto de dados do BigQuery usando o Cloud Shell

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:

Ative o Cloud Shell e crie seu projeto

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.
  1. No Console do Google Cloud, na página do seletor de projeto, selecione ou crie um projetodo Google Cloud.
  2. Certifique-se de que o faturamento esteja ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
  3. Ative a API do BigQuery e abra a interface do usuário da web do BigQuery.
  4. 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 .

Criando e carregando o conjunto de dados

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 .
  1. No Cloud Shell, use o comandobq mkpara criar um conjunto de dados chamado "movies."
    1bq 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).
  2. 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:
    1git clone https://github.com/AbiramiSukumaran/movie-score.git
    2cd 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.
  3. Use o comandobq 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 \
    3Id: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 tabela movies.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.
  4. Vamos fazer uma query rápido!
    Podemos interagir com o BigQuery de três maneiras:
    1. O comando bq
    2. 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:
    1SELECT 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:
    Captura de tela da interface do usuário da Web do BigQuery mostrando uma consulta para a tabela de filmes
    Tabela mostrando o resultado da query anterior

Prevendo a pontuação de sucesso do filme (pontuação do usuário em uma escala de 1a10)

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.

Como usar dados do BigQuery na integração do Vertex AI AutoML

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.

Criando um conjunto de dados de Vertex AI

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:
Captura de tela da página "Criar conjunto de dados" da Vertex AI

Selecione a fonte de dados

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.
Captura de tela da página da Vertex AI "Criar um conjunto de dados" mostrando a seção "Selecionar fonte de dados"
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ê.

Treine seu modelo

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:
Captura de tela da interface do usuário da Vertex AI mostrando a seção "Analisar" do conjunto de dados

Configurar etapas de treinamento

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:
Captura de tela da seção "Método de treinamento" na página "Treinar novo modelo" na AI do Vertex
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.
Captura de tela da seção "Detalhes do método" na página "Treinar novo modelo" na Vertex AI
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.
Captura de tela da seção "Computação e preços" na página "Treinar novo modelo" na IA da Vertex

Avalie, implante e teste seu 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:
  1. Visualize e avalie os resultados do treinamento.
    Captura de tela da seção "Avaliar" na página "Treinamento" na Vertex AI
  2. 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. Captura de tela da seção "Teste e distribuição" na página "Treinamento" na AI da Vertex
  3. 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: Captura de tela da caixa de diálogo "Nova predição em lote" na AI da Vertex
    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.

Aplicativo da web sem servidor com MongoDB Atlas e Angular

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.
Demonstração dinâmica do aplicativo de pontuação de filmes
Você pode encontrar o código-fonte do aplicativo no repositório dedicado do Github.

MongoDB Atlas para dados transacionais

Neste experimento, o MongoDB Atlas é usado para registrar transações na forma de:
  1. Solicitações de usuários em tempo real.
  2. Resposta do resultado da previsão.
  3. 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:
  1. Nome do Banco de Dados
  2. 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.

Java cloud trigger para trigger a invocação de ML a partir da UI

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>
  1. Procure Cloud Functions no console do Google Cloud e clique em "Create Function. "
  2. 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.
    Captura de tela da página "Configuração" etapa "Criar função" no Google Cloud Functions
  3. Na próxima página, selecione Tempo de execução (Java 11), Código-fonte (embutido ou upload) e comece a editar
    Captura de tela da página "Código" da etapa "Criar função" no Google Cloud Functions
  4. Você pode clonar o código-fonte Java e pom.xml do repositório GitHub.
    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."
  5. No arquivo .java , você notará a parte em que nos conectamos à instância do MongoDB para escrever dados: (use suas credenciais)
    1MongoClient client = MongoClients.create(YOUR_CONNECTION_STRING);
    2MongoDatabase database = client.getDatabase("movies");
    3MongoCollection<Document> collection = database.getCollection("movies");
  6. Você também deve observar a parte de invocação do modelo de ML no código java (use seu endpoint):
    1PredictionServiceSettings predictionServiceSettings = PredictionServiceSettings.newBuilder().setEndpoint("<<location>>-aiplatform.googleapis.com:443")
    2 .build();
    3 int cls = 0;
    4
    5 EndpointName endpointName = EndpointName.of(project, location, endpointId);
  7. 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.

Qual é o próximo?

Obrigado por nos acompanhar nesta jornada! Como recompensa pela sua paciência, você pode conferir a pontuação prevista para o seu filme favorito.
  1. 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.
  2. Brinque com as variáveis independentes e tente aumentar a precisão do resultado da previsão.
  3. 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:

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Como implementar o MongoDB Atlas com o AWS CDK no TypeScript


Jan 23, 2024 | 5 min read
Tutorial

Uma introdução aos índices para MongoDB Atlas Search


Feb 03, 2023 | 7 min read
Início rápido

MongoDB com agente Bedrock: tutorial rápido


Jul 01, 2024 | 6 min read
Tutorial

Como usar o PyMongo para conectar o MongoDB Atlas ao AWS Lambda


Apr 02, 2024 | 6 min read
Sumário