O que exatamente o modelo aprendeu — e como medir isso com um número só, sem depender de anedotas.
O GPT-2 nunca foi ensinado a responder perguntas, resumir textos, traduzir ou escrever código. Ele foi treinado numa única tarefa, repetida bilhões de vezes:
Isso se chama modelagem de linguagem causal (CLM). Formalmente, o modelo aprende a probabilidade de uma sequência inteira, decomposta pela regra da cadeia:
Para prever bem a próxima palavra em textos arbitrários da internet, o modelo é obrigado a aprender, como efeito colateral: ortografia, gramática, concordância, fatos sobre o mundo, estrutura de argumentos, formatos de código, e até rudimentos de raciocínio.
Pense em completar "A capital do Japão é ____". Não há atalho estatístico: para acertar, é preciso saber. O objetivo de treino é trivial; a pressão que ele exerce, não. Essa foi a grande aposta do artigo do GPT-2 — e ela venceu.
Cada sequência de
Uma sequencia, muitos exemplos:
entrada The capital of France is
alvo capital of France is Paris
^ ^ ^ ^ ^
5 previsoes, 5 perdas, 1 passe pelo modelo
Alinhamento no codigo: logits[:, :-1] contra labels[:, 1:]
(descarta a ultima previsao, que nao tem alvo, e o primeiro
token, que nao e previsto por ninguem)
Como se pune um erro? Com o logaritmo negativo da probabilidade atribuída ao token correto:
Três razões, e vale entender as três:
A loss é útil mas pouco intuitiva. A perplexidade é simplesmente sua exponencial:
E ela tem uma leitura direta e muito útil:
Perplexidade é o número efetivo de opções entre as quais o modelo está em dúvida, a cada palavra.
PPL = 1 → certeza absoluta, sempre. PPL = 25 → é como se, a cada palavra, o modelo estivesse escolhendo aleatoriamente entre 25 candidatos igualmente prováveis. PPL = 50 257 → o modelo não aprendeu nada; está chutando uniformemente sobre o vocabulário inteiro.
Menor é melhor. Sempre.
| Situação | PPL aproximada |
|---|---|
| Chute uniforme no vocabulário | 50 257 |
| Modelo de trigramas (anos 90) | ~150 |
| GPT-2 small, texto em inglês | ~25–30 |
| GPT-2 XL, texto em inglês | ~15–18 |
| GPT-3 (175 B) | ~10 |
| Modelos de fronteira, 2026 | < 8 |
| Estimativa para um humano | ~10–12 |
Esta é a armadilha mais comum, e ela invalida muita comparação publicada. A perplexidade é medida por token. Se o modelo A usa um tokenizador que quebra o texto em 100 tokens e o modelo B usa um que quebra em 150, o modelo B parece melhor só por estar prevendo pedaços menores e mais fáceis.
Toda a família GPT-2 compartilha o mesmo tokenizador, então a comparação entre eles é legítima. Comparar a PPL de um GPT-2 com a de um Llama é comparar coisas diferentes — a menos que se normalize por caractere ou por byte (as métricas bits-per-character ou bits-per-byte existem exatamente para isso).
Isso também explica por que a PPL do GPT-2 em português vai parecer alta: além de o modelo não conhecer bem o idioma, cada palavra está sendo quebrada em mais tokens.
| Item | Detalhe |
|---|---|
| Corpus | WebText: ~8 milhões de páginas, ~40 GB de texto. Construído raspando todos os links externos postados no Reddit que tivessem ao menos 3 karma — um filtro de qualidade barato e engenhoso, usando curadoria humana já existente. |
| Filtragem | Wikipédia foi removida de propósito, para não contaminar avaliações. Duplicatas removidas. |
| Objetivo | CLM puro. Sem instruções, sem RLHF, sem chat. O GPT-2 não é um assistente — ele é um completador de texto. |
| Contexto | 1024 tokens. Documentos separados por <|endoftext|>. |
| Otimizador | Adam, com warmup na taxa de aprendizado e decaimento por cosseno. |
| Épocas | Aproximadamente 1. O modelo viu cada texto essencialmente uma vez. |
Se você escrever "Qual é a capital da França?", o GPT-2 não vai responder. Ele vai continuar o texto, e a continuação mais provável de uma pergunta na internet é… outra pergunta. Ele pode devolver "Qual é a capital da Alemanha? Qual é a capital da Itália?".
Isso não é falha do modelo — é o modelo funcionando exatamente como treinado. A distância entre o GPT-2 e o ChatGPT não é principalmente tamanho: é o fine-tuning de instruções e o RLHF, que vieram depois e que ensinam o modelo a tratar o texto como um pedido a ser atendido em vez de um trecho a ser continuado.
Consequência prática: com o GPT-2, escreva prompts em forma de começo de texto, não de pergunta. "A capital da França é" funciona; "Qual é a capital da França?" não.
# perplexidade de um texto, do jeito correto import torch from transformers import AutoTokenizer, AutoModelForCausalLM tok = AutoTokenizer.from_pretrained("openai-community/gpt2") mod = AutoModelForCausalLM.from_pretrained("openai-community/gpt2").eval() def perplexidade(texto): ids = tok(texto, return_tensors="pt", truncation=True, max_length=1024) # passando labels=input_ids, o transformers já faz o deslocamento # de 1 posição e calcula a entropia cruzada média. with torch.no_grad(): perda = mod(**ids, labels=ids["input_ids"]).loss return torch.exp(perda).item() print(perplexidade("The capital of France is Paris.")) # baixa print(perplexidade("Colorless green ideas sleep furiously.")) # alta
.venv\Scripts\python.exe lab\08_perplexity.py
| Modelo | Parâmetros | PPL | Comparado ao anterior |
|---|---|---|---|
openai-gpt | 117 M | 46,07 | — |
gpt2 | 124 M | 21,70 | melhorou |
gpt2-medium | 355 M | 16,04 | melhorou |
gpt2-large | 774 M | 14,30 | melhorou |
gpt2-xl | 1558 M | 12,93 | melhorou |
Monotônica em todos os degraus. Nenhuma inversão, nenhuma surpresa. Compare com a apostila 06, onde o large "errou" uma pergunta que o medium "acertou".
Os modelos são os mesmos nos dois experimentos. O que mudou foi a métrica. Uma amostra única mede ruído; a perplexidade mede a distribuição. Guarde esse par de resultados — é a melhor lição de metodologia deste curso.
Repare também no salto GPT-1 → GPT-2: de 46 para 21,7 com praticamente o mesmo número de parâmetros (117 M vs 124 M). Isso não foi escala. Foi o corpus melhor, o tokenizador melhor e o Pre-LN. É o assunto da próxima apostila.
| Texto | PPL |
|---|---|
| Clichê famoso: "It was the best of times…" | 5,8 |
| Código Python | 8,6 |
| Inglês natural | 21,7 |
| Português natural | 413,1 |
| Caracteres aleatórios | 469,4 |
| Inglês com palavras embaralhadas | 3 874,0 |
| Chomsky: "Colorless green ideas sleep furiously" | 6 413,3 |
Ruído puro sai oito vezes mais barato que o inglês embaralhado, e treze vezes mais barato que a frase do Chomsky. Isso parece estranho até você entender o que a perplexidade realmente mede.
Depois dos primeiros caracteres aleatórios, o modelo entra num regime de "isto aqui é ruído" e passa a esperar mais ruído — o que ele faz razoavelmente bem. A distribuição fica achatada, mas correta.
Já o texto embaralhado ativa todas as expectativas gramaticais do modelo e depois as viola, uma por uma. Cada violação é cara. A frase do Chomsky faz o mesmo no nível semântico: sintaxe impecável, significado impossível.
Corolário útil: perplexidade não é uma medida de qualidade de texto. Um texto pode ter PPL baixíssima por ser genérico e decorado (veja o clichê, em 5,8). Usar PPL como proxy de "qualidade" é um erro comum.
Ressalva metodológica: a frase do Chomsky tem apenas 7 tokens. Médias sobre amostras minúsculas são instáveis, e um único token improvável domina o resultado. Trate esse número como ilustrativo. Regra geral: desconfie de perplexidade calculada sobre textos curtos.
As fontes primárias dos conceitos deste capítulo. Os números do texto foram medidos no laboratório; as ideias vêm daqui.
Os termos técnicos têm aqui o sentido de aprendizado de máquina. O glossário do curso mostra esse sentido ao lado dos outros que as mesmas palavras têm na TI.
Fim da Parte II. Você entende a família GPT inteira: como ela é montada, como escolhe palavras, e como se mede.
A Parte III cruza para o outro galho da árvore — e a apostila 09 primeiro fecha a conta com o GPT-1.