Como desenvolver um modelo de linguagem neural baseado em caracteres em Keras

Como desenvolver um modelo de linguagem neural baseado em caracteres em Keras

Um modelo de idioma prevê a próxima palavra na sequência com base nas palavras específicas que vieram antes dela na sequência.

Também é possível desenvolver modelos de linguagem no nível do personagem usando redes neurais. A vantagem dos modelos de linguagem baseados em caracteres é seu pequeno vocabulário e flexibilidade para lidar com quaisquer palavras, pontuação e outras estruturas de documentos. Isso acarreta o custo de exigir modelos maiores que são mais lentos para treinar.

No entanto, no campo dos modelos de linguagem neural, os modelos baseados em caracteres oferecem uma grande promessa para uma abordagem geral, flexível e poderosa para a modelagem de linguagem.

Neste tutorial, você descobrirá como desenvolver um modelo de linguagem neural baseado em caracteres.

Depois de concluir este tutorial, você saberá:

  • Como preparar texto para modelagem de linguagem baseada em caracteres.
  • Como desenvolver um modelo de linguagem baseado em caracteres usando LSTMs.
  • Como usar um modelo de linguagem baseado em caracteres treinado para gerar texto.

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.

  • Atualização fevereiro / 2018: Pequena atualização de geração para alteração de API no Keras 2.1.3.
  • Atualização Fev / 2021: Atualizado o exemplo de código final para remover a linha redundante.
Como desenvolver um modelo de linguagem neural baseado em caracteres em Keras

Como desenvolver um modelo de linguagem neural baseado em caracteres em Keras
Foto de hedera.baltica, alguns direitos reservados.

Visão geral do tutorial

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

  1. Cante uma Canção de Sixpence
  2. Preparação de dados
  3. Train Language Model
  4. Gerar Texto

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

Cante uma Canção de Sixpence

A canção infantil “Sing a Song of Sixpence” é bem conhecida no ocidente.

O primeiro versículo é comum, mas também há uma versão de 4 versos que usaremos para desenvolver nosso modelo de linguagem baseado em personagens.

É curto, então o ajuste do modelo será rápido, mas não tão curto que não veremos nada de interessante.

A versão completa em 4 versos que usaremos como texto fonte está listada abaixo.

Copie o texto e salve-o em um novo arquivo em seu diretório de trabalho atual com o nome do arquivo 'rhyme.txt'.

Preparação de dados

A primeira etapa é preparar os dados do texto.

Começaremos definindo o tipo de modelo de linguagem.

Design de modelo de linguagem

Um modelo de linguagem deve ser treinado no texto e, no caso de um modelo de linguagem baseado em caracteres, as sequências de entrada e saída devem ser caracteres.

O número de caracteres usados ​​como entrada também definirá o número de caracteres que precisarão ser fornecidos ao modelo para eliciar o primeiro caractere predito.

Depois que o primeiro caractere foi gerado, ele pode ser anexado à sequência de entrada e usado como entrada para o modelo gerar o próximo caractere.

Sequências mais longas oferecem mais contexto para o modelo aprender qual caractere produzir a seguir, mas demoram mais para treinar e impõem mais carga na propagação do modelo ao gerar texto.

Usaremos um comprimento arbitrário de 10 caracteres para este modelo.

Não há muito texto e 10 caracteres são poucas palavras.

Agora podemos transformar o texto bruto em uma forma que nosso modelo possa aprender; especificamente, sequências de entrada e saída de caracteres.

Carregar Texto

Devemos carregar o texto na memória para que possamos trabalhar com ele.

Abaixo está uma função chamada load_doc () que irá carregar um arquivo de texto dado um nome de arquivo e retornar o texto carregado.

Podemos chamar esta função com o nome do arquivo da canção infantil 'rhyme.txt'para carregar o texto na memória. O conteúdo do arquivo é então impresso na tela como uma verificação de integridade.

Texto Limpo

Em seguida, precisamos limpar o texto carregado.

Não faremos muito para isso aqui. Especificamente, removeremos todos os caracteres da nova linha para que tenhamos uma longa sequência de caracteres separados apenas por um espaço em branco.

Você pode explorar outros métodos de limpeza de dados, como normalizar o caso para minúsculas ou remover a pontuação em um esforço para reduzir o tamanho do vocabulário final e desenvolver um modelo menor e mais enxuto.

Criar Sequências

Agora que temos uma longa lista de caracteres, podemos criar nossas sequências de entrada e saída usadas para treinar o modelo.

Cada sequência de entrada terá 10 caracteres com um caractere de saída, tornando cada sequência de 11 caracteres.

Podemos criar as sequências enumerando os caracteres no texto, começando no 11º caractere no índice 10.

Executando este snippet, podemos ver que acabamos com pouco menos de 400 sequências de caracteres para treinar nosso modelo de linguagem.

Salvar Sequências

Finalmente, podemos salvar os dados preparados em um arquivo para que possamos carregá-los mais tarde, quando desenvolvermos nosso modelo.

Abaixo está uma função save_doc () que, dada uma lista de strings e um nome de arquivo, salvará as strings em um arquivo, uma por linha.

Podemos chamar esta função e salvar nossas sequências preparadas no nome do arquivo 'char_sequences.txt'em nosso diretório de trabalho atual.

Exemplo Completo

Combinando tudo isso, a lista de códigos completa é fornecida abaixo.

Execute o exemplo para criar o 'char_seqiences.txt' Arquivo.

Dê uma olhada dentro, você verá algo como o seguinte:

Agora estamos prontos para treinar nosso modelo de linguagem neural baseado em caracteres.

Train Language Model

Nesta seção, desenvolveremos um modelo de linguagem neural para os dados de sequência preparados.

O modelo irá ler caracteres codificados e prever o próximo caractere na sequência. Uma camada oculta de rede neural recorrente de Memória de Longo Curto Prazo será usada para aprender o contexto da sequência de entrada para fazer as previsões.

Carregar dados

A primeira etapa é carregar os dados de sequência de caracteres preparados de 'char_sequences.txt'.

Podemos usar o mesmo load_doc () função desenvolvida na seção anterior. Depois de carregado, dividimos o texto em uma nova linha para fornecer uma lista de sequências prontas para serem codificadas.

Sequências de codificação

O...

Você também pode estar interessado em