Machine Learning · Insper

Representação de Texto

Abordagem avançada

Dentro do tokenizador: como o vocabulário cresce, como as variantes se juntam e por que os modelos neurais nunca encontram uma palavra desconhecida

O caminho desta parte

  1. Contar o vocabulárioas leis de Heaps e de Zipf
  2. Juntar as variantesradicais e lemas, com NLTK e spaCy
  3. Nenhuma palavra desconhecidaWordPiece, SentencePiece; quem decide o quê
Cada etapa responde a uma pergunta: quão grande fica o vocabulário? → as variantes de uma palavra podem dividir uma coluna? → como nenhuma palavra fica desconhecida?
Etapa 1 · quão grande fica o vocabulário?

Quão grande fica o vocabulário?

A coleção 20 Newsgroups: 11.314 posts de grupos da Usenet do começo dos anos 1990. Leia um token de cada vez e conte as palavras distintas vistas até ali.

Preveja. Depois de algumas centenas de milhares de tokens, o número de palavras distintas se estabiliza ou continua crescendo?

Lei de Heaps: o vocabulário nunca para de crescer

Tamanho do vocabulário contra tokens lidos, em escala log-log: uma reta que passa por 3.279 palavras com 11.025 tokens, 18.692 com 100.504 e 63.306 com 1.000.517; chega a 101.631 palavras com 2.158.589 tokens, sem achatar

como ler

  • eixo x: tokens lidos até ali; eixo y: palavras distintas já vistas. Os dois em escala log.
  • Em escala log, uma lei de potência vira reta; a inclinação, 0,61, é o expoente.
  • Pontilhada: se todo token fosse uma palavra nova. A curva fica abaixo dela, mas nunca deita.
  • 11 mil tokens → 3.279 palavras; 100 mil → 18.692; 1 milhão → 63.306.
Dez vezes mais texto dá cerca de 4 vezes mais palavras, sem fim: um vocabulário montado hoje encontra palavras novas amanhã e uma representação esparsa não tem coluna para elas.

Lei de Zipf: poucas palavras estão em toda parte

Preveja. Das 101.631 palavras distintas, que fração aparece uma única vez no corpus inteiro: 5%, 25% ou mais da metade?

Ocorrências de cada palavra contra a sua posição no ranking, em escala log-log: the aparece 106.381 vezes, car 799 e hockey 374; as 10 mais frequentes somam 21% dos tokens e 55% das 101.631 palavras aparecem uma única vez

como ler

  • Cada ponto é uma palavra. Eixo x: a sua posição no ranking (1 = a mais frequente); eixo y: quantas vezes aparece. Os dois em log.
  • No topo, "the" (106.381 vezes), "of", "is": as 10 primeiras são 21% de todos os tokens.
  • No meio, "car" (posto 271, 799 vezes) e "hockey" (posto 625, 374 vezes).
  • Faixa vermelha: 55% das palavras aparecem uma única vez.
A maioria das colunas de um bag-of-words descreve um único documento; as poucas palavras do topo são justamente as stop words.

Simulador: tokenize um parágrafo

Preveja. Passe de unigramas para uni + bi, o que o ngram_range=(1, 2) faz: o vocabulário cresce um pouco, dobra ou mais?

Etapa 2 · as variantes de uma palavra podem dividir uma coluna?

A mesma frase, normalizada

O stemming corta sufixos por regras (o RSLPStemmer do NLTK, Natural Language Toolkit; RSLP: Removedor de Sufixos da Língua Portuguesa); a lematização devolve a forma de dicionário (spaCy). A frase é a da parte fundamental.

