Machine Learning · Insper · E2.1

Bag-of-Words

Abordagem avançada

Pedaços de palavras, um corpus real e o que as contagens brutas põem em primeiro lugar

O caminho desta parte

  1. Pedaços de palavrasn-gramas de caracteres: plurais, erros de digitação, rimas
  2. Um corpus real99,90% de zeros, formato CSR, o preço dos n-gramas
  3. O que as contagens põem em primeiropalavras que estão em toda parte, um documento estranho
Cada etapa responde a uma pergunta: e se contarmos pedaços de palavras? → como é um corpus real em contagens? → quais palavras as contagens brutas põem em primeiro?
Etapa 1 · e se contarmos pedaços de palavras?

n-gramas de caracteres

analyzer='char_wb' corta cada palavra, com espaços nas bordas, em pedaços sobrepostos de 3 letras.

parcossenotrigramas compartilhados
sábado / sábados0,77' sá', 'ado', 'bad', 'sáb', 'ába'
gato / gatos0,67' ga', 'ato', 'gat'
gato / pato0,50'ato', 'to '
Toleram plurais, conjugações e erros de digitação, sem stemmer nenhum. O custo: "gato" e "pato" compartilham a grafia, não o sentido.
Etapa 2 · como é um corpus real em contagens?

Esparsidade: um corpus de verdade

20 Newsgroups, parte de treino: 11.314 posts, sem cabeçalhos, assinaturas e respostas citadas.

Preveja. O vocabulário tem 101.631 palavras. Que fração das células é zero?

zeros

99,90%
um post mediano usa 61 colunas

como array denso

9,2 GB
float64

como CSR esparsa

13,3 MB
cerca de 700 vezes menos

Por que os vetorizadores devolvem matrizes esparsas

Esquerda: pontos marcando as células não nulas de 200 posts pelas 2.000 palavras mais frequentes, ainda 96,8% vazias. Direita: com bigramas, o vocabulário passa de 101.631 para 948.675 colunas e, com trigramas, para 2.524.547, enquanto o post mediano preenche só 61, 136 e 213 delas

O formato CSR (linhas esparsas comprimidas) guarda só os valores não nulos e suas colunas. Os bigramas multiplicam as colunas por 9 e os trigramas por 25; min_df=2 ou max_features controlam o tamanho. O .toarray() fica restrito a exemplos pequenos.

Etapa 3 · quais palavras as contagens brutas põem em primeiro?

O que as contagens brutas põem em primeiro lugar

Some cada coluna dos 11.314 posts e ordene.

Preveja. Qual palavra vem primeiro? E depois de remover as stop words do inglês?
vetorizadorpalavras do topoa líder
padrãothe, ax, to, of, and, in, is, that"the": 106.381 vezes, em 9.475 posts
stop_words='english'ax, max, people, like, don, just, know, use"ax": 62.387 vezes, em 20 posts

Dois problemas, uma cura

Esquerda: as 15 palavras mais frequentes com o tokenizador padrão são palavras funcionais lideradas por the, 24% de todos os tokens. Direita: com a lista de stop words do inglês, ax lidera com 62.387 ocorrências em só 20 posts
  • Palavras presentes em quase todo post não dizem nada sobre o assunto.
  • "ax" se repete milhares de vezes em 20 posts com arquivos binários colados como texto: um único documento estranho domina uma coluna.
A cura, na próxima página (E2.2 TF-IDF): pesar cada palavra por quantos documentos a contêm, não só por quantas vezes ela aparece.

Resumo

  1. Os n-gramas de caracteres casam pedaços da grafia: plurais e erros de digitação se aproximam; as rimas também.
  2. Uma matriz de contagens real tem 99,90% de zeros; o CSR guarda só os não nulos (13,3 MB em vez de 9,2 GB).
  3. Os n-gramas multiplicam as colunas e a maioria das novas aparece num único post: o min_df as controla.
  4. As contagens brutas são lideradas por palavras que estão em toda parte ("the") ou por um documento estranho ("ax").
A seguir: o TF-IDF (frequência do termo × frequência inversa nos documentos) pesa cada palavra pelo número de documentos que a contêm.
Lab avançado · cerca de 15 min, em duplas

O que o saco não enxerga, passos 6 e 7

  • Continue no mesmo notebook e na mesma sessão dos passos 1 a 5.
  • Passo 6: n-gramas de palavras e de caracteres, avaliados pela concordância de vizinhos.
  • Passo 7: um post com as palavras embaralhadas tem exatamente o mesmo vetor de contagens.
  • Simulação: quão raros são os n-gramas? (passo 6).
  • O notebook do lab, a partir do passo 6.

Ritmo: passo 6 e a simulação em 10 min; passo 7 em 5 min.