Como usar camadas de incorporação de palavras para aprendizado profundo com Keras

Como usar camadas de incorporação de palavras para aprendizado profundo com Keras

Embeddings de palavras fornecem uma representação densa de palavras e seus significados relativos.

Eles são um aprimoramento em relação às representações esparsas usadas em representações de modelos de palavras mais simples.

Embeddings de palavras podem ser aprendidos a partir de dados de texto e reutilizados entre projetos. Eles também podem ser aprendidos como parte do ajuste de uma rede neural em dados de texto.

Neste tutorial, você descobrirá como usar embeddings de palavras para aprendizado profundo em Python com Keras.

Depois de concluir este tutorial, você saberá:

  • Sobre embeddings de palavras e que Keras oferece suporte para embeddings de palavras por meio da camada Embedding.
  • Como aprender a incorporação de palavras enquanto se ajusta a uma rede neural.
  • Como usar uma palavra pré-treinada embutida em uma rede neural.

Comece seu projeto com meu novo livro Deep Learning for Natural Language Processing, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

  • Atualizado em fevereiro / 2018: Corrigido um bug devido a uma mudança nas APIs subjacentes.
  • Atualizado em out / 2019: Atualizado para Keras 2.3 e TensorFlow 2.0.
Como usar camadas de incorporação de palavras para aprendizado profundo com Keras

Como usar camadas de incorporação de palavras para aprendizado profundo com Keras
Foto por thisguy, alguns direitos reservados.

Visão geral do tutorial

Este tutorial é dividido em 3 partes; eles estão:

  1. Word Embedding
  2. Camada de incorporação Keras
  3. Exemplo de aprendizagem de incorporação
  4. Exemplo de uso de incorporação GloVe pré-treinada

Precisa de ajuda com Deep Learning for Text Data?

Faça meu curso intensivo de e-mail gratuito de 7 dias agora (com código).

Clique para se inscrever e também obter uma versão gratuita do Ebook em PDF do curso.

Comece Seu Crash-Course GRÁTIS Agora

1. Word Embedding

Uma incorporação de palavras é uma classe de abordagens para representar palavras e documentos usando uma representação vetorial densa.

É uma melhoria em relação aos esquemas de codificação de modelo de saco de palavras tradicionais, onde grandes vetores esparsos eram usados ​​para representar cada palavra ou para pontuar cada palavra dentro de um vetor para representar um vocabulário inteiro. Essas representações eram esparsas porque os vocabulários eram vastos e uma determinada palavra ou documento seria representado por um grande vetor composto principalmente de valores zero.

Em vez disso, em um embedding, as palavras são representadas por vetores densos, onde um vetor representa a projeção da palavra em um espaço vetorial contínuo.

A posição de uma palavra dentro do espaço vetorial é aprendida a partir do texto e é baseada nas palavras que cercam a palavra quando ela é usada.

A posição de uma palavra no espaço vetorial aprendido é chamada de incorporação.

Dois exemplos populares de métodos de aprendizagem de embeddings de palavras a partir de texto incluem:

Além desses métodos cuidadosamente projetados, uma incorporação de palavras pode ser aprendida como parte de um modelo de aprendizado profundo. Essa pode ser uma abordagem mais lenta, mas adapta o modelo a um conjunto de dados de treinamento específico.

2. Camada de incorporação de Keras

Keras oferece uma camada de incorporação que pode ser usada para redes neurais em dados de texto.

Requer que os dados de entrada sejam codificados por inteiro, de forma que cada palavra seja representada por um inteiro único. Esta etapa de preparação de dados pode ser realizada usando a API Tokenizer também fornecida com Keras.

A camada de incorporação é inicializada com pesos aleatórios e aprenderá uma incorporação para todas as palavras no conjunto de dados de treinamento.

