Uma introdução suave ao modelo do saco de palavras

Uma introdução suave ao modelo do saco de palavras

O modelo de saco de palavras é uma maneira de representar dados de texto ao modelar texto com algoritmos de aprendizado de máquina.

O modelo bag-of-words é simples de entender e implementar e tem obtido grande sucesso em problemas como modelagem de linguagem e classificação de documentos.

Neste tutorial, você descobrirá o modelo de saco de palavras para extração de recursos no processamento de linguagem natural.

Depois de concluir este tutorial, você saberá:

  • O que é o modelo do saco de palavras e por que ele é necessário para representar o texto.
  • Como desenvolver um modelo de saco de palavras para uma coleção de documentos.
  • Como usar diferentes técnicas para preparar um vocabulário e pontuar palavras.

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.

Uma introdução suave ao modelo do saco de palavras

Uma introdução suave ao modelo do saco de palavras
Foto de Do8y, alguns direitos reservados.

Visão geral do tutorial

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

  1. O problema com o texto
  2. O que é um saco de palavras?
  3. Exemplo do modelo Bag-of-Words
  4. Gerenciamento de vocabulário
  5. Palavras de pontuação
  6. Limitações do Bag-of-Words

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

O problema com o texto

Um problema com a modelagem de texto é que ela é confusa, e técnicas como algoritmos de aprendizado de máquina preferem entradas e saídas de comprimento fixo bem definidas.

Algoritmos de aprendizado de máquina não podem funcionar com texto bruto diretamente; o texto deve ser convertido em números. Especificamente, vetores de números.

No processamento da linguagem, os vetores x são derivados de dados textuais, a fim de refletir várias propriedades linguísticas do texto.

- Página 65, Métodos de redes neurais no processamento de linguagem natural, 2017.

Isso é chamado de extração de recurso ou codificação de recurso.

Um método popular e simples de extração de recursos com dados de texto é chamado de modelo de saco de palavras.

O que é um saco de palavras?

Um modelo de saco de palavras, ou BoW para breve, é uma maneira de extrair recursos de texto para uso em modelagem, como algoritmos de aprendizado de máquina.

A abordagem é muito simples e flexível e pode ser usada de várias maneiras para extrair recursos de documentos.

Um saco de palavras é uma representação de texto que descreve a ocorrência de palavras em um documento. Envolve duas coisas:

  1. Um vocabulário de palavras conhecidas.
  2. Uma medida da presença de palavras conhecidas.

É chamado de “Bolsa”De palavras, porque qualquer informação sobre a ordem ou estrutura das palavras no documento é descartada. O modelo se preocupa apenas com a ocorrência de palavras conhecidas no documento, e não onde no documento.

Um procedimento de extração de recursos muito comum para frases e documentos é a abordagem do saco de palavras (BOW). Nesta abordagem, olhamos para o histograma das palavras dentro do texto, ou seja, considerando cada contagem de palavra como um recurso.

- Página 69, Métodos de rede neural em processamento de linguagem natural, 2017.

A intuição é que os documentos são semelhantes se tiverem conteúdo semelhante. Além disso, apenas com o conteúdo podemos aprender algo sobre o significado do documento.

O pacote de palavras pode ser tão simples ou complexo quanto você quiser. A complexidade surge tanto em decidir como criar o vocabulário de palavras conhecidas (ou tokens) e como pontuar a presença de palavras conhecidas.

Analisaremos mais de perto essas duas questões.

Exemplo do modelo Bag-of-Words

Vamos concretizar o modelo do saco de palavras com um exemplo trabalhado.

Etapa 1: coletar dados

Abaixo está um trecho das primeiras linhas de texto do livro “A Tale of Two Cities” de Charles Dickens, retirado do Project Gutenberg.

Foi o melhor dos tempos,
Foi o pior dos tempos,
era a era da sabedoria,
era a era da tolice,

Para este pequeno exemplo, vamos tratar cada linha como um “documento” separado e as 4 linhas como todo o nosso corpus de documentos.

