Sentiment analysis com tensorflow 2.0 e word embedding layer

Word embedding é uma forma muito interessante para criar uma representação numérica para um texto. Ao contrário de abordagens clássicas como one hot encoding ou TD-IDF, word embedding consegue representar as palavras e seu contexto com meio de um embedding space.

Existem várias formas para se criar um embedding space e eu já escrevi sobre estas formas neste artigo https://hackinganalytics.com/2018/01/31/word-embedding. Fique a vontade para consultá-lo.

Em sua forma mais comum (word2vec), uma camada word embedding pode ser treinada por meio de uma rede neural com uma camada de entrada, uma camada escondida e uma camada de saída. Sendo que as informações da camada escondida representam o embedding space.

Em termos de implementação, podemos criar o nosso próprio embedding space (utilizando um vocabulário próprio) ou podemos reutilizar um embedding space pré-treinado (por exemplo, BERT).

A parte prática deste artigo está disponível no seguinte link: https://anaconda.org/weslleymoura/tensorflow_2_analise_sentimento_word_embedding

Caso você esteja curioso em saber como poderíamos criar este mesmo modelo sem o uso de word embedding, veja neste artigo https://hackinganalytics.com/2017/10/27/analise-de-sentimento-com-multilayer-perceptron-model-baseado-em-bag-of-words.

Abraços!

Preparando dados para dashboard – Exemplo Google Data Studio

Nem sempre os dados estão no formato correto para criação de relatórios. É muito comum termos que realizar algumas limpezas e transformações para que tenhamos menos trabalho durante a criação daquele dashboard! Neste artigo vou exibir um caso de uso no qual passei por esta situação.

Os dados são muito simples: referem-se aos dados de census de algumas regiões. O relatório final foi publicado neste link https://datastudio.google.com/u/0/reporting/02213feb-63fd-4ef8-8cc7-be17e3c5159b e as instruções de uso do relatório podem ser acessadas no meu repositório https://github.com/weslleymoura/hackinganalytics/tree/master/data_prep_dashboard_google_data_studio

Porém, o que eu realmente quero mostrar neste artigo é o pré-processamento que tive que fazer nos dados para que fosse possível criar o relatório. Por exemplo, transposição de dados, mapeamento, agrupamento e cálculo de métricas do tipo period over period.

Acesse meu notebook aqui https://anaconda.org/weslleymoura/data_preparation_for_dashboarding/notebook. Espero que tenha alguma utilidade para você algum dia!

Abraços!

Time series forecasting com Python

Neste artigo vou passar pelas principais etapas de modelagem para criação de um modelo de forecasting. O notebook foi escrito em Python e possui conceitos importantes sobre decomposição de série temporal, diferenciação, estacionariedade e visualizações.

O material está disponível em https://anaconda.org/weslleymoura/time_series_forecasting_python/notebook

Também disponibilizei o material no meu repositório do git https://github.com/weslleymoura/hackinganalytics/tree/master/time_series_forecasting_com_python

Abraços!

Um modelo completo de machine learning (de ponta a ponta)

Se você está começando a estudar machine learning, é comum que tenha várias dúvidas sobre como treinar e usar seus modelos. As pessoas falam sobre uma série de termos, como análise exploratória de dados, data transformation, feature selection, model selection, cross-validation…porém, você sabe como e quando deve usar todos estes componentes no seu modelo? E se você precisasse implementar o modelo em um ambiente de produção? Sabe como deveria organizar seu script de treino e inferência? Este artigo foi feito para esclarecer todos estes pontos, com muita prática!

