Fundamentos
Tokenization II: BPE, passo a passo
O byte-pair encoding junta o par adjacente mais frequente, reconta e repete; acompanhe quatro merges na mão e veja por que é a lista ordenada de merges, e não o vocabulário, que torna a codificação reprodutível.
Atualizada em
01 · Conceito
Conceito
A lição 1.2 afirmou que pedaços de subpalavra são aprendidos de um corpus e deixou o aprendizado sem explicação. Esta lição faz isso na mão, com um corpus pequeno o bastante para contar no papel, porque o algoritmo é genuinamente simples e a parte interessante é o que acontece entre os merges.
Tome um corpus com três palavras nestas frequências: low cinco vezes, lower duas e lowest três. Divida cada palavra em caracteres e acrescente um marcador de fim de palavra, escrito aqui como um sublinhado para que um pedaço que encerra a palavra seja distinguível do mesmo pedaço no meio dela. O corpus agora é l o w _ com contagem 5, l o w e r _ com 2 e l o w e s t _ com 3.
Conte todo par adjacente, ponderando pela frequência da palavra. O par l o aparece nas três palavras, dando . O par o w dá 10 do mesmo jeito. O par w _ aparece só em low, dando 5. O par w e aparece em lower e lowest, dando 5. Depois e r dá 2, r _ dá 2, e s dá 3, s t dá 3 e t _ dá 3. Dois pares empatam no topo, então a regra de desempate da implementação decide; fique com l o.
- l o w _×5
- l o w e r _×2
- l o w e s t _×3
- par vencedor: l + o5 + 2 + 3 = 10
Cada palavra é dividida em caracteres com um marcador de fim de palavra. Contando pares adjacentes, l+o e o+w empatam em 10; o desempate escolhe l+o.
- lo w _×5
- lo w e r _×2
- lo w e s t _×3
- par vencedor: lo + w10
l+o vira lo em todo lugar. Recount: o par l+o não existe mais em lugar nenhum, e lo+w agora vence sozinho com 10.
- low _×5
- low e r _×2
- low e s t _×3
- empate: low + _ e low + e5 e 5
O vocabulário ganha a peça low. Recount de novo: low+_ ocorre 5 vezes e low+e ocorre 2 + 3 = 5, um empate.
- low_a palavra isolada
- loweradical de lower, lowest
- lista de merges, em ordemisto, e não o vocabulário, é o que a codificação repete
Após quatro merges, o algoritmo encontrou algo que parece um morfema — por uma razão puramente estatística. Ele não tem conceito de morfema; aquela sequência apenas continuou adjacente a si mesma.
Funda esse par em toda parte. O corpus vira lo w _ em 5, lo w e r _ em 2 e lo w e s t _ em 3. Aqui está o passo que as pessoas pulam: as contagens precisam ser recalculadas. O par l o não existe mais em lugar nenhum, e uma unidade nova lo apareceu com vizinhos novos. Recontando, lo w dá 10, que agora vence sozinho. Funda esse par e o corpus vira low _ em 5, low e r _ em 2, low e s t _ em 3, com o vocabulário tendo ganhado o pedaço low.
Reconte de novo. Agora low _ ocorre 5 vezes e low e ocorre vezes, empatados, com e s, s t e t _ em 3 cada e e r, r _ em 2. Suponha que o desempate escolha low _, produzindo uma unidade única para a palavra isolada low. O quarto merge então pega low e, dando o radical compartilhado de lower e lowest. Quatro merges depois, o algoritmo descobriu por conta própria algo que se parece com um morfema, e descobriu por uma razão puramente estatística: aquela string vivia sendo adjacente a si mesma.
Toda decisão acima é gulosa. O algoritmo seleciona o melhor par sob a segmentação atual, nunca reconsidera e nunca planeja rumo a um vocabulário globalmente ótimo. O desempate, a representação das fronteiras de palavra, a normalização aplicada antes e a escolha das unidades base são todas decisões de implementação, e é por isso que duas ferramentas que dizem fazer BPE não precisam produzir tokenizers idênticos.
Agora a distinção que importa em produção. O treino aprende um vocabulário e uma lista ordenada de regras de merge. A codificação aplica essa lista fixa. Uma leitura errada comum é achar que a codificação funciona varrendo o vocabulário atrás da entrada mais longa que casa, como faria uma consulta a dicionário. Não funciona, e a diferença é observável. A codificação aplica merges na ordem de rank aprendida: divide em unidades base e depois aplica repetidamente o merge de rank mais alto que esteja aplicável no momento. Um pedaço longo pode estar no vocabulário e ainda assim nunca ser produzido para uma dada entrada, porque a sequência de merges que o construiria não é alcançável a partir do estado intermediário daquela entrada. Publique um modelo só com o vocabulário e sem os ranks de merge e o tokenizer dele se torna irreprodutível, ainda que todos os pedaços estejam presentes.
A codificação também nunca reconta nada a partir do seu prompt. Se recontasse, a mesma palavra poderia tokenizar diferente na terça-feira, e cada id endereça uma linha de embedding que aprendeu seu valor sob um mapeamento específico. A lista de merges faz parte do contrato do modelo, exatamente como a lição 1.2 argumentou para o vocabulário.
A frequência cria eficiência e viés no mesmo movimento. Strings comuns no corpus de treino viram tokens únicos e consomem uma posição; strings raras ali continuam sendo cadeias longas, por mais ordinárias que sejam para quem as fala. Maiúsculas, espaços em branco e normalização mudam todos quais pares estavam disponíveis para fundir. O algoritmo não tem conceito de morfema. Às vezes ele os encontra, puramente porque uma unidade significativa tende a ser uma unidade reutilizável.
O tamanho do vocabulário é a troca que governa tudo. Mais merges encurtam as sequências comuns mas aumentam a tabela de embeddings e a projeção de saída, o que para o Qwen3.8-27B significa 5120 números por linha, duas vezes, já que suas matrizes de entrada e de saída são separadas. Menos merges encolhem essas matrizes e alongam toda sequência, elevando o trabalho de attention e de decodificação. A lição 5.3 revisita a escolha pelo lado do treino; não há razão universal de tokens por palavra a que apelar.
A imagem que fica é uma escada de pedaços reutilizáveis. Comece com unidades capazes de soletrar qualquer string Unicode normalizada válida, promova a combinação adjacente mais frequente um degrau por vez e mantenha um registro numerado das promoções para que a subida possa ser repetida exatamente. A escada comprime padrões de superfície. O que esses pedaços significam continua sendo, inteiramente, problema da rede neural.
02 · Analogia
Analogia
Uma gráfica começa com um carimbo por letra. Os funcionários vivem pondo t ao lado de h, então alguém talha um carimbo th. Depois th passa a cair sempre antes de e, e a gráfica talha um carimbo the. Cada carimbo novo encurta os trabalhos comuns enquanto toda letra original continua na gaveta para palavras incomuns. E o crucial: a gráfica mantém um registro numerado de qual carimbo foi talhado quando, porque um trabalho precisa ser composto amanhã do mesmo jeito que hoje, e o conteúdo da gaveta sozinho não determinaria isso.
03 · Explique de volta
Explique de volta
Acompanhe um merge de BPE com contagens reais e depois explique por que codificar uma string nova exige a lista ordenada de merges, e não apenas o vocabulário final.
Comparar com uma resposta-modelo
O treino parte de unidades base e de um marcador de fim de palavra, conta todo par adjacente sobre o corpus, funde o par vencedor em toda parte e reconta, porque o merge destrói vizinhanças antigas e cria novas. Com low aparecendo cinco vezes, lower duas e lowest três, o par l mais o ocorre dez vezes e vence; toda ocorrência vira lo, e a contagem seguinte encontra lo mais w em dez. Codificar uma string nova não reconta nada. Aplica os merges aprendidos na ordem de rank em que foram aprendidos, o que não é o mesmo que casar gulosamente a entrada mais longa do vocabulário final: pode existir uma entrada longa que a sequência de merges nunca construiria para uma dada entrada. É por isso que um tokenizer publica uma lista de merges e não só uma lista de pedaços.
04 · Teste seu entendimento
Teste seu entendimento
Conclua o teach-back e acerte o quiz para finalizar a aula.
◎ · Marcador de evidência
Fontes
- Rico Sennrich, Barry Haddow e Alexandra Birch (2016). Neural Machine Translation of Rare Words with Subword Units.
- Qwen Team (2026). Qwen3.8-27B Model Card.