Etapa 2: Projete o vocabulário

Agora podemos fazer uma lista de todas as palavras em nosso vocabulário modelo.

As palavras exclusivas aqui (ignorando maiúsculas e minúsculas e pontuação) são:

  • "isto"
  • "estava"
  • "a"
  • "melhor"
  • "de"
  • “Tempos”
  • "pior"
  • "idade"
  • "sabedoria"
  • "loucura"

Esse é um vocabulário de 10 palavras de um corpus contendo 24 palavras.

Etapa 3: Criar vetores de documentos

A próxima etapa é pontuar as palavras em cada documento.

O objetivo é transformar cada documento de texto livre em um vetor que possamos usar como entrada ou saída para um modelo de aprendizado de máquina.

Como sabemos que o vocabulário tem 10 palavras, podemos usar uma representação de documento de comprimento fixo de 10, com uma posição no vetor para pontuar cada palavra.

O método de pontuação mais simples é marcar a presença de palavras como um valor booleano, 0 para ausente, 1 para presente.

Usando a ordem arbitrária de palavras listadas acima em nosso vocabulário, podemos percorrer o primeiro documento (“Foi o melhor dos tempos“) E convertê-lo em um vetor binário.

A pontuação do documento seria a seguinte:

  • “It” = 1
  • “Era” = 1
  • “O” = 1
  • “Melhor” = 1
  • “De” = 1
  • “Vezes” = 1
  • “Pior” = 0
  • “Idade” = 0
  • “Sabedoria” = 0
  • “Tolice” = 0

Como um vetor binário, isso seria o seguinte:

Os outros três documentos seriam os seguintes:

Toda ordenação das palavras é descartada nominalmente e temos uma maneira consistente de extrair recursos de qualquer documento em nosso corpus, pronto para uso em modelagem.

Novos documentos que se sobrepõem ao vocabulário de palavras conhecidas, mas podem conter palavras fora do vocabulário, ainda podem ser codificados, onde apenas a ocorrência de palavras conhecidas é pontuada e as palavras desconhecidas são ignoradas.

Você pode ver como isso pode ser dimensionado naturalmente para grandes vocabulários e documentos maiores.

Gerenciamento de vocabulário

À medida que o tamanho do vocabulário aumenta, também aumenta a representação vetorial dos documentos.

No exemplo anterior, o comprimento do vetor do documento é igual ao número de palavras conhecidas.

Você pode imaginar que, para um corpus muito grande, como milhares de livros, o comprimento do vetor pode ser de milhares ou milhões de posições. Além disso, cada documento pode conter muito poucas das palavras conhecidas no vocabulário.

Isso resulta em um vetor com muitas pontuações zero, denominado vetor esparso ou representação esparsa.

Vetores esparsos requerem mais memória e recursos computacionais durante a modelagem, e o grande número de posições ou dimensões pode tornar o processo de modelagem muito desafiador para algoritmos tradicionais.

Como tal, existe uma pressão para diminuir o tamanho do vocabulário ao usar um modelo de saco de palavras.

Existem técnicas simples de limpeza de texto que podem ser usadas como uma primeira etapa, como:

  • Ignorando maiúsculas e minúsculas
  • Ignorando pontuação
  • Ignorar palavras frequentes que não contêm muitas informações, chamadas palavras de parada, como “a”, “de” etc.
  • Corrigindo palavras com erros ortográficos.
  • Reduzindo as palavras ao radical (por exemplo, “brincar” de “brincar”) usando algoritmos de derivação.

Uma abordagem mais sofisticada é criar um vocabulário de palavras agrupadas. Isso muda o escopo do vocabulário e permite que o pacote de palavras capture um pouco mais de significado do documento.

Nessa abordagem, cada palavra ou token é chamado de “grama”. A criação de um vocabulário de pares de duas palavras é, por sua vez, chamada de modelo de bigrama. Novamente, apenas os bigramas que aparecem no corpus são modelados, nem todos os bigramas possíveis.

