Como desenvolver um modelo CNN multicanal para classificação de texto

Como desenvolver um modelo CNN multicanal para classificação de texto

Um modelo de aprendizado profundo padrão para classificação de texto e análise de sentimento usa uma camada de incorporação de palavras e uma rede neural convolucional unidimensional.

O modelo pode ser expandido usando várias redes neurais convolucionais paralelas que leem o documento de origem usando diferentes tamanhos de kernel. Isso, na verdade, cria uma rede neural convolucional multicanal para texto que lê texto com diferentes tamanhos de n-gramas (grupos de palavras).

Neste tutorial, você descobrirá como desenvolver uma rede neural convolucional multicanal para previsão de sentimento em dados de resenhas de filmes de texto.

Depois de concluir este tutorial, você saberá:

  • Como preparar dados de texto de resenhas de filmes para modelagem.
  • Como desenvolver uma rede neural convolucional multicanal para texto em Keras.
  • Como avaliar um modelo de ajuste em dados de resenhas de filmes não vistos.

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 Fev / 2018: Pequena alteração no código para refletir as alterações na API do Keras 2.1.3.
  • Atualização agosto / 2020: Link atualizado para o conjunto de dados de resenhas de filmes.
Como desenvolver uma rede neural convolucional multicanal de N-gram para análise de sentimento

Como desenvolver uma rede neural convolucional multicanal de N-gram para análise de sentimento
Foto de Ed Dunens, alguns direitos reservados.

Visão geral do tutorial

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

  1. Conjunto de dados de resenhas de filmes
  2. Preparação de dados
  3. Desenvolver modelo multicanal
  4. Avalie o modelo

Ambiente Python

Este tutorial presume que você tenha um ambiente Python 3 SciPy instalado.

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, veja esta postagem:

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

Conjunto de dados de resenhas de filmes

The Movie Review Data é uma coleção de resenhas de filmes recuperadas do site imdb.com no início dos anos 2000 por Bo Pang e Lillian Lee. As avaliações foram coletadas e disponibilizadas como parte de sua pesquisa sobre processamento de linguagem natural.

As análises foram lançadas originalmente em 2002, mas uma versão atualizada e limpa foi lançada em 2004, conhecida como “v2.0”.

O conjunto de dados é composto por 1.000 críticas positivas e 1.000 negativas de filmes retiradas de um arquivo do grupo de notícias rec.arts.movies.reviews hospedado em imdb.com. Os autores referem-se a este conjunto de dados como o "conjunto de dados de polaridade".

Nossos dados contêm 1000 revisões positivas e 1000 negativas, todas escritas antes de 2002, com um limite de 20 revisões por autor (total de 312 autores) por categoria. Referimo-nos a este corpus como o conjunto de dados de polaridade.

- Uma educação sentimental: análise de sentimento usando sumarização de subjetividade com base em cortes mínimos, 2004.

Os dados foram limpos de alguma forma; por exemplo:

  • O conjunto de dados é composto apenas por revisões em inglês.
  • Todo o texto foi convertido para minúsculas.
  • Há um espaço em branco ao redor da pontuação, como pontos, vírgulas e colchetes.
  • O texto foi dividido em uma frase por linha.

Os dados foram usados ​​para algumas tarefas de processamento de linguagem natural relacionadas. Para classificação, o desempenho dos modelos de aprendizado de máquina (como Máquinas de Vetores de Suporte) nos dados está na faixa de 70% a 80% (por exemplo, 78% -82%).

A preparação de dados mais sofisticada pode ter resultados de até 86% com validação cruzada de 10 vezes. Isso nos dá uma estimativa de meados dos anos 80 se estivéssemos procurando usar esse conjunto de dados em experimentos de métodos modernos.

... dependendo da escolha do classificador de polaridade downstream, podemos alcançar uma melhoria altamente significativa estatisticamente (de 82,8% para 86,4%)

- Uma educação sentimental: análise de sentimento usando sumarização de subjetividade com base em cortes mínimos, 2004.

Você pode baixar o conjunto de dados aqui:

Depois de descompactar o arquivo, você terá um diretório chamado “txt_sentoken”Com dois subdiretórios contendo o texto“neg" e "pos”Para críticas negativas e positivas. As avaliações são armazenadas uma por arquivo com uma convenção de nomenclatura cv000 para cv999 para cada neg e pos.

A seguir, vamos ver como carregar e preparar os dados de texto.

Preparação de dados

Nesta seção, veremos três coisas:

  1. Separação de dados em conjuntos de treinamento e teste.
  2. Carregando e limpando os dados para remover pontuação e números.
  3. Prepare todas as revisões e salve em arquivo.

Dividir em conjuntos de trem e teste

Estamos fingindo que estamos desenvolvendo um sistema que pode prever o sentimento de uma crítica textual de um filme como positivo ou negativo.

Isso significa que, depois que o modelo for desenvolvido, precisaremos fazer previsões em novas revisões textuais. Isso exigirá que a mesma preparação de dados seja realizada nessas novas revisões, conforme é realizada nos dados de treinamento para o modelo.

Garantiremos que essa restrição seja incorporada à avaliação de nossos modelos, dividindo os conjuntos de dados de treinamento e teste antes de qualquer preparação de dados. Isso significa que qualquer conhecimento dos dados no conjunto de teste que poderia nos ajudar a preparar melhor os dados (por exemplo, as palavras usadas) não está disponível na preparação dos dados usados ​​para treinar o modelo.

Dito isso, usaremos as últimas 100 análises positivas e as últimas 100 análises negativas como um conjunto de teste (100 análises) e as 1.800 análises restantes como o conjunto de dados de treinamento.

Este é um trem de 90%, divisão de 10% dos dados.

A divisão pode ser imposta facilmente usando os nomes de arquivo das revisões, em que as revisões nomeadas de 000 a 899 são para dados de treinamento e as revisões de 900 em diante são para teste.

Carregando e limpando comentários

Os dados do texto já estão bem limpos; não é necessária muita preparação.

Sem nos preocuparmos muito com os detalhes, prepararemos os dados da seguinte maneira:

  • Divida os tokens no espaço em branco.
  • Remova toda a pontuação das palavras.
  • Remova todas as palavras que não são compostas exclusivamente de caracteres alfabéticos.
  • Remova todas as palavras que são palavras irrelevantes conhecidas.
  • Remova todas as palavras com comprimento <= 1 caractere.

Podemos colocar todas essas etapas em uma função chamada clean_doc () que toma como argumento o texto bruto carregado de um arquivo e retorna uma lista de tokens limpos. Também podemos definir uma função load_doc () que carrega um documento do arquivo pronto para uso com o clean_doc () função. Um exemplo de limpeza da primeira avaliação positiva está listado abaixo.

Executar o exemplo carrega e limpa uma crítica de filme.

Os tokens da revisão limpa são impressos para revisão.

Limpe todas as avaliações e salve

Agora podemos usar a função para limpar comentários e aplicá-la a todos os comentários.

Para fazer isso, iremos desenvolver uma nova função chamada process_docs () abaixo irá percorrer todos os comentários em um diretório, limpá-los e retorná-los como uma lista.

Também adicionaremos um argumento à função para indicar se ela está processando revisões de trem ou teste, de forma que os nomes de arquivos possam ser filtrados (conforme descrito acima) e apenas as revisões de trem ou teste solicitadas serão limpas e retornadas.

A função completa está listada abaixo.

Podemos chamar essa função com análises de treinamento negativas da seguinte maneira:

Você também pode estar interessado em