Modelos de codificador-decodificador para sumarização de texto em Keras

Modelos de codificador-decodificador para sumarização de texto em Keras

O resumo de texto é um problema no processamento de linguagem natural para criar um resumo curto, preciso e fluente de um documento de origem.

A arquitetura de rede neural recorrente do Codificador-Decodificador desenvolvida para tradução automática tem se mostrado eficaz quando aplicada ao problema de sumarização de texto.

Pode ser difícil aplicar essa arquitetura na biblioteca de aprendizado profundo Keras, devido a parte da flexibilidade sacrificada para tornar a biblioteca limpa, simples e fácil de usar.

Neste tutorial, você descobrirá como implementar a arquitetura codificador-decodificador para resumo de texto em Keras.

Depois de concluir este tutorial, você saberá:

  • Como o resumo de texto pode ser abordado usando a arquitetura de rede neural recorrente do codificador-decodificador.
  • Como diferentes codificadores e decodificadores podem ser implementados para o problema.
  • Três modelos que você pode usar para implementar a arquitetura de resumo de texto no Keras.

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.

Modelos de codificador-decodificador para resumo de texto em Keras

Modelos de codificador-decodificador para sumarização de texto em Keras
Foto de Diogo Freire, alguns direitos reservados.

Visão geral do tutorial

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

  1. Arquitetura codificador-decodificador
  2. Codificadores de resumo de texto
  3. Decodificadores de resumo de texto
  4. Leitura do texto fonte
  5. Modelos de Implementação

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

Arquitetura codificador-decodificador

A arquitetura codificador-decodificador é uma maneira de organizar redes neurais recorrentes para problemas de predição de sequência que têm um número variável de entradas, saídas ou entradas e saídas.

A arquitetura envolve dois componentes: um codificador e um decodificador.

  • Codificador: O codificador lê toda a sequência de entrada e a codifica em uma representação interna, geralmente um vetor de comprimento fixo denominado vetor de contexto.
  • Decodificador: O decodificador lê a sequência de entrada codificada do codificador e gera a sequência de saída.

Para mais informações sobre a arquitetura do codificador-decodificador, consulte a postagem:

Os submodelos do codificador e do decodificador são treinados em conjunto, ou seja, ao mesmo tempo.

Isso é uma façanha, pois, tradicionalmente, problemas desafiadores de linguagem natural exigiam o desenvolvimento de modelos separados que foram posteriormente colocados em um pipeline, permitindo o acúmulo de erros durante o processo de geração de sequência.

Toda a entrada codificada é usada como contexto para gerar cada etapa da saída. Embora isso funcione, a codificação de comprimento fixo da entrada limita o comprimento das sequências de saída que podem ser geradas.

Uma extensão da arquitetura do codificador-decodificador é fornecer uma forma mais expressiva da sequência de entrada codificada e permitir que o decodificador aprenda onde prestar atenção à entrada codificada ao gerar cada etapa da sequência de saída.

Essa extensão da arquitetura é chamada de atenção.

Para mais informações sobre Atenção na arquitetura Codificador-Decodificador, consulte a postagem:

A arquitetura codificador-decodificador com atenção é popular para um conjunto de problemas de processamento de linguagem natural que geram sequências de saída de comprimento variável, como resumo de texto.

A aplicação da arquitetura ao resumo de texto é a seguinte:

  • Codificador: O codificador é responsável por ler o documento de origem e codificá-lo para uma representação interna.
  • Decodificador: O decodificador é um modelo de linguagem responsável por gerar cada palavra no resumo de saída usando a representação codificada do documento de origem.

Codificadores de resumo de texto

O codificador é onde reside a complexidade do modelo, pois é responsável por capturar o significado do documento de origem.

Diferentes tipos de codificadores podem ser usados, embora sejam usadas mais comumente redes neurais recorrentes bidirecionais, como LSTMs. Nos casos em que redes neurais recorrentes são usadas no codificador, uma incorporação de palavras é usada para fornecer uma representação distribuída de palavras.

Alexander Rush, et al. usa um codificador de saco de palavras simples que descarta a ordem das palavras e codificadores convolucionais que explicitamente tentam capturar n-gramas.

Nosso modelo mais básico simplesmente usa o pacote de palavras da frase de entrada embutida até o tamanho H, enquanto ignora propriedades da ordem original ou relações entre palavras vizinhas. […] Para abordar alguns dos problemas de modelagem com pacote de palavras, também consideramos o uso de um codificador convolucional profundo para a frase de entrada.

- Um modelo de atenção neural para sumarização de frases abstrativas, 2015.

Konstantin Lopyrev usa uma pilha profunda de 4 redes neurais recorrentes LSTM como codificador.

O codificador é alimentado como entrada com o texto de um artigo de notícias, uma palavra de cada vez. Cada palavra passa primeiro por uma camada de incorporação que a transforma em uma representação distribuída. Essa representação distribuída é então combinada usando uma rede neural multicamadas

- Gerando manchetes de notícias com redes neurais recorrentes, 2015.

Abigail See, et al. use um LSTM bidirecional de camada única como codificador.

Os tokens do artigo w (i) são alimentados um por um no codificador (um LSTM bidirecional de camada única), produzindo uma sequência de estados ocultos do codificador h (i).

- Vá direto ao ponto: resumo com redes Pointer-Generator, 2017.

