Como se transforma um modelo de linguagem num classificador — e por que essa ferramenta específica não deve ser usada para decidir nada.
Quando a OpenAI lançou o GPT-2, em 2019, houve preocupação real com uso indevido — geração de desinformação em escala. A resposta foi lançar, junto, um detector: um RoBERTa fine-tunado para classificar texto como "escrito por humano" ou "gerado pelo GPT-2".
O gesto é elegante e vale apreciar: a OpenAI construiu o caçador com a arquitetura oposta à da caça. Um decoder gera; um encoder julga. É o fecho natural do curso.
roberta-base-openai-detector
parametros totais 124,647,170
corpo RoBERTa 124,055,040 (99.53%)
cabeca de classificacao 592,130 ( 0.47%)
rotulos: {0: 'Fake', 1: 'Real'}
Olhe a proporção. 99,5% do modelo é o RoBERTa pré-treinado, reaproveitado inteiro. A parte específica da tarefa — a que sabe distinguir humano de máquina — é meio por cento.
Este é o mecanismo que domina o uso prático de modelos pré-treinados, e ele tem três passos:
O corpo do RoBERTa já sabe o que é linguagem: gramática, semântica, estilo, registro. Essa foi a parte cara — 160 GB de texto e milhares de horas de GPU.
A tarefa "humano ou máquina?" não exige aprender linguagem de novo. Exige apenas aprender a ler um sinal específico numa representação que já é rica. Por isso bastam alguns milhares de exemplos rotulados e algumas horas de treino, em vez de meses.
É o mesmo princípio de contratar alguém que já sabe ler para treinar como revisor: você ensina o critério de revisão, não o alfabeto.
<s>A cabeça precisa de um vetor para representar o texto inteiro, mas o encoder devolve um vetor por token. Qual usar?
A convenção do BERT/RoBERTa: o vetor do primeiro token, o <s> (no BERT chamado [CLS]). E há um motivo, não é arbitrariedade:
<s> não carrega significado próprio — não é uma palavra do texto.Repare que isso só funciona num encoder. Num decoder causal, o primeiro token só vê a si mesmo — é o token mais ignorante da sequência, não o mais informado. Por isso classificadores baseados em decoder usam o último token, não o primeiro.
1. O roberta-large-openai-detector não traz os rótulos. O config.json dele mostra LABEL_0/LABEL_1 em vez de Fake/Real. A ordem é a mesma da versão base (0 = Fake, 1 = Real), mas se você confiar cegamente no id2label vai reportar resultados invertidos sem perceber. O módulo lab/common.py corrige isso explicitamente.
2. Há um pooler órfão nos pesos. Ao carregar, o transformers avisa que roberta.pooler.dense.weight é "UNEXPECTED". É resíduo do pré-treino: a RobertaForSequenceClassification lê o <s> diretamente, sem passar pelo pooler. O aviso é inofensivo — mas vale saber ler avisos assim em vez de ignorá-los por reflexo.
| Estratégia de geração | P(humano) | Veredito |
|---|---|---|
| greedy | 0,0002 | MÁQUINA |
T=0.7, top_p=0.9 | 0,0002 | MÁQUINA |
T=1.0, top_p=0.95 | 0,1098 | MÁQUINA |
T=1.4 | 0,0002 | MÁQUINA |
Praticamente perfeito. O detector foi construído para esta tarefa exata e a executa muito bem.
Nota metodológica: a expectativa era encontrar aqui um padrão do tipo "quanto maior a temperature, mais difícil detectar". Ele não apareceu — o T=1.4 é pego tão facilmente quanto o greedy. Fica registrada a ausência do padrão, em vez de uma explicação para um efeito que os números não mostram.
| Texto humano | P(humano) | Veredito |
|---|---|---|
| Melville, Moby Dick (1851) | 0,952 | humano |
| Abstract científico | 0,975 | humano |
| Relato técnico informal (depuração de bug) | 0,186 | MÁQUINA ✗ |
| Manual de instruções | 0,436 | máquina? ✗ |
| Texto de regulamento | 0,034 | MÁQUINA ✗ |
Um falso negativo (texto de máquina passando por humano) é um incômodo. Um falso positivo — texto humano acusado de ser de máquina — é uma acusação contra uma pessoa.
Detectores desse tipo foram amplamente usados por professores para acusar alunos de trapaça. Nesse contexto, um falso positivo não é uma estatística: é um aluno reprovado injustamente, sem poder provar sua inocência.
E repare quem escreve de forma mais formal, padronizada e previsível: quem escreve num segundo idioma, quem aprendeu a escrever em contexto acadêmico rígido, quem usa corretor automático. Os falsos positivos não se distribuem uniformemente — eles caem desproporcionalmente sobre quem já está em desvantagem. Existe literatura documentando exatamente isso para escritores não-nativos de inglês.
Dei aos dois detectores um texto escrito por um LLM de 2026:
| Detector | P(humano) | Veredito |
|---|---|---|
roberta-base-openai-detector | 0,9940 | HUMANO ✗ |
roberta-large-openai-detector | 0,9993 | HUMANO ✗ |
Falha completa, e com altíssima confiança — o que é pior do que falhar com incerteza. O modelo não tem como saber que está fora do seu domínio.
Um classificador aprende a fronteira entre as distribuições que viu. Este viu texto humano de 2019 e texto de GPT-2 de 2019. Texto de um modelo de 2026 não se parece com nenhum dos dois — é fora da distribuição, e o modelo não tem mecanismo algum para reconhecer isso.
Pior: modelos de classificação são tipicamente mal calibrados fora do domínio. Eles não ficam incertos — ficam confiantemente errados, como você vê nos 0,9993 acima. Essa é uma das armadilhas mais importantes de ML aplicado, e você acabou de vê-la ao vivo.
Detectar texto de máquina é adversarial: cada modelo novo torna o detector mais obsoleto. E o alvo se move mais rápido do que o detector consegue ser retreinado.
A própria OpenAI reconheceu isso na prática. Ela lançou um detector próprio, mais moderno, em janeiro de 2023, e o desativou em julho do mesmo ano — seis meses depois — citando baixa taxa de acerto. Quando quem fabrica os geradores desiste de detectá-los, é um sinal forte.
O Exercício 0 da apostila 00 pedia uma estimativa, sem pesquisar, de quanto este detector acertaria em 2026 — e avisava que a resposta era desconfortável. Aqui está:
Não use este modelo para decidir nada sobre uma pessoa. Contra GPT-2 ele funciona muito bem. Contra qualquer coisa de 2023 em diante, ele é pior que inútil — ele é confiantemente errado, o que dá a falsa impressão de rigor.
Como objeto de estudo, porém, ele é excelente, e por isso está neste curso: ele demonstra fine-tuning, o uso do <s>, a economia de reaproveitar 99,5% de um modelo pré-treinado, e — talvez o mais valioso — a diferença entre funcionar no papel e funcionar no mundo.
.venv\Scripts\python.exe lab\09_detector.py
O script reproduz tudo acima na sua máquina: a anatomia do modelo, o ciclo completo (GPT-2 gera → RoBERTa julga), a comparação base vs large, e as duas falhas. Rode até o fim — a seção 5 é o ponto.
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 III. Você percorreu os dois galhos da árvore inteiros.
A Parte IV sai da teoria: o código original da OpenAI, e como servir esses modelos de verdade.