EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Script in the Stars: Preveja seu futuro com Tensorflow e MongoDB Charts

Anaiya Raisinghani15 min read • Published Aug 21, 2024 • Updated Aug 21, 2024
IAPythonMongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
As meninas estão passando por isso. De situações de fim de navios, a dramas de grupos de amigos, a pequenos incômodos (como meus pacotes sendo roubados e depois devolvidos), parece que o mês de julho foi agitado, para dizer o mínimo, para mim e praticamente todos com quem conversei.
Todas as sessões de hangout nas últimas semanas terminaram com: "I don’t know what’s going on, but something is in the air!" Bem, e se algo não estiver no ar, mas sim nas estrelas?
Vamos usar TensorFlow e MongoDB Charts para analisar seis meses de dados do horóscopo e descobrir se esses contratempos são apenas uma questão de sorte ou se estão realmente inscritos em nosso destino.
Neste tutorial, usaremos o aprendizado de máquina para realizar a análise de sentimentos em um conjunto de dados de horóscopos, o TensorFlow para criar e treinar um modelo usando esse conjunto de dados para ver se as coisas melhorarão em um futuro próximo e o MongoDB Charts para ajudar a visualizar nossos dados ao longo do caminho.
Antes de começarmos a descobrir nosso futuro, Go primeiro examinar algumas das plataformas importantes usadas neste tutorial.

TensorFlow

O TensorFlow é uma biblioteca de código aberto que os desenvolvedores podem usar para realizar todo o tipo de tarefas de machine learning. Ele foi desenvolvido pelo Google Brain e é usado por desenvolvedores e cientistas de dados para uma infinidade de projetos, como processamento de linguagem natural, reconhecimento de imagem, reconhecimento de voz e muito mais. O TensorFlow nos permitirá criar e treinar nosso modelo de aprendizado de máquina para nos informar se os horóscopos são positivos ou negativos, o que significa que podemos ter mais informações sobre horóscopos passados e futuros.

MongoDB Charts

O MongoDB Charts é uma ferramenta dentro do MongoDB Atlas que permite aos desenvolvedores visualizar facilmente os dados armazenados em suas collection. A melhor parte do Charts é que ele permite que os usuários vejam visualizações em tempo real à medida que seus bancos de dados mudam e evoluem. Isso é ideal para o nosso projeto, pois nos ajudará a entender e visualizar melhor nossos dados à medida que avançamos no tutorial.

Pré-requisitos

Para ter sucesso neste tutorial, você precisará de:
  1. Um entendimento básico do TensorFlow (e uma disponibilidade para aprender mais!).
  2. Um IDE de sua escolha – este tutorial usa um notebookGoogle Colab .
  3. Uma conta do MongoDB Atlas.
  4. MongoDB Compass baixado localmente.
  5. O conjunto de dadosrelacionado do Kaggle.
Depois que seu cluster MongoDB Atlas for criado, estamos prontos para começar. Nossos objetivos para este tutorial são usar um modelo pré-treinado para gerar rótulos para nosso conjunto de dados e, em seguida, treinar um modelo do zero usando nosso conjunto de dados rotulado. Tenha isso em mente enquanto lê!

Conjunto de dados

Para economizar nosso tempo, raspei todos os legoshoróscopos diários de 28 de janeiro de 2024 a (e incluindo) 28 2024 para todos os zodativos 12 e os salvei em um arquivo com a data, o nome do zodativo e o próprio hexadecimal. Essas datas foram escolhidas porque são de cerca de seis meses antes da criação deste tutorial.
Certifique-se de ter baixado o arquivoanaiya-six-months-horoscopes.csvda Kaggle em seu ambiente.
Após o download do arquivo, quando aberto, ele ficará assim: Arquivo .csv com horóscopos copiados
Quando você tiver seu conjunto de dados em mãos, poderemos descobrir o sentimento de cada horóscopo usando a análise de sentimento!

Análise de sentimento em meus horóscopos raspados

