Como preparar dados de texto para aprendizado profundo com Keras

Como preparar dados de texto para aprendizado profundo com Keras

Você não pode alimentar texto bruto diretamente em modelos de aprendizado profundo.

Os dados de texto devem ser codificados como números a serem usados ​​como entrada ou saída para modelos de aprendizado de máquina e aprendizado profundo.

A biblioteca de aprendizado profundo Keras fornece algumas ferramentas básicas para ajudá-lo a preparar seus dados de texto.

Neste tutorial, você descobrirá como usar o Keras para preparar seus dados de texto.

Depois de concluir este tutorial, você saberá:

  • Sobre os métodos de conveniência que você pode usar para preparar dados de texto rapidamente.
  • A API Tokenizer que pode ser ajustada aos dados de treinamento e usada para codificar documentos de treinamento, validação e teste.
  • A gama de 4 esquemas de codificação de documentos diferentes oferecidos pela API Tokenizer.

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.

Como preparar dados de texto para aprendizado profundo com Keras

Como preparar dados de texto para aprendizado profundo com Keras
Foto de ActiveSteve, alguns direitos reservados.

Visão geral do tutorial

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

  1. Divida as palavras com text_to_word_sequence.
  2. Codificando com one_hot.
  3. Codificação de hash com hashing_trick.
  4. API Tokenizer

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

Divida as palavras com text_to_word_sequence

Um bom primeiro passo ao trabalhar com texto é dividi-lo em palavras.

As palavras são chamadas de tokens e o processo de divisão do texto em tokens é chamado de tokenização.

Keras fornece a função text_to_word_sequence () que você pode usar para dividir o texto em uma lista de palavras.

Por padrão, esta função faz 3 coisas automaticamente:

  • Divide palavras por espaço (split = ”“).
  • Filtra a pontuação (filtros = '! ”# $% & () * +, -. / :; <=>? @[]^ _` ~ t n ').
  • Converte o texto em minúsculas (inferior = Verdadeiro).

Você pode alterar qualquer um desses padrões passando argumentos para a função.

Abaixo está um exemplo de uso da função text_to_word_sequence () para dividir um documento (neste caso, uma string simples) em uma lista de palavras.

Executar o exemplo cria uma matriz contendo todas as palavras do documento. A lista de palavras é impressa para revisão.

Este é um bom primeiro passo, mas é necessário um pré-processamento adicional antes de poder trabalhar com o texto.

Codificando com one_hot

É comum representar um documento como uma sequência de valores inteiros, em que cada palavra no documento é representada como um inteiro único.

Keras fornece a função one_hot () que você pode usar para tokenizar e codificar por inteiro um documento de texto em uma etapa. O nome sugere que ele criará uma codificação one-hot do documento, o que não é o caso.

Em vez disso, a função é um wrapper para a função hashing_trick () descrita na próxima seção. A função retorna uma versão codificada de inteiro do documento. O uso de uma função hash significa que pode haver colisões e nem todas as palavras receberão valores inteiros exclusivos.

Como com a função text_to_word_sequence () na seção anterior, a função one_hot () tornará o texto minúsculo, filtrará a pontuação e dividirá as palavras com base no espaço em branco.

Além do texto, deve ser especificado o tamanho do vocabulário (total de palavras). Esse pode ser o número total de palavras no documento ou mais, se você pretende codificar documentos adicionais que contenham palavras adicionais. O tamanho do vocabulário define o espaço de hashing do qual as palavras são hash. Idealmente, isso deve ser maior do que o vocabulário em alguma porcentagem (talvez 25%) para minimizar o número de colisões. Por padrão, a função 'hash' é usada, embora como veremos na próxima seção, funções hash alternativas podem ser especificadas ao chamar a função hashing_trick () diretamente.

Podemos usar a função text_to_word_sequence () da seção anterior para dividir o documento em palavras e, em seguida, usar um conjunto para representar apenas as palavras únicas no documento. O tamanho desse conjunto pode ser usado para estimar o tamanho do vocabulário de um documento.

Por exemplo:

Podemos colocar isso junto com a função one_hot () e um hot codificar as palavras no documento. O exemplo completo está listado abaixo.

O tamanho do vocabulário é aumentado em um terço para minimizar as colisões durante o hash das palavras.

Executar o exemplo primeiro imprime o tamanho do vocabulário como 8. O documento codificado é então impresso como uma matriz de palavras codificadas por inteiro.

Codificação de hash com hashing_trick

Uma limitação das codificações de inteiros e de base de contagem é que elas devem manter um vocabulário de palavras e seu mapeamento para inteiros.

Uma alternativa a essa abordagem é usar uma função hash unilateral para converter palavras em inteiros. Isso evita a necessidade de manter o controle de um vocabulário, que é mais rápido e requer menos memória.

Keras fornece a função hashing_trick () que simboliza e então codifica o documento inteiro, assim como a função one_hot (). Ele fornece mais flexibilidade, permitindo que você especifique a função hash como 'hash' (o padrão) ou outras funções hash, como a função md5 integrada ou sua própria função.

Abaixo está um exemplo de codificação inteira de um documento usando a função hash md5.

A execução do exemplo imprime o tamanho do vocabulário e o documento codificado por inteiro.

Podemos ver que o uso de uma função hash diferente resulta em inteiros consistentes, mas diferentes para palavras como a função one_hot () na seção anterior.

API Tokenizer

Até agora, vimos métodos de conveniência únicos para preparar texto com Keras.

Keras fornece uma API mais sofisticada para preparar texto que pode ser ajustado e reutilizado para preparar vários documentos de texto. Esta pode ser a abordagem preferida para grandes projetos.

Keras fornece a classe Tokenizer para preparar documentos de texto para aprendizado profundo. O Tokenizer deve ser construído e, em seguida, caber em documentos de texto bruto ou em documentos de texto codificados por inteiro.

Por exemplo:

Uma vez ajustado, o Tokenizer fornece 4 atributos que você pode usar para consultar o que foi aprendido sobre seus documentos:

  • word_counts: Um dicionário de palavras e suas contagens.
  • word_docs: Um dicionário de palavras e em quantos documentos cada uma apareceu.
  • word_index: Um dicionário de palavras e seus números inteiros atribuídos exclusivamente.
  • document_count: Uma contagem inteira do número total de documentos que foram usados ​​para ajustar o Tokenizer.

Por exemplo:

Uma vez que o Tokenizer foi ajustado aos dados de treinamento, ele pode ser usado para codificar documentos no trem ou conjuntos de dados de teste.

A função text_to_matrix () no Tokenizer pode ser usada para criar um vetor por documento fornecido por entrada. O comprimento dos vetores é o tamanho total do vocabulário.

Esta função fornece um conjunto de esquemas de codificação de texto de modelo de pacote de palavras padrão que podem ser fornecidos por meio de um argumento de modo para a função.

Os modos disponíveis incluem:

  • 'binário': Se cada palavra está ou não presente no documento. Este é o padrão.
  • 'contar': A contagem de cada palavra no documento.
  • 'tfidf': A pontuação do Text Frequency-Inverse DocumentFrequency (TF-IDF) para cada palavra no documento.
  • 'frequencia': A frequência de cada palavra como uma proporção de palavras em cada documento.

Podemos colocar tudo isso junto com um exemplo trabalhado.

Você também pode estar interessado em