Preveja. Um stemmer corta "comeu" para "com". Que outras palavras, sem relação, podem cair na mesma coluna?
passosaída
sem stop wordsgatos · não · comeram · ração · cachorro · mas · gato · comeu
stems (RSLP, Removedor de Sufixos da Língua Portuguesa)os · gat · não · com · a · raç · do · cachorr · mas · o · gat · com
lemas (spaCy)o · gato · não · comer · o · ração · de o · cachorro · mas · o · gato · comeu
bigramasos gatos · gatos não · não comeram · comeram ração · ração do · do cachorro · cachorro mas · mas gato · gato comeu
  • "com" (preposição) e "comida" também viram "com": quatro palavras sem relação dividem uma coluna.
  • O lematizador pequeno deixou "comeu" como estava: ele é um modelo estatístico e erra.
  • "não" sobrevive a esta lista; a lista em inglês do scikit-learn remove "not", "no" e "never".
Etapa 3 · como nenhuma palavra fica desconhecida?

Subpalavras: os tokenizadores dos modelos neurais

Palavras frequentes ficam inteiras; palavras raras viram pedaços frequentes: nenhuma palavra é desconhecida.

Preveja. Um tokenizador treinado em inglês encontra "não" e "cachorro". O que ele faz com elas?
tokenizadorsaída
WordPiece, all-MiniLM-L6-v2
30.522 pedaços do inglês, o tokenizador do BERT (Bidirectional Encoder Representations from Transformers)
tokenization → token ##ization
unbelievably → un ##bel ##ie ##va ##bly
s → os ga ##tos na ##o come ##ram a ra ##cao do ca ##cho ##rro , mas o ga ##to come ##u !
SentencePiece, modelo multilíngue
250.002 pedaços, mais de 50 línguas
s → ▁Os ▁gato s ▁não ▁come ram ▁a ▁ra ção ▁do ▁cachorro , ▁mas ▁o ▁gato ▁come u !
desparafusaram → ▁des para fus aram

##: colado ao pedaço anterior; ▁: início de palavra. Cada pedaço tem seu vetor, então uma palavra nunca vista inteira ainda recebe um.

Quem decide o quê: cada decisão de tokenização, por família

bag-of-words, TF-IDF
frequência do termo × frequência inversa nos documentos
word embeddings (GloVe)sentence embeddings
minúsculas, pontuaçãoescolha sua (o padrão do scikit-learn põe em minúsculas e tira a pontuação)o vocabulário do GloVe é todo em minúsculaso tokenizador do modelo decide
stop wordsopcional: tira colunasopcional, antes da médianão: "não" muda o sentido
stemming, lematizaçãoopcional: junta colunasnão: um vetor por formanão
n-gramasopcional: colunas de paresnãonão: o modelo lê a frase na ordem
subpalavrasnãonão: palavra fora do vocabulário fica sem vetorsim, o tokenizador do modelo
Normalizar é uma decisão da família esparsa. Nos embeddings densos, o tokenizador e o vocabulário vêm com o modelo: o texto entra como está.

Resumo

  1. Lei de Heaps: o vocabulário cresce como \(N^{0{,}61}\) e nunca para; lei de Zipf: 55% das palavras aparecem uma vez.
  2. O stemming corta sufixos (e junta palavras sem relação); a lematização busca a forma de dicionário (e erra).
  3. Os tokenizadores de subpalavras dividem palavras raras em pedaços conhecidos: nenhuma palavra é desconhecida.
  4. Normalizar é uma decisão da família esparsa; os modelos densos trazem o próprio tokenizador.
Lab avançado · cerca de 20 min, em duplas

Dois espaços e um classificador, passos 5 e 6

  • Continue no mesmo notebook e na mesma sessão dos passos 1 a 4.
  • Passo 5: mapas t-SNE (incorporação estocástica de vizinhos com distribuição t, t-distributed stochastic neighbor embedding) dos dois espaços e a sua silhueta.
  • Passo 6: o mesmo classificador caixa-preta nas duas representações, com todos os rótulos e com 10 por classe.
  • Simulação: a ordem importa? (passo 5).
  • O notebook do lab, a partir do passo 5.

Ritmo: passo 5 e a simulação em 12 min; passo 6 em 8 min.