Um N-gram é uma sequência N-token de palavras: um 2-gram (mais comumente chamado de bigrama) é uma sequência de duas palavras de palavras como "por favor, vire", "vire" ou "seu dever de casa" e um 3-grama (mais comumente chamado de trigrama) é uma sequência de três palavras de palavras como “por favor, vire o seu” ou “vire o seu dever de casa”.

- Página 85, Speech and Language Processing, 2009.

Por exemplo, os bigramas na primeira linha do texto na seção anterior: “Foi o melhor dos tempos” são os seguintes:

  • "isso foi"
  • "foi o"
  • "ao melhor"
  • "melhor de"
  • “De tempos”

Um vocabulário, então, rastreia trigêmeos de palavras é chamado de modelo de trigrama e a abordagem geral é chamada de modelo de n-gram, onde n se refere ao número de palavras agrupadas.

Freqüentemente, uma abordagem de bigrama simples é melhor do que um modelo de saco de palavras de 1 grama para tarefas como classificação de documentação.

uma representação de saco de bigramas é muito mais poderosa do que um saco de palavras e, em muitos casos, é muito difícil de superar.

- Página 75, Métodos de redes neurais no processamento de linguagem natural, 2017.

Palavras de pontuação

Uma vez que um vocabulário tenha sido escolhido, a ocorrência de palavras em documentos de exemplo precisa ser pontuada.

No exemplo trabalhado, já vimos uma abordagem muito simples de pontuação: uma pontuação binária da presença ou ausência de palavras.

Alguns métodos de pontuação simples adicionais incluem:

  • Conta. Conte quantas vezes cada palavra aparece em um documento.
  • Frequências. Calcule a frequência com que cada palavra aparece em um documento entre todas as palavras do documento.

Hashing de palavras

Você deve se lembrar da ciência da computação que uma função hash é um pouco de matemática que mapeia dados para um conjunto de números de tamanho fixo.

Por exemplo, nós os usamos em tabelas hash durante a programação, onde talvez os nomes sejam convertidos em números para uma pesquisa rápida.

Podemos usar uma representação hash de palavras conhecidas em nosso vocabulário. Isso resolve o problema de ter um vocabulário muito grande para um grande corpus de texto, porque podemos escolher o tamanho do espaço hash, que por sua vez é o tamanho da representação vetorial do documento.

As palavras são hash deterministicamente para o mesmo índice inteiro no espaço hash de destino. Uma pontuação ou contagem binária pode então ser usada para pontuar a palavra.

Isso é chamado de “truque de hash" ou "hashing de recurso“.

O desafio é escolher um espaço hash para acomodar o tamanho do vocabulário escolhido para minimizar a probabilidade de colisões e esparsidade de troca.

TF-IDF

Um problema com a pontuação da frequência de palavras é que palavras altamente frequentes começam a dominar no documento (por exemplo, pontuação maior), mas podem não conter tanto “conteúdo informativo” para o modelo quanto mais raras, mas talvez palavras específicas do domínio.

Uma abordagem é redimensionar a frequência das palavras de acordo com a frequência com que aparecem em todos os documentos, de modo que as pontuações de palavras frequentes como “o”, que também são frequentes em todos os documentos, sejam penalizadas.

Esta abordagem de pontuação é chamada de Frequência de termo - Frequência inversa de documento, ou TF-IDF abreviadamente, onde:

  • Frequência do termo: é uma pontuação da frequência da palavra no documento atual.
  • Frequência inversa do documento: é uma pontuação de como a palavra é rara em documentos.

As pontuações são uma ponderação em que nem todas as palavras são igualmente importantes ou interessantes.

As pontuações têm o efeito de destacar palavras que são distintas (contêm informações úteis) em um determinado documento.

Assim, o idf de um termo raro é alto, enquanto o idf de um termo frequente provavelmente é baixo.

- Página 118, An Introduction to Information Retrieval, 2008.

Limitações do Bag-of-Words

O modelo do saco de palavras é muito simples de entender e implementar e oferece muita flexibilidade ...

Você também pode estar interessado em