No notebook abaixo, utilizei o desafio do Titanic (https://www.kaggle.com/c/titanic)  para criar um modelo completo de classificação binária. Você vai encontrar as principais etapas necessárias, assim como precauções, para treinar e implementar um modelo deste tipo.

Tentei ser o mais específico possível e também criei uma série de funções que pode te ajudar a automatizar os seus próximos modelos. Portanto, mesmo que já tenha experiência na área, creio que vale a pena guardar este notebook para consulta futura.

Se você realmente quer entrar de cabeça nisso, sugiro também que leia o relatório que também estou compartilhando abaixo. Nele você encontrará um exemplo completo de como reporta/documentar seu projeto de machine learning.

Espero que os materiais sejam úteis, abraços!

Link para o notebook: https://anaconda.org/weslleymoura/titanic_final/notebook

Link para o relatório: relatório completo

Redes neurais autoencoders – Feed Forward

Autoencoder é uma classe de arquitetura de rede neural que tem como objetivo aprender como comprimir/reduzir um conjunto de dados (etapa conhecida como encoder) e, em seguida, aprende a reconstruir os dados a partir da versão que foi previamente reduzida (etapa conhecida como decoder). Espera-se que os dados reconstrúidos sofram alguma perda de informação (preferencialmente mínima) durante o processo (mensurada pela reconstruction loss).

Assim que a etapa descrita acima como encoder é finalizada, os dados são armazenados, de forma reduzida, em uma camada conhecida como compressed representation (bottleneck da rede).

Autoencoders utilizam os dados da própria camada de entrada como variável resposta na camada de saída! Isso porque o que interessa mesmo nesta rede é a função aprendida pelas camada intermediárias do encoder. Isso pode não fazer muito sentido à primeira vista, mas veja alguns casos de uso aplicáveis ao contexto de autoencoders:

  • Redução de dimensionalidade: Autoencoder reduz a dimensionalidade dos dados ao aprender como ignorar ruídos existentes nas informações.
  • Geração de novas informações: algumns tipos de auencoder (Variational Autoencoders) são capazes de aprender a distribuição dos dados e gerar novas informações que seguem a mesma distribuição.

Opa! Então autoencoders possuem variações em sua arquitetura? Sim! Existem autoencoders para redes feed forward, LSTM, CNN…A figura abaixo fornece a idéia geral deste tipo de rede, mas lembre-se que a arquitetura mais detalhada vai depender do tipo de rede neural que você está tentando construir o autoencoder.

autoencoder_schema

Componentes

Vale a pena ressaltar os seguintes componentes dos autoencoders:

  1. Encoder: etapa pela qual o modelo aprende a criar uma versão comprimida dos dados
  2. Compressed representation (bottleneck): Esta é a camada que armazena a representação comprimida calculada pelo encoder
  3. Decoder: Etapa responsável por reconstruir os dados previamente codificados
  4. Reconstructions loss: Métrica que mede a qualidade da reconstrução feita pelo decoder (queremos minimizar este número).

Arquitetura

Como já dito, pode-se criar diferentes arquiteturas de redes neurais para se trabalhar com autoencoders, por exemplo, FeedForward network, LSTM, ou Redes Neurais Convolucionais (CNN). No entanto, independente destas variações, a estrutura geral do modelo seguirá a lógica que comentamos até aqui.

arquitetura_autoencoder_fully_connected

Tão importante que vou falar novamente…onde está minha variável target?

Autoencoders utilizam os próprios valores de entrada como variável resposta! Veja que nossa rede possui a mesma quantidade de neurônios nas camadas de entrada e saída. Note também que aquela camada central é o local onde teremos a versão reduzida dos nossos dados.

Se você já ouviu falar sobre Principal Component Analysis (PCA), vale a pena comentar que, sem nenhuma regularização, esta rede está aprendendo a aproximar a função dos componentes principais.

Afinal, este tipo de modelo é supervisionado ou não supervisionado?

Faça sua própria argumentação 🙂 Analisando apenas os dados que foram usados no exemplo acima, não existe oficialmente uma variável resposta…apenas dados de entrada. Neste sentido poderíamos argumentar que é uma abordagem não supervisionada com o intuito de reduzir a dimensionalidade dos dados.

No entanto, se olharmos para a arquitetura da rede, claramente a rede possui uma variável resposta (mesmo que sejam os próprios dados de entrada). Neste sentido, de fato a rede está sendo supervisionada.

Como a parte mais importante desta rede são as camadas intermediárias, autoencoders são comumente classificados como aprendizagem não supervisionada. Mas leve sempre em conta este pequeno “debate” que tivemos 🙂

Prontos para criar o modelo? Esse notebook possui referências e implementação em tensorflow.
https://colab.research.google.com/drive/1wUc2iPtxOvLVuRXrFx-qaOF6UR15XXvu

Abraços!

Redes neurais do zero – Parte 3 de 3

Finalizando esta série de implementação de redes neurais do zero, criaremos um modelo de classificação com várias camadas ocultas. A aprendizagem de máquina que usa diversos módulos (neste caso camadas) para aprender uma determinada função com base nos dados de treino é também conhecida como deep learning.

Outros serviços Amazon AWS para a certificação AWS Certified Cloud Practitioner

Neste artigo estou listando uma série de serviços AWS que serão solicitados na prova de certificação AWS Certified Cloud Practitioner. Em breve criarei outro post agrupando todos os artigos que publiquei sobre esta certificação.