Capítulo 02 · Tokenização · 8 min
Do texto aos tokens
Como o texto se torna números. BPE, subpalavras, e por que os LLMs têm dificuldade em contar letras.
Por que tokens?
Um modelo de linguagem não consegue manipular texto diretamente. Ele manipula números. O primeiro passo, sempre que você fala com um LLM, é transformar o texto em uma sequência de inteiros: os token IDs.
A tokenização é o corte que torna essa conversão possível.
Por que não um token por palavra?
À primeira vista, poderíamos imaginar: uma palavra = um token. Simples.
Mas não funciona:
- A língua contém milhões de palavras possíveis (flexões, neologismos, nomes próprios, erros de digitação...). Ter um token por palavra exigiria um vocabulário gigantesco.
- O modelo não consegue fazer nada com uma palavra que nunca viu.
- Algumas línguas (chinês, japonês) nem sequer usam espaços entre palavras.
A solução adotada por quase todos os LLM modernos: as subpalavras.
Tokenização por subpalavras
Com um tokenizer de subpalavras:
- Palavras frequentes viram um único token (
the,e,são) - Palavras raras são quebradas em partes menores (
tokenização→token+ização) - Caracteres desconhecidos continuam decomponíveis até a letra
O resultado: um vocabulário de tamanho razoável (tipicamente de 30.000 a mais de 250.000 tokens: a faixa sobe com o tempo, porque os tokenizadores recentes cobrem muito mais línguas) que consegue representar qualquer texto.
O algoritmo mais usado se chama BPE (Byte Pair Encoding). Ele começa com caracteres individuais e funde iterativamente os pares mais frequentes no corpus de treinamento.
BPE em trinta segundos
Imagine um mini-corpus de três palavras: low, lower, lowest. Começamos tokenizando no nível do caractere:
l o w
l o w e r
l o w e s t
A cada iteração, procuramos o par de tokens adjacentes mais frequente. Aqui, l o aparece três vezes — fundimos em lo:
lo w
lo w e r
lo w e s t
Agora lo w é o par mais frequente. Fundimos:
low
low e r
low e s t
Continuamos até atingir o tamanho de vocabulário desejado. Os pedaços que aparecem com frequência (low) viram um único token. Os raros (est) ficam decompostos. É exatamente isso que o BPE faz — sobre bilhões de palavras em vez de três, e sobre bytes em vez de caracteres nos modelos modernos (byte-level BPE), o que garante que nada fique "fora do vocabulário".
Alguns parentes que vale conhecer: WordPiece (BERT) e Unigram LM (T5, mT5) são, como o BPE, algoritmos de construção do vocabulário. Cuidado com uma confusão comum: SentencePiece, muitas vezes citado no mesmo nível, não é um algoritmo e sim uma biblioteca — ela implementa BPE e Unigram, e foi ela que serviu para T5, mT5 e os primeiros Llama (1 e 2). Desde o Llama 3 (2024), a Meta passou a um BPE byte-level de 128.000 tokens, no espírito do tiktoken. Todos compartilham a mesma ideia — um vocabulário de subpalavras — com heurísticas diferentes.
Tokens especiais
Além das subpalavras do texto, o tokenizer reserva alguns tokens especiais que nunca aparecem naturalmente:
<|im_start|>,<|im_end|>(OpenAI),[INST]…[/INST](Llama 2 e Mistral),<|start_header_id|>…<|eot_id|>(Llama 3 e seguintes),<|user|>/<|assistant|>— delimitam os turnos de uma conversa. Cada família de modelos tem seu formato, e ele muda de uma geração para outra.<|endoftext|>— fim de documento.<|fim_prefix|>,<|fim_middle|>— para fill-in-the-middle, usado em completação de código.
É o que permite transformar um diálogo "Usuário disse X, Assistente respondeu Y" em uma sequência linear de tokens que o modelo consegue processar. Quando você manda uma mensagem para o ChatGPT, esses marcadores são adicionados automaticamente antes da tokenização.
Teste
À direita aparecem as sub-palavras: cada token é um fragmento reutilizável, não necessariamente uma palavra inteira. As palavras frequentes cabem em um único token; as raras se decompõem em vários pedaços.
Algumas coisas para observar:
- Palavras curtas e frequentes raramente são cortadas.
- Palavras longas ou raras muitas vezes acabam em várias partes.
- O espaço antes de uma palavra faz parte do token (por isso
· helloehellosão tokens diferentes). - Em português, a relação token/palavra costuma ser um pouco maior que em inglês (cerca de 1.3-1.7 contra 1.2-1.4 nos tokenizadores da geração GPT-3/GPT-4), também porque os modelos viram mais inglês durante o treinamento. Os tokenizadores recentes, com vocabulários bem maiores e mais multilíngues, estreitaram a diferença. Não a apagaram: o português continua mais caro que o inglês.
Consequências práticas
Essa história de tokens tem muitas implicações inesperadas:
- LLMs contam mal letras. "Quantos R existem em strawberry?" ficou como a pegadinha célebre de 2024: muitos modelos respondiam 2 em vez de 3, porque a palavra chega em poucos tokens, não como letras separadas. Hoje os grandes modelos acertam — mas a causa estrutural não mudou nem um pouco. Eles aprenderam a contornar, soletrando a palavra letra por letra antes de contar. Se você fizer a pergunta a um modelo recente, olhe o raciocínio dele: essa etapa de soletração costuma estar lá. É a confissão de que a contagem direta, essa sim, continua não funcionando.
- Os preços de API são calculados em tokens, não em palavras. O português pode custar um pouco mais para processar do que o inglês.
- As janelas de contexto (
128k tokens,200k tokens...) também são medidas em tokens. Um livro de 100.000 palavras em português pode representar cerca de 140.000 tokens.
Para o modelo, "tokenização" e "tok·en·iza·ção" são a mesma coisa. Ele só vê pedaços.
O próximo passo
Agora que seu texto virou uma sequência de inteiros, esses inteiros entram no modelo. Primeiro passo lá dentro: eles são transformados em vetores, em um espaço de centenas de dimensões onde o significado vira uma posição geométrica.
Esse é o tema do próximo capítulo.
Atualizado em