o problema
Em 2018 o estado da arte em NLP era uma linha de montagem: junta um dataset rotulado para a tarefa, treina um modelo em cima de um encoder pré-treinado, mede em held-out IID. Funcionava, e produzia o que os autores chamam de especialistas estreitos — sistemas que quebram quando a distribuição muda um pouco, que erram feio em legendagem de imagem, em compreensão de leitura, em classificação. Cada tarefa nova custava um dataset novo.
A saída óbvia era multitask learning: treinar numa mistura de tarefas para ganhar generalidade. Mas o paper faz uma conta desconfortável. Do ponto de vista de meta-aprendizado, cada par (dataset, objetivo) é um exemplo de treino sorteado da distribuição de tarefas. Sistemas de ML precisam de centenas ou milhares de exemplos para induzir funções que generalizam. Os dois esforços mais ambiciosos até então tinham juntado 10 e 17 pares. Escalar curadoria de dataset e design de objetivo até a casa dos milhares não ia acontecer por força bruta.
a ideia
Executar uma tarefa é estimar p(saída | entrada). Um sistema geral precisa estimar p(saída | entrada, tarefa). Normalmente isso vira arquitetura: encoder por tarefa, loop externo de otimização, cabeça específica. Mas linguagem já especifica tarefa, entrada e saída como uma sequência de símbolos — “translate to french, texto em inglês, texto em francês” é uma frase, não um schema.
Daí o pulo: o objetivo supervisionado é o objetivo não supervisionado avaliado só num subconjunto da sequência. O mínimo global de um é o mínimo global do outro. Se a internet contém demonstrações naturais dessas tarefas — e contém, a Tabela 1 do paper mostra trechos de tradução inglês-francês aparecendo espontaneamente em texto comum — então um modelo com capacidade suficiente vai aprender a inferir e executar as tarefas simplesmente porque isso ajuda a prever o texto. A questão deixa de ser teórica e vira empírica: dá para otimizar isso até o ponto em que funciona?
como funciona
O corpus é o WebText: todos os links de saída do Reddit com no mínimo 3 de karma, como heurística barata de curadoria humana. São 45 milhões de links, que depois de extração de HTML, de-duplicação e limpeza viram pouco mais de 8 milhões de documentos e 40 GB de texto. Wikipedia foi removida de propósito, porque é fonte comum dos benchmarks de avaliação.
A tokenização é BPE em nível de byte. BPE sobre code points Unicode exigiria vocabulário base de mais de 130.000; sobre bytes, 256. O detalhe que faz funcionar é proibir merges entre categorias de caractere, com exceção para espaços — sem isso o vocabulário desperdiça slots em dog., dog!, dog?. O resultado é um modelo que atribui probabilidade a qualquer string Unicode, e portanto pode ser avaliado em qualquer dataset sem pré-processamento.
A arquitetura é a do GPT com ajustes: layer normalization movida para a entrada de cada sub-bloco, uma normalização extra depois do último bloco de self-attention, e pesos das camadas residuais escalados por 1/√N na inicialização, com N o número de camadas residuais. Vocabulário de 50.257, contexto de 1024 tokens (era 512), batch de 512. Quatro tamanhos: 117M, 345M, 762M e 1542M. O menor equivale ao GPT original; o segundo, ao maior BERT.
Avaliar é prompting, embora ninguém chamasse assim. Resumo: cola TL;DR: depois do artigo. Tradução: alimenta pares frase inglesa = frase francesa e corta no =. QA: semeia o contexto com pares pergunta-resposta para o modelo inferir o formato de resposta curta.
o que isso custou
Os números bons são reais: perplexidade de 8,63 no LAMBADA contra 99,8 do estado da arte anterior, 70,70% no Winograd Schema, 55 F1 no CoQA sem tocar nos 127.000+ pares de treino que as baselines usaram. Os ruins são igualmente reais e o paper não os esconde. Resumo mal supera escolher três frases aleatórias do artigo (21,40 contra 20,98 de ROUGE médio). Tradução inglês-francês dá 5 BLEU, contra 33,5 do melhor método não supervisionado. Em Natural Questions, 4,1% de acerto exato, contra 30 a 50% de sistemas que combinam recuperação com extração. No One Billion Word Benchmark o modelo perde feio, provavelmente porque o shuffle de frases do dataset destrói toda estrutura de longo alcance.
O CoQA de 55 F1 fica longe dos 89 F1 humanos, e inspecionar os erros mostra heurística de recuperação — responder com um nome do documento quando a pergunta começa com “quem”. A seção de discussão é explícita: em termos de aplicação prática, o desempenho zero-shot do GPT-2 ainda está longe de utilizável. E todos os quatro modelos continuavam com underfit no WebText quando o treino parou.
onde isso aparece hoje
A continuação direta é GPT-3, que pega a curva log-linear deste paper e a empurra duas ordens de grandeza, trocando zero-shot por few-shot no prompt. A relação entre tamanho, dado e perda virou objeto próprio em Scaling Laws e depois em Chinchilla. A discussão sobre quais capacidades aparecem só a partir de certa escala virou Emergent Abilities — e a réplica que argumenta que boa parte disso é artefato da métrica.
O byte-level BPE descrito aqui é ancestral direto dos tokenizadores usados até hoje, e herda o problema de fragmentação que o BPE original já tinha. A prática de checar sobreposição de n-gramas entre treino e teste, que aqui é uma seção honesta com Bloom filters, virou item obrigatório de qualquer relatório técnico de modelo. E o gesto de descrever a tarefa em texto puro, sem cabeça nova nem fine-tuning, é o que hoje se chama prompt.