Carregando
0x40Lição 5 de 18

Representar documentos com contagem de palavras

Crie uma visualização de conjunto de palavras e avalie as palavras de acordo com o quanto elas diferenciam os documentos.

20 min Questionário com 7 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Transforme um documento em uma representação de saco de palavras
  • Calcule o TF-IDF e explique o que ele recompensa
  • Cite o que falta nas representações baseadas em contagem

Um programa não pode comparar sentenças diretamente, mas pode comparar números. A maneira mais simples de transformar um documento em números é contar suas palavras. Essa representação de saco de palavras mantém quais palavras ocorrem e com que frequência, e descarta sua ordem - como se você colocasse as palavras em um saco e o sacudisse.

bag_of_words.py
from collections import Counter
words = "cats chase cats".split()
print(Counter(words))
Saída
Counter({'cats': 2, 'chase': 1})

Nem todas as palavras são igualmente informativas

Raw conta palavras de recompensa como the, que aparecem em todos os lugares. TF-IDF corrige isso multiplicando dois números:

  • Frequência do termo (tf): quanto deste documento o termo compõe - sua contagem dividida pela extensão do documento.
  • Frequência inversa do documento (idf): quão raro o termo é em todos os documentos: idf=ln⁡(N/df)\text{idf} = \ln(N / \text{df}), onde NN é o número de documentos e df quantos contêm o termo.

Uma palavra em cada documento recebe ln(N/N) = ln(1) = 0, portanto não tem peso algum. Uma palavra que é frequente aqui, mas rara em outros lugares, recebe o maior peso – é o que torna este documento diferente.

Experimente

Até 15 XP

Explorador TF-IDF

Clique nos termos e observe os três números em cada documento.

  • Experimente o: por que seu TF-IDF é zero em todos os lugares, mesmo sendo a palavra mais comum?
  • Tente cat e depois purr: qual é a melhor pista para o primeiro documento e por quê?
  • Cada cartão mostra seu termo principal - é um bom resumo de uma palavra?

Escolha um termo

Pets

The cat sat by the fire. The cat began to purr.

tf
0,273
idf = ln(3/3)
0,000
tf × idf
0,000

Termo principal aqui: sat

Weather

The rain fell all day. The storm brought rain and wind.

tf
0,182
idf = ln(3/3)
0,000
tf × idf
0,000

Termo principal aqui: rain

Animals

The dog chased the cat across the field.

tf
0,375
idf = ln(3/3)
0,000
tf × idf
0,000

Termo principal aqui: dog

“the” aparece em 3 de 3 documentos, ou seja, em todos. Por isso, seu idf é 0 e ele não ajuda a distinguir os documentos.

Principais conclusões

  • Saco de palavras = contagem de palavras sem ordem: simples, rápido e cego para “cachorro morde homem” vs “homem morde cachorro”.

  • TF-IDF = quão frequente um termo é aqui × quão raro ele é em geral. Palavras encontradas em todos os lugares recebem peso 0.

  • As contagens capturam bem os tópicos, mas não o significado, a negação ou a ordem das palavras.

Quiz da aula

7 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: aplique NLP com Python

Experimente cada ideia de processamento de texto em Python, execute com entradas de exemplo e use os resultados para ver onde o método funciona ou falha.

Exercício 1

Conte as palavras

+25 XP

Leia o texto, coloque-o em minúsculas, extraia palavras alfabéticas, imprima cada palavra distinta e conte em ordem alfabética como word: count.

  • Palavras repetidas
  • Três tokens
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Exercício 2

Calcular TF-IDF

+25 XP

A primeira linha é um termo. O segundo é o número de documentos N, seguido por N linhas de documentos. Trate cada documento como palavras alfabéticas em minúsculas (re.findall(r"[a-z]+", line.lower())).

Para cada documento, imprima seu TF-IDF para o termo arredondado para 3 decimais, usando tf=count/nuˊmero de palavras\text{tf} = \text{count} / \text{número de palavras} e idf=ln⁡(N/df)\text{idf} = \ln(N / \text{df}). Se nenhum documento contiver o termo, imprima 0,0 para cada um.

  • Uma palavra distintiva
  • Uma palavra em cada documento
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…