É uma camada flexível que pode ser usada de várias maneiras, como:

  • Ele pode ser usado sozinho para aprender uma incorporação de palavras que pode ser salva e usada em outro modelo posteriormente.
  • Ele pode ser usado como parte de um modelo de aprendizado profundo, em que a incorporação é aprendida junto com o próprio modelo.
  • Ele pode ser usado para carregar um modelo de incorporação de palavras pré-treinado, um tipo de aprendizagem por transferência.

A camada de incorporação é definida como a primeira camada oculta de uma rede. Deve especificar 3 argumentos:

Deve especificar 3 argumentos:

  • input_dim: Este é o tamanho do vocabulário nos dados do texto. Por exemplo, se seus dados forem codificados por inteiro para valores entre 0 e 10, o tamanho do vocabulário será de 11 palavras.
  • output_dim: Este é o tamanho do espaço vetorial no qual as palavras serão inseridas. Ele define o tamanho dos vetores de saída desta camada para cada palavra. Por exemplo, pode ser 32 ou 100 ou até maior. Teste valores diferentes para o seu problema.
  • comprimento_de_entrada: Este é o comprimento das sequências de entrada, como você definiria para qualquer camada de entrada de um modelo Keras. Por exemplo, se todos os seus documentos de entrada forem compostos por 1000 palavras, isso será 1000.

Por exemplo, a seguir definimos uma camada de Embedding com um vocabulário de 200 (por exemplo, palavras codificadas por inteiro de 0 a 199, inclusive), um espaço vetorial de 32 dimensões em que as palavras serão inseridas e documentos de entrada que têm 50 palavras cada.

A camada de incorporação tem pesos que são aprendidos. Se você salvar seu modelo em um arquivo, isso incluirá pesos para a camada de incorporação.

A saída do Embedding camada é um vetor 2D com uma incorporação para cada palavra na sequência de palavras de entrada (documento de entrada).

Se você deseja conectar um Denso camada diretamente para uma camada de incorporação, você deve primeiro nivelar a matriz de saída 2D em um vetor 1D usando o Flatten camada.

Agora, vamos ver como podemos usar uma camada de incorporação na prática.

3. Exemplo de aprendizado de incorporação

Nesta seção, veremos como podemos aprender a incorporação de palavras enquanto ajustamos uma rede neural em um problema de classificação de texto.

Vamos definir um pequeno problema onde temos 10 documentos de texto, cada um com um comentário sobre um trabalho enviado por um aluno. Cada documento de texto é classificado como positivo “1” ou negativo “0”. Este é um problema simples de análise de sentimento.

Primeiro, definiremos os documentos e seus rótulos de classe.

Em seguida, podemos codificar cada documento com um inteiro. Isso significa que, como entrada, a camada de incorporação terá sequências de inteiros. Poderíamos experimentar outro pacote mais sofisticado de codificação de modelos de palavras, como contagens ou TF-IDF.

Keras fornece a função one_hot () que cria um hash de cada palavra como uma codificação inteira eficiente. Vamos estimar o tamanho do vocabulário de 50, que é muito maior do que o necessário para reduzir a probabilidade de colisões da função hash.

As sequências têm comprimentos diferentes e Keras prefere que as entradas sejam vetorizadas e todas as entradas tenham o mesmo comprimento. Preencheremos todas as sequências de entrada com o comprimento de 4. Novamente, podemos fazer isso com uma função Keras embutida, neste caso a função pad_sequences ().

Agora estamos prontos para definir nosso Embedding camada como parte de nosso modelo de rede neural.

O Embedding tem um vocabulário de 50 e um comprimento de entrada de 4. Escolheremos um pequeno espaço de incorporação de 8 dimensões.

O modelo é um modelo de classificação binária simples. É importante ressaltar que a saída do Embedding camada terá 4 vetores de 8 dimensões cada, um para cada palavra. Achatamos isso em um vetor de 32 elementos para passar para o Denso camada de saída.

Finalmente, podemos ajustar e avaliar o modelo de classificação.

A lista de códigos completa é fornecida abaixo.

Você também pode estar interessado em