Como usar pequenas experiências para desenvolver um modelo de geração de legenda no Keras

Como usar pequenas experiências para desenvolver um modelo de geração de legenda no Keras

A geração de legendas é um problema desafiador de inteligência artificial em que uma descrição textual deve ser gerada para uma fotografia.

Requer métodos de visão computacional para entender o conteúdo da imagem e um modelo de linguagem do campo do processamento de linguagem natural para transformar a compreensão da imagem em palavras na ordem certa. Recentemente, métodos de aprendizagem profunda obtiveram resultados de última geração em exemplos desse problema.

Pode ser difícil desenvolver modelos de geração de legenda com seus próprios dados, principalmente porque os conjuntos de dados e os modelos são muito grandes e levam dias para serem treinados. Uma abordagem alternativa é explorar as configurações do modelo com uma pequena amostra do conjunto de dados mais completo.

Neste tutorial, você descobrirá como pode usar uma pequena amostra de um conjunto de dados de legenda de fotos padrão para explorar diferentes designs de modelos profundos.

Depois de concluir este tutorial, você saberá:

  • Como preparar dados para modelagem de legendas de fotos.
  • Como projetar uma linha de base e equipamento de teste para avaliar a habilidade dos modelos e controlar sua natureza estocástica.
  • Como avaliar propriedades como habilidade do modelo, modelos de extração de recursos e incorporação de palavras para aumentar a habilidade do modelo.

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.

  • Abril fev / 2019: Forneceu links diretos para o conjunto de dados Flickr8k_Dataset, uma vez que o site oficial foi retirado.
Como usar pequenas experiências para desenvolver um modelo de geração de legenda no Keras

Como usar pequenas experiências para desenvolver um modelo de geração de legenda no Keras
Foto de Per, alguns direitos reservados.

Visão geral do tutorial

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

  1. Preparação de dados
  2. Modelo de geração de legenda de linha de base
  3. Parâmetros de tamanho de rede
  4. Configurando o modelo de extração de recurso
  5. Modelos de incorporação de palavras
  6. Análise de Resultados

Ambiente Python

Este tutorial presume que você tenha um ambiente Python SciPy instalado, de preferência com Python 3.

Você deve ter o Keras (2.0 ou superior) instalado com o back-end TensorFlow ou Theano.

O tutorial também pressupõe que você tenha o scikit-learn, Pandas, NumPy e Matplotlib instalados.

Se precisar de ajuda com seu ambiente, consulte este tutorial:

Eu recomendo executar o código em um sistema com GPU.

Você pode acessar GPUs de forma barata na Amazon Web Services. Aprenda como neste tutorial:

Vamos mergulhar.

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

Preparação de dados

Primeiro, precisamos preparar o conjunto de dados para treinar o modelo.

Usaremos o conjunto de dados Flickr8K que é composto por um pouco mais de 8.000 fotografias e suas descrições.

Você pode baixar o conjunto de dados aqui:

ATUALIZAÇÃO (abril / 2019): O site oficial parece ter sido retirado (embora o formulário ainda funcione). Aqui estão alguns links de download direto do meu repositório GitHub de conjuntos de dados:

Descompacte as fotografias e descrições em seu diretório de trabalho atual em Flicker8k_Dataset e Flickr8k_text diretórios respectivamente.

Existem duas partes para a preparação de dados, são elas:

  1. Preparando o Texto
  2. Preparando as fotos

Preparando o Texto

O conjunto de dados contém várias descrições para cada fotografia e o texto das descrições requer uma limpeza mínima.

Primeiro, carregaremos o arquivo contendo todas as descrições.

Cada foto possui um identificador único. Isso é usado no nome do arquivo da foto e no arquivo de texto das descrições. A seguir, iremos percorrer a lista de descrições de fotos e salvar a primeira descrição para cada foto. Abaixo define uma função chamada load_descriptions () que, dado o texto do documento carregado, retornará um dicionário de identificadores de fotos para as descrições.

Em seguida, precisamos limpar o texto de descrição.

As descrições já estão tokenizadas e fáceis de trabalhar. Limparemos o texto das seguintes maneiras para reduzir o tamanho do vocabulário de palavras com as quais precisaremos trabalhar:

  • Converta todas as palavras em minúsculas.
  • Remova toda a pontuação.
  • Remova todas as palavras com um caractere ou menos (por exemplo, 'a').

Abaixo define o clean_descriptions () função que, dado o dicionário de identificadores de imagem para descrições, percorre cada descrição e limpa o texto.

Por fim, salvamos o dicionário de identificadores e descrições de imagens em um novo arquivo chamado descriptions.txt, com um identificador de imagem e descrição por linha.

Abaixo define o save_doc () função que, dado um dicionário contendo o mapeamento de identificadores para descrições e um nome de arquivo, salva o mapeamento em arquivo.

Juntando tudo isso, a lista completa é fornecida abaixo.

Você também pode estar interessado em