Como desenvolver um modelo de saco de palavras de aprendizado profundo para análise de sentimento (classificação de texto)

Como desenvolver um modelo de saco de palavras de aprendizado profundo para análise de sentimento (classificação de texto)

As resenhas de filmes podem ser classificadas como favoráveis ​​ou não.

A avaliação do texto da crítica de cinema é um problema de classificação freqüentemente chamado de análise de sentimento. Uma técnica popular para desenvolver modelos de análise de sentimento é usar um modelo de saco de palavras que transforma documentos em vetores em que cada palavra do documento recebe uma pontuação.

Neste tutorial, você descobrirá como pode desenvolver um modelo preditivo de aprendizado profundo usando a representação de saco de palavras para classificação de sentimento de resenha de filme.

Depois de concluir este tutorial, você saberá:

  • Como preparar os dados do texto de revisão para modelagem com um vocabulário restrito.
  • Como usar o modelo de saco de palavras para preparar dados de treinamento e teste.
  • Como desenvolver um modelo multicamadas de saco de palavras do Perceptron e usá-lo para fazer previsões sobre novos dados de texto de revisão.

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 outubro / 2017: Corrigido um pequeno erro de digitação ao carregar e nomear comentários positivos e negativos (obrigado Arthur).
  • Atualização agosto / 2020: Link atualizado para o conjunto de dados de resenhas de filmes.
Como desenvolver um modelo de saco de palavras de aprendizado profundo para prever sentimentos em resenhas de filmes

Como desenvolver um modelo de saco de palavras de aprendizado profundo para prever sentimentos em resenhas de filmes
Foto de jai Mansson, 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. Representação de Bag-of-Words
  4. Modelos de análise de sentimento

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 um pouco limpos, 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 de modelos clássicos (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 com 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:

Após 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. Definir um vocabulário de palavras preferidas.

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 no conjunto de teste que poderia nos ajudar a preparar melhor os dados (por exemplo, as palavras usadas) está indisponível durante a preparação dos dados e o treinamento do 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, onde 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 testar o modelo.

Carregando e limpando comentários

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

Sem entrar muito em detalhes, prepararemos os dados usando o seguinte método:

  • 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 de um arquivo pronto para uso com a função clean_doc ().

Um exemplo de limpeza da primeira avaliação positiva está listado abaixo.

A execução do exemplo imprime uma longa lista de tokens limpos.

Existem muitas outras etapas de limpeza que podemos querer explorar, e eu as deixo como exercícios adicionais. Eu adoraria ver o que você pode fazer.

Defina um vocabulário

É importante definir um vocabulário de palavras conhecidas ao usar um modelo de saco de palavras.

Quanto mais palavras, maior será a representação dos documentos, portanto, é importante restringir as palavras apenas àquelas consideradas preditivas. Isso é difícil de saber de antemão e muitas vezes é importante testar diferentes hipóteses sobre como construir um vocabulário útil.

Já vimos como podemos remover pontuação e números do vocabulário na seção anterior. Podemos repetir isso para todos os documentos e construir um conjunto de todas as palavras conhecidas.

Podemos desenvolver um vocabulário como um Contador, que é um mapeamento de dicionário de palavras e sua contagem que nos permite atualizar e consultar facilmente.

Cada documento pode ser adicionado ao contador (uma nova função chamada add_doc_to_vocab ()) e podemos passar por cima de todos os comentários no diretório negativo e, em seguida, no diretório positivo (uma nova função chamada process_docs ())

O exemplo completo está listado abaixo.

Você também pode estar interessado em