Ramesh Nallapati, et al. usar redes neurais recorrentes GRU bidirecionais em seus codificadores e incorporar informações adicionais sobre cada palavra na sequência de entrada.

O codificador consiste em um GRU-RNN bidirecional ...

- Resumo de texto abstrativo usando RNNs sequência a sequência e além, 2016.

Decodificadores de resumo de texto

O decodificador deve gerar cada palavra na sequência de saída dadas duas fontes de informação:

  1. Vetor de contexto: A representação codificada do documento de origem fornecida pelo codificador.
  2. Sequência Gerada: A palavra ou sequência de palavras já gerada como um resumo.

O vetor de contexto pode ser uma codificação de comprimento fixo, como na arquitetura Codificador-Decodificador simples, ou pode ser uma forma mais expressiva filtrada por meio de um mecanismo de atenção.

A sequência gerada é fornecida com pouca preparação, como representação distribuída de cada palavra gerada por meio de uma incorporação de palavra.

Em cada etapa t, o decodificador (um LSTM unidirecional de camada única) recebe a palavra de incorporação da palavra anterior (durante o treinamento, esta é a palavra anterior do resumo de referência; no momento do teste, é a palavra anterior emitida pelo decodificador)

- Vá direto ao ponto: resumo com redes Pointer-Generator, 2017.

Alexander Rush, et al. mostre isso claramente em um diagrama onde x é o documento fonte, enc é o codificador que fornece representação interna do documento de origem, e yc é a sequência de palavras geradas anteriormente.

Exemplo de entradas para o decodificador para resumo de texto

Exemplo de entradas para o decodificador para resumo de texto.
Retirado de "Um modelo de atenção neural para sumarização de frases abstrativas", 2015.

A geração de palavras uma de cada vez requer que o modelo seja executado até que algum número máximo de palavras de resumo seja gerado ou um token especial de fim de sequência seja alcançado.

O processo deve ser iniciado fornecendo ao modelo um token especial de início de sequência para gerar a primeira palavra.

O decodificador toma como entrada as camadas ocultas geradas após a alimentação da última palavra do texto de entrada. Primeiro, um símbolo de fim de sequência é alimentado como entrada, novamente usando uma camada de incorporação para transformar o símbolo em uma representação distribuída. […]. Depois de gerar cada palavra, a mesma palavra é alimentada como entrada ao gerar a próxima palavra.

- Gerando manchetes de notícias com redes neurais recorrentes, 2015.

Ramesh Nallapati, et al. gerar a sequência de saída usando uma rede neural recorrente GRU.

... o decodificador consiste em um GRU-RNN unidirecional com o mesmo tamanho de estado oculto que o do codificador

Leitura do texto fonte

Há flexibilidade na aplicação dessa arquitetura, dependendo do problema específico de resumo de texto que está sendo abordado.

A maioria dos estudos concentra-se em uma ou apenas algumas frases-fonte no codificador, mas esse não precisa ser o caso.

Por exemplo, o codificador pode ser configurado para ler e codificar o documento de origem em blocos de tamanhos diferentes:

  • Frase.
  • Parágrafo.
  • Página.
  • Documento.

Da mesma forma, o decodificador pode ser configurado para resumir cada pedaço ou agregar os pedaços codificados e gerar um resumo mais amplo.

Algum trabalho foi feito ao longo deste caminho, onde Alexander Rush, et al. use um modelo de codificador hierárquico com atenção tanto no nível da palavra quanto da frase.

Este modelo visa capturar essa noção de dois níveis de importância usando dois RNNs bidirecionais no lado da fonte, um no nível da palavra e outro no nível da frase. O mecanismo de atenção opera em ambos os níveis simultaneamente

- Um modelo de atenção neural para sumarização de frases abstrativas, 2015.

Modelos de Implementação

Nesta seção, veremos como implementar a arquitetura codificador-decodificador para resumo de texto na biblioteca de aprendizado profundo Keras.

Modelo Geral

Uma realização simples do modelo envolve um codificador com uma entrada Embedding seguida por uma camada oculta LSTM que produz uma representação de comprimento fixo do documento de origem.

O decodificador lê a representação e um Embedding da última palavra gerada e usa essas entradas para gerar cada palavra no resumo de saída.

Modelo de resumo de texto geral em Keras

Modelo de resumo de texto geral em Keras

Há um problema.

Keras não permite loops recursivos em que a saída do modelo é alimentada como entrada para o modelo automaticamente.

Isso significa que o modelo descrito acima não pode ser implementado diretamente no Keras (mas talvez pudesse em uma plataforma mais flexível como o TensorFlow).

Em vez disso, veremos três variações do modelo que podemos implementar no Keras.

Alternativa 1: Modelo One-Shot

O primeiro modelo alternativo é gerar toda a sequência de saída de uma maneira única.

Ou seja, o decodificador usa apenas o vetor de contexto para gerar a sequência de saída.

Alternativa 1 - Modelo de resumo de texto único

Alternativa 1 - Modelo de resumo de texto único

Aqui está um exemplo de código para essa abordagem em Keras usando a API funcional.

Este modelo sobrecarrega o decodificador.

É provável que o decodificador não tenha contexto suficiente para gerar uma sequência de saída coerente, pois deve escolher as palavras e sua ordem.

Alternativa 2: Modelo Recursivo A

Um segundo modelo alternativo é ...

Você também pode estar interessado em