A análise de sentimento é uma forma de descobrir o tom emocional de um texto. Estamos apenas classificando nossos horóscopos como positivos ou negativos. Não vamos nos preocupar com nenhum que seja neutro.
Felizmente para nós, neste momento do tutorial, não precisamos criar um modelo (ainda!). Podemos usar um modelo pré-treinado para descobrir se nossos horóscopos dos últimos seis meses são positivos ou negativos.
Primeiro, especifique suas importações. A mais importante em questão é a bibliotecatransformersda Hugging Face. Essa biblioteca inclui vários modelos pré-treinados que podem ajudar a descobrir a classificação de texto:
Depois que tudo for importado, vamos escolher qual modelo pré-treinado queremos usar. Como este é um tutorial do TensorFlow, podemos ir em frente e usar o modelo "distilbert-base-uncased-finetuned-sst-2-english", pois ele é compatível com o TensorFlow, mas há muitas opções disponíveis para escolher se você quiser substituí-lo.
No código abaixo, estamos carregando nosso modelo pré-treinado e os pré-treinados tokenizer, confige model de nossa biblioteca transformers . Otokenizer converte nosso texto em IDs, config contém todas as nossas informações de configuração e model é nosso modelo pré-treinado carregado com TensorFlow. Em seguida, escrevemos uma função para encontrar o sentimento do nosso texto, pegando o texto e tokenizando-o e, em seguida, encontrando a probabilidade do sentimento usando a funçãosoftmax . Então, a maior probabilidade é categorizada e salva.
Aqui, apenas para testar e garantir que o modelo estava funcionando corretamente, copiei um horóscopo que está no espectro negativo.
teste do modelo distilbert
Isso é ótimo! Como podemos ver, esse horóscopo de Capricórnio é de fato negativo, e pudemos usar nosso modelo pré-treinado para classificá-lo.
Mas, agora precisamos fazer algumas mudanças porque não queremos colocar todos os horóscopos manualmente como strings individuais. Queremos:
  1. Use esse modelo pré-treinado, coloque em nosso arquivo.csvtodos os nossos horóscopos e descubra a análise de sentimento de cada horóscopo em nosso arquivo.
  2. Incorpore uma nova coluna de "sentimento" que incluirá 1 se o horóscopo for positivo e 0 se o horóscopo for negativo.
Estamos fazendo isso para que, quando chegarmos à parte em que construímos nosso modelo real, possamos usar um novo arquivo com dados de horóscopo e análise de sentimento para treinar nosso modelo em um conjunto completamente novo de horóscopos em que nosso modelo não foi treinado.
Primeiro, vamos escrever uma função para aplicar cada sentimento aos nossos horóscopos:
Agora, precisamos carregar nosso arquivoanaiya-six-months-horoscopes.csv. Para fazer alterações em nosso dataframe, vamos primeiro instalar a bibliotecapandas .
Leia em nosso arquivo:
Quando aplicamos cada sentimento, temos que nos certificar de que temos uma coluna para mantê-los:
Nossa última etapa para esta parte é salvar nosso novo dataframe em um novo arquivo csv. Sinta-se livre para nomeá-lo o que quiser. Estou apenas nomeando anaiya-six-months-horoscopes-sentiment.csv:
Se você estiver usando o Colab, verá o novo arquivo salvo no lado esquerdo da tela:
Nosso antigo arquivo de horóscopo e nosso novo arquivo
Se abrirmos, veremos que uma nova linha de sentimentos foi incorporada com 1s para horóscopos positivos e 0s para horóscopos negativos. nosso novo sentimento .csv arquivo
Go ao MongoDB Compass, carregar nosso arquivo.csve, em seguida, visualizar nossos dados no MongoDB Charts, antes de usarmos esses dados para treinar e testar um modelo usando o TensorFlow.

Visualize nossos dados usando o MongoDB Charts

Como o MongoDB Compass é ótimo para receber arquivos.csv, vamos usar o Compass a nosso favor.
Não é necessário usar o MongoDB Compass nesta etapa para escrever em seus dados, mas ele nos salva algumas linhas de código, então se você o tiver baixado localmente, fique à vontade para usá-lo.
Certifique-se de que ele foi baixado localmente e que você importou com sucesso seus dados para um novo banco de dados e collection. Vamos usar a mesma collection para o MongoDB Charts, então isso é muito importante.
Depois de importados, clique na aba "Charts " na parte superior do painel do MongoDB Atlas e selecione sua fonte de dados.
Podemos personalizar exatamente como queremos ver nossos dados. Optei por colocar nosso sentimento no eixo Y e nossos zodíacos no eixo X. Em seguida, cliquei em "Subset " para ver a distribuição.
detalhes do gráfico
Vamos dar uma olhada mais de perto no nosso gráfico recém-desenvolvido: Gráfico em MongoDB Charts de fuso horário e distribuição
Então, nesse gráfico, podemos ver que há muito mais horóscopos positivos em nosso conjunto de dados do que negativos, e se criarmos outro gráfico para mostrar esse valor, isso é o que vemos: Gráfico de seis meses positivo versus negativo
Podemos ver que existem 1,614 herócopos positivos e 582 heróscopos negativos. Esta é realmente uma ótima notícias - significa que as estrelas não estão contra todos nós! Também podemos ver que Peixes e Leão estão prosperando nos últimos seis meses, enquanto Escorpião está sendo prejudicado (desculpe, Escorpião!).
Isso nos dá uma ótima visão de como nosso conjunto de dados está distorcido, pois é crucial visualizá-lo antes de treinar um modelo para garantir que ele esteja equilibrado e que nosso modelo esteja aprendendo corretamente.
Pela nossa visualização, fica claro que nosso conjunto de dados está desequilibrado, o que significa que teremos de Go por algumas etapas para garantir que estamos alimentando nosso modelo com um conjunto de treinamento adequado. Mais informações sobre isso abaixo na seção "Balance dataset ".
Agora que temos uma ideia dos dados em questão, vamos começar a treinar e testar nosso modelo no TensorFlow.

