Masked Language Modeling, o mascaramento dinâmico, e a lição de que às vezes o avanço é treinar melhor o que já existia.
Em outubro de 2018, quatro meses depois do GPT-1, o Google publicou o BERT. Ele partiu do mesmo bloco Transformer e tomou uma decisão diferente:
Sem a máscara, cada token vê a frase inteira — passado e futuro. A representação de "banco" em "sentei no banco da praça" passa a ser construída com "praça" disponível desde o primeiro bloco.
O ganho em compreensão é enorme e imediato. O BERT quebrou recordes em onze tarefas de uma vez. Mas há um preço, e ele é fatal para uma coisa específica.
Se cada token vê todos os outros, o objetivo de prever a próxima palavra fica trivial. Para prever a palavra 5, basta olhar a palavra 5. O modelo aprenderia a copiar, e nada mais.
Repare que este é exatamente o vazamento de rótulo que a máscara causal existia para impedir (apostila 04). Ao remover a máscara, o BERT perdeu o direito de usar o objetivo do GPT. Ele precisava de outro objetivo de treino.
A ideia do BERT é elegante: em vez de esconder o futuro, esconda palavras sorteadas ao acaso, espalhadas pelo texto, e peça ao modelo que as reconstrua usando tudo o que sobrou dos dois lados.
Texto original:
The cat sat on the mat and slept peacefully
Entrada do modelo (15% dos tokens mascarados):
The cat <mask> on the mat and <mask> peacefully
^
Alvo: reconstruir 'sat' e 'slept'.
Para acertar 'sat', o modelo usa 'cat' (a esquerda) E 'on the mat'
(a direita). E isso que uma tarefa BIDIRECIONAL significa.
Isso se chama Masked Language Modeling (MLM). Em português: a tarefa da lacuna, o exercício de completar frases que você fez na escola. O modelo é forçado a entender o contexto inteiro para preencher o buraco.
Dos 15% de tokens selecionados para mascaramento, o BERT não substitui todos por <mask>. Ele faz:
| Fração | O que faz | Por quê |
|---|---|---|
| 80% | troca por <mask> | a tarefa principal |
| 10% | troca por um token aleatório | força o modelo a desconfiar de todo token, não só dos mascarados. Sem isso, ele aprenderia a copiar cegamente qualquer token não-mascarado. |
| 10% | deixa o token original | evita que o modelo aprenda "só preciso pensar quando vejo <mask>". Ele precisa manter uma representação boa de todo token, sempre. |
Compare a eficiência. No GPT-2, uma sequência de
É por isso que modelos MLM precisam de muito mais passes pelos dados para atingir o mesmo aprendizado — e é uma das razões pelas quais a família decoder acabou dominando quando a escala se tornou o fator decisivo.
Há também um descasamento entre treino e uso: o token <mask> aparece no treino e nunca na aplicação real. O 80/10/10 é justamente um remendo para reduzir esse descasamento.
O RoBERTa não é uma arquitetura nova. É o mesmo BERT, treinado direito. O nome é a sigla de Robustly Optimized BERT Approach, e o artigo dos autores do Facebook AI tem um subtítulo implícito que é quase uma provocação: o BERT estava significativamente subtreinado.
| Mudança | BERT | RoBERTa |
|---|---|---|
| Mascaramento | estático — as máscaras são sorteadas uma vez, no pré-processamento, e o modelo vê sempre o mesmo padrão em cada frase | dinâmico — sorteado de novo a cada época. A mesma frase é vista com buracos diferentes. |
| Tarefa NSP | previa se duas frases eram consecutivas | removida — os autores mostraram que ela atrapalhava |
| Dados | 16 GB | 160 GB (10×) |
| Lotes | 256 sequências | 8 000 sequências |
| Tokenizador | WordPiece, 30 000 | BPE byte-level do GPT-2, 50 265 |
| Treino | 1 M passos | 500 K passos com lotes muito maiores |
No BERT original, a frase "O gato sentou no tapete" tinha suas máscaras decididas uma única vez. Se o sorteio escolheu "sentou", o modelo veria sempre essa mesma lacuna, época após época — e podia simplesmente decorar aquele par específico.
No RoBERTa, cada época sorteia de novo. Numa época o buraco é "sentou", na outra é "tapete", na outra é "gato". Cada frase vira múltiplos exercícios diferentes, e o modelo é forçado a construir uma representação que serve para reconstruir qualquer parte. É mais barato que coletar dados novos, e funciona.
O BERT tinha um segundo objetivo: dado um par de frases, prever se a segunda seguia a primeira no documento original (Next Sentence Prediction). A intuição era ensinar relações entre frases, útil para tarefas como inferência textual.
Os autores do RoBERTa testaram e mostraram que o NSP não ajudava — e em várias tarefas, atrapalhava. A tarefa era fácil demais: distinguir duas frases do mesmo documento de duas frases de documentos aleatórios é quase sempre uma questão de tópico, não de coerência. O modelo aprendia a detectar mudança de assunto, um sinal raso, e gastava capacidade nisso.
O RoBERTa não inventou nada. Ele pegou uma arquitetura existente, questionou cada decisão de treino, mediu, e removeu o que não funcionava. Ganhou vários pontos em benchmarks e virou a base de boa parte da indústria de NLP.
Em uma área que costuma valorizar arquiteturas novas, esse artigo é um lembrete importante: uma parte considerável do que se atribui a "arquitetura melhor" é, na verdade, treino melhor — e quase nunca é medido separadamente. Vale desconfiar disso sempre que ler um paper que anuncia uma arquitetura nova.
| GPT-2 | RoBERTa | |
|---|---|---|
| Máscara causal | sim | não |
| Objetivo de treino | prever o próximo token | reconstruir tokens mascarados |
| Sinal por sequência | 100% das posições | 15% das posições |
| Tokens especiais | <|endoftext|> | <s> </s> <pad> <unk> <mask> |
| Envolve a frase? | não | <s> … </s> |
| Vocabulário | 50 257 | 50 265 |
| Contexto | 1024 | 512 |
| Gera texto? | sim | não |
| Cache KV possível? | sim | não |
Os 8 tokens a mais do RoBERTa (50 265 − 50 257) são exatamente os especiais que ele precisa e o GPT-2 não. O <s> merece atenção especial: ele é o primeiro token de toda sequência e, por ver tudo (bidirecionalmente), acaba funcionando como um resumo da frase inteira. É dele que sai a classificação — e é o assunto da apostila 12.
.venv\Scripts\python.exe lab\10_roberta_mlm.py
Os dois RoBERTa que baixamos são *-openai-detector: eles foram fine-tunados para classificação, e no processo a cabeça de MLM foi descartada e substituída por uma cabeça de classificação binária.
Isso significa que não conseguimos preencher lacunas com eles — a cabeça necessária não está nos pesos. O que conseguimos, e é o que o lab faz: mostrar o corpo bidirecional funcionando (que é o que importa conceitualmente), medir a diferença de representação contra o GPT-2, e usar a cabeça de classificação que eles de fato têm. É uma restrição real deste conjunto de modelos, e o laboratório a registra em vez de fazer o script parecer mais completo do que é.
<s>/</s> envolvendo a frase e o <mask> disponível no vocabulário.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.
Você já viu os dois galhos separadamente. A apostila 11 os coloca frente a frente
e mostra que todas as diferenças descem de uma única linha de código.