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!

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.

Análise de sentimento com Multilayer Perceptron Model baseado em Bag-of-Words

Faremos um modelo de análise de sentimento em textos de revisões (reviews) de filmes. Nosso objetivo é classificar a opinião da pessoa que assistiu o filme como “opinião positiva” ou “opinião negativa”. Já ouviu falar de “bag of words”?

Recurrent Neural Network: a memória das Redes Neurais

Neste artigo vamos discutir sobre uma pergunta-chave dentro do tema de redes neurais: Se nosso cérebro é capaz de guardar informações já aprendidas para usar posteriormente em outras situações, será que as redes neurais artificiais também têm esta capacidade? Sua resposta provavelmte é SIM. De fato, não está incorreta, mas definitivamente não é a melhor resposta.

Usando cross-validation para treinar e avaliar uma rede neural

Já falamos sobre resampling em um post anterior (veja aqui). Neste post veremos como aplicar validação cruzada, ou cross-validation, durante o treino de uma rede neural. Usaremos Keras para criar a rede neural e Scikit-Learn para aplicar a validação cruzada, ambas bibliotecas Python.