Modelo de treinamento e teste no TensorFlow

Estamos usando esse conjunto de dados para treinar e testar nosso modelo para ver se incorporamos novos horóscopos (por exemplo, um horóscopo semanal que não está em nosso conjunto de dados treinado) e podemos ver se eles são positivos ou negativos.
Primeiro, vamos importar nosso hub TensorFlow:
Podemos então carregar nosso novo arquivo.csv, mas só precisamos nos concentrar nas colunas que queremos usar, que são "horoscope " e "sentiment ":
Nossa próxima etapa é dividir nosso conjunto de dados de sentimentos em três conjuntos separados. Precisamos de um conjunto de treinamento, um conjunto de validação e um conjunto de teste. Antes de podermos fazer isso, porém, precisamos garantir que nosso conjunto de dados esteja equilibrado!

Conjunto de dados balanceado

Equilibrar nosso conjunto de dados é necessário, pois precisamos ter certeza de que nosso modelo é treinado na mesma quantidade de horóscopos negativos e positivos. Caso contrário, nosso modelo pode ser treinado apenas em horóscopos positivos e não aprenderá a reconhecer horóscopos negativos.
Primeiro, vamos misturar nosso conjunto de dados usando essa linha simples:
Agora, dividamos nossas colunas em variáveis X e Y:
Teremos que importar algumas bibliotecas úteis para que possamos conseguir isso, especialmente porque estamos conduzindo o Random Under Sampling, já que há mais horóscopos positivos do que negativos. O Random Under Sampling nos permite remover horóscopos aleatórios da classe majoritária (ou da classe do horóscopo positivo) para garantir que tenhamos uma distribuição mais igualitária de horóscopos positivos e negativos com os quais o modelo possa aprender.
Depois de concluído, vamos verificar se temos o mesmo número de horóscopos negativos e positivos em nosso conjunto de treinamento:
quantidade de horóscopos positivos e negativos em nosso conjunto de treinamento
Ambos têm 495! Isso é fantástico.

Dividir nosso conjunto de dados

Como nosso conjunto de dados agora está balanceado, podemos dividir nosso conjunto de dados em nossos três conjuntos separados para nosso modelo TensorFlow. Mais uma vez, eles são nosso conjunto de treinamento, nosso conjunto de validação e nosso conjunto de teste. Você pode dividi-lo em qualquer porcentagem que desejar, mas é recomendável fazer uma divisão de treinamento 80% e uma divisão de conjunto de validação 20%.
Vamos ver rapidamente os tamanhos de cada conjunto apenas para ter certeza de que estamos satisfeitos com a distribuição:
Nossos conjuntos para treinar nosso modelo
Agora, e essa parte é muito crucial para a próxima seção, precisamos combinar nossos X_test e y_test de volta a um dataframe para que os rótulos de nossas colunas estejam de volta no lugar para quando convertermos para um conjunto de dados do TensorFlow, como eram removido ao equilibrar:
Depois de executar isso, podemos seguir em frente.

Converter para o conjunto de dados do TensorFlow

Agora, vamos converter nossos dataframes em conjuntos de dados do TensorFlow para que possamos carregá-los corretamente em nosso modelo.
Ele converte cada conjunto de dados de treinamento, validação e teste em um conjunto de dados do TensorFlow e, em seguida, embaralha tudo novamente e agrupa os dados para você!
Fiz algumas alterações, mas, se estiver usando um conjunto de dados diferente, sinta-se à vontade para incorporar suas próprias alterações.
Apenas para verificar e garantir que tudo tenha sido ativado pelo TensorFlow, vamos escrever uma linha para ver como é o nosso train_data:
Nosso conjunto de dados foi convertido em um conjunto de dados do TensorFlow
Pareço ótimo! Agora, queremos incorporar e construir nosso modelo.

Camada de incorporação

A camada de incorporação que usaremos é do TensorFlow Hub. Você mesmo pode fazer essa etapa manualmente, mas não precisa reinventar a roda! Podemos fazer isso com duas linhas simples:
Lembre-se de que o trainable=True garante que essas camadas também sejam habilitadas junto com o restante do modelo que estamos construindo abaixo.
Essa camada de incorporação converte nosso texto em incorporações para que o modelo entenda melhor, já que as máquinas não entendem texto — apenas números. Como estamos usando a camada "nnlm-en-dim50/2", estamos apenas produzindo incorporações 50 dimensionais para palavras em inglês.

Modelo

Agora, podemos começar a construir nosso modelo TensorFlow de rede neural. Queremos que várias camadas aqui sejam construídas usando o modelo Sequential, pois é uma forma de empilhar as camadas uma a uma, além de ser o modelo mais fácil de entender e visualizar. Também usaremos camadas Dropout, pois é uma boa maneira de evitar o ajuste excessivo, que pode desviar o modelo e fornecer resultados imprecisos.
Vamos usar três camadas de dropout com 40%, 30% e 20%, o que significa que essa porcentagem de neurônios de nossas redes neurais será descartada aleatoriamente, ou definida como zero, para que o modelo possa se tornar mais ajustado nos dados.
Decidi colocar três camadasDensediferentes, pois elas extraem e aprendem padrões e recursos complexos dos vetores de incorporação e os passam para a próxima camada.
Em nossa camada de saída, usamos sigmoid como nossa função de ativação, pois ela sempre retorna um valor entre 0 e 1, o que a torna perfeita para a análise de sentimentos.
Vamos compilar e depois executar nosso modelo:
Estou usando uma taxa de aprendizado de 0.0001, porque alterar sua taxa de aprendizado altera a frequência com que os pesos do seu modelo mudam para realmente otimizar o desempenho do seu modelo, mas você pode usar a taxa de aprendizado que fizer mais sentido para seu caso de uso. Normalmente, é um número baixo entre 0 e 1 e influencia a rapidez com que o modelo aprende. Sem dúvidas, jogue com a taxa de aprendizado e veja os resultados.
Depois que nosso modelo for compilado, podemos treiná-lo com base em nossos dados de treinamento enquanto usamos os dados de validação para verificar e ver o desempenho do modelo em dados inéditos após cada época (uma única passagem por todo o ciclo de treinamento):
saída após executar o modelo
Podemos aprender muito sobre nosso modelo com os resultados. Aqui, podemos ver que nossa perda diminuiu de 66% para 47%, enquanto nossa perda de validação diminuiu de 68% para 59%. Também podemos ver que nossa precisão passou de 60% para 89%, enquanto nossa precisão de validação aumentou de 60% para 69%.
Portanto, é ótimo que tenhamos diminuído nossa perda de treinamento e nossa perda de validação. Uma diminuição na perda de treinamento significa que o modelo está melhorando com base nos dados de treinamento, enquanto uma diminuição na perda de validação significa que o modelo está generalizando bem com base nos dados não vistos.
A precisão da validação em 69% é boa, mas para melhorar esse número, provavelmente precisaríamos de mais épocas, um conjunto de treinamento maior, mais camadas, etc. Divirta-se ajustando e vendo seus resultados com essas mudanças!
Vamos avaliar rapidamente nosso modelo em nosso conjunto de dados de teste e verificar a perda e a precisão gerais:
depois de avaliar em nosso conjunto de dados de teste
Aqui, podemos ver que nossa perda é bastante alta em 59%, enquanto nossa precisão é 69%. Como nosso conjunto de dados é relativamente pequeno e usamos apenas cinco épocas, isso é honestamente esperado, e devemos nos concentrar no fato de que nossa precisão de validação tem aumentado a cada época e sua perda tem diminuído.
Go em frente e ver se agora podemos usar nosso modelo para prever o sentimento de horóscopos invisíveis!

Previsão do novo horóscopo

Para que nossa função preveja um novo horóscopo, precisamos fazer algumas coisas: converter nossa string do horóscopo em um tensor que o TensorFlow possa entender. Precisamos que nosso modelo faça uma predição em que ele retornará uma probabilidade.
Com base nessa probabilidade, ele nos dirá se o novo horóscopo é positivo ou negativo.
Obter a predição a partir da probabilidade acabou sendo a parte mais difícil, mas isso pode ser feito facilmente com tf.squeeze.
Podemos fazer isso dessa forma:
Horóscopos positivos e negativos previstos corretamente
Parece que nosso modelo está devidamente ajustado para entender o sentimento positivo e negativo. É importante observar aqui que os horóscopos devem ser vagos. É raro encontrar um horóscopo totalmente negativo ou totalmente positivo. Portanto, espera-se que um conjunto de dados treinado em horóscopos provavelmente gire em torno do 0. Limite 5, já que muitos horóscopos são criados para serem interpretados.

As coisas vão melhorar no futuro?

Agora podemos Go em frente e verificar se as coisas vão melhorar para nós daqui para frente! Para esta parte, salvei o próximo horóscopo semanal em www.horoscope.com para todos os 12 signos do zodíaco. Você pode encontrá-los no arquivonew-week-horoscope2.csv, também no meu Kaggle.
Vamos executá-los através do nosso modelo e ver a saída:
Previsão de horóscopos semanais que o modelo nunca viu antes
Agora, vamos salvá-lo no MongoDB no mesmo banco de dados que criamos no início do nosso tutorial, mas em uma nova collection, para que possamos usar o MongoDB Charts para visualizar nossos novos horóscopos:
Primeiro, instale pymongo:
Agora, podemos nos conectar ao nosso cluster MongoDB Atlas e escrever em nossos dados:
Nova collection com o nosso new_week_horoscope
Nossos horóscopos estão salvos! Go visualizá-los. visualização usando MongoDB Charts em nossos novos fusos horários
Depois de fazer um gráfico de nossos horóscopos da nova semana, parece que todos terão uma ótima semana, exceto Câncer e Peixes. Não podemos todos ser vencedores.

Conclusão e aprendizados

Neste tutorial, realizamos uma análise de sentimento em nosso arquivo.csvpara descobrir se nossos horóscopos eram positivos ou negativos. Em seguida, criamos um novo arquivo.csvque incluía nossa análise de sentimento para alimentar um modelo doTensorFlow para que ele pudesse prever com precisão o sentimento de horóscopos que não tinha visto antes e, em seguida, usamos esse modelo treinado para prever nossos horóscopos daqui para frente. Ao longo do caminho, utilizamos o MongoDB Charts para visualizar nossos dados de uma maneira divertida!
Este tutorial foi superdivertido de criar e espero que todos tenham aproveitado para lê-lo. Meu maior conselho ao trabalhar com modelos do TensorFlow e, especialmente, ao treinar e criar seus próprios, é garantir que seu conjunto de dados esteja equilibrado e mudar as coisas durante o ajuste fino. Eu também recomendo se você estiver usando seus próprios dados para garantir que seu conjunto de dados seja grande o suficiente. Isso foi originalmente feito em apenas três semanas de horóscopos e os resultados não foram ótimos. Para o modelo em si, você pode brincar com as camadas, a taxa de desistência, a taxa de aprendizado e até mesmo o número de épocas. Lembre-se também de que, se você estiver reorganizando e reequilibrando seus dados de treinamento, seus resultados variarão cada vez que você executar seu modelo. Boa sorte!
Se você tiver alguma dúvida ou quiser se conectar, junte-se a nós no MongoDB Developer Community.

Recursos usados para ajudar a criar este tutorial

Análise de sentimentos : Saiba mais sobre análise de sentimentos com o BERT.
Construindo e testando seu modelo: Para entender como construir e treinar meu modelo, assisti a este vídeo de freeCodeCamp.org e usei algum código de esqueleto desses Docsdo TensorFlow.
Balanceamento do conjunto de dados: Para obter ajuda sobre como equilibrar seu conjunto de dados, dê uma olhada neste recurso do Medium e neste recurso do Semaphoreci.
Convertendo em um conjunto de dadosdo TensorFlow: Documentaçãodo TensorFlow
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

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

7 coisas que aprendi ao modelar dados para as estatísticas do YouTube


Sep 11, 2024 | 13 min read
Tutorial

Procedimento para permitir que usuários "não raiz" parem/iniciem/reiniciem o processo "mongod"


May 16, 2022 | 3 min read
exemplo de código

Salvando dados no Unity3D usando SQLite


Sep 07, 2022 | 13 min read
Artigo

Arquiteturas de aplicativos ativo-ativo com o MongoDB


Sep 23, 2022 | 16 min read
Sumário