Transformers documentation
Algoritmos de tokenização
Algoritmos de tokenização
O Transformers suporta três algoritmos de tokenização subpalavra: Byte pair encoding (BPE), Unigram e WordPiece. Eles dividem o texto em unidades entre palavras e caracteres, mantendo o vocabulário compacto e, ao mesmo tempo, capturando fragmentos significativos. Palavras comuns permanecem intactas como tokens únicos, enquanto palavras raras ou desconhecidas são decompostas em subpalavras.
Por exemplo, annoyingly pode ser dividido em ["annoying", "ly"] ou ["annoy", "ing", "ly"], dependendo do vocabulário. A divisão em subpalavras permite que o modelo represente palavras não vistas a partir de subpalavras conhecidas.
A tokenização de subpalavras é especialmente útil para idiomas como o turco, no qual é possível formar palavras longas e complexas ao encadear subpalavras.
Codificação de pares de bytes (BPE)
Byte pair encoding (BPE) é o algoritmo de tokenização mais popular em Transformers, utilizado por modelos como Llama, Gemma, Qwen2 e outros.
- Um pré-tokenizador divide o texto em espaços em branco ou outras regras, produzindo um conjunto de palavras únicas e suas frequências.
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)- O algoritmo BPE cria um vocabulário base,
["b", "g", "h", "n", "p", "s", "u"], a partir de todos os caracteres.
("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)- O BPE começa com caracteres individuais e, iterativamente, mescla o par adjacente mais frequente.
"u"e"g"aparecem juntos com mais frequência em"hug","pug"e"hugs", portanto, o BPE os mescla em"ug"e adiciona esse token ao vocabulário.
("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)- O próximo par mais comum é
"u"e"n", que aparecem em"pun"e"bun", então eles se fundem em"un".
("h" "ug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("h" "ug" "s", 5)- O vocabulário agora é
["b", "g", "h", "n", "p", "s", "u", "ug", "un"]. O BPE continua aprendendo regras de mesclagem até atingir o tamanho alvo do vocabulário, que é igual ao tamanho do vocabulário base mais o número de mesclagens. O GPT usa BPE com um tamanho de vocabulário de 40.478 (478 tokens base + 40.000 mesclagens).
Qualquer caractere que não esteja no vocabulário base é mapeado para um token desconhecido, como "<unk>". Na prática, o vocabulário base cobre todos os caracteres observados durante o treinamento, de modo que tokens desconhecidos são raros.
BPE em nível de bytes
Incluir todos os caracteres Unicode tornaria o vocabulário base enorme. O BPE em nível de bytes usa 256 valores de bytes como vocabulário base, garantindo que todas as palavras possam ser tokenizadas sem o token "<unk>". O GPT-2 usa BPE em nível de bytes com um tamanho de vocabulário de 50.257 (256 tokens de bytes + 50.000 mesclagens + token especial de fim de texto).
Unigram
Unigram é o segundo algoritmo de tokenização mais popular em Transformers, utilizado por modelos como T5, BigBird, Pegasus, entre outros.
- Unigram começa com um grande conjunto de subpalavras candidatas, e cada candidata recebe uma pontuação de probabilidade com base na frequência com que aparece.
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)
["b", "g", "h", "n", "p", "s", "u", "hu", "ug", "un", "pu", "bu", "gs", "hug", "pug", "pun", "bun", "ugs", "hugs"]Unigram avalia o quão bem o vocabulário atual tokeniza os dados de treinamento em cada etapa.
Para cada token, o Unigram mede o quanto a remoção do token aumentaria a perda geral. Por exemplo, remover
"pu"quase não afeta a perda, pois"pug"e"pun"ainda podem ser tokenizados como["p", "ug"]e["p", "un"].Mas remover
"ug"aumentaria significativamente a perda, pois"hug","pug"e"hugs"dependem dele.Unigram remove os tokens com o menor aumento de perda, geralmente os 10-20% inferiores. Os caracteres básicos sempre permanecem, de modo que qualquer palavra possa ser tokenizada. Tokens como
"bu","pu","gs","pug"e"bun"são removidos porque contribuíram menos para a verossimilhança geral.
["b", "g", "h", "n", "p", "s", "u", "hu", "ug", "un", "hug", "pun", "ugs", "hugs"]
- As etapas 2 a 4 se repetem até que o vocabulário atinja o tamanho alvo.
Durante a inferência, o Unigram pode tokenizar uma palavra de várias maneiras. "hugs" pode se tornar ["hug", "s"], ["h", "ug", "s"] ou ["h", "u", "g", "s"]. O Unigram seleciona a tokenização com a maior probabilidade. Diferentemente do BPE, que é determinístico e baseado em regras de mesclagem, o Unigram é probabilístico e pode amostrar tokenizações diferentes durante o treinamento.
SentencePiece
SentencePiece é uma biblioteca de tokenização que aplica BPE ou Unigram diretamente ao texto bruto. O BPE e o Unigram padrão assumem que os espaços em branco separam as palavras, o que não funciona para idiomas como o chinês e o japonês, que não utilizam espaços.
- SentencePiece trata o texto de entrada como um fluxo bruto de bytes ou caracteres e inclui o caractere de espaço, representado como
"▁", no vocabulário.
("▁hug", 10), ("▁pug", 5), ("▁pun", 12), ("▁bun", 4), ("▁hugs", 5)- Em seguida, o SentencePiece aplica BPE ou Unigram ao texto.
Na decodificação, o SentencePiece concatena todos os tokens e substitui "▁" por um espaço.
WordPiece
WordPiece é o algoritmo de tokenização para modelos da família BERT, como DistilBERT e Electra.
É semelhante ao BPE e mescla pares de baixo para cima de forma iterativa, mas difere na forma como seleciona os pares.
("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)WordPiece mescla pares que maximizam a verossimilhança dos dados de treinamento.
score("u", "g") = frequency("ug") / (frequency("u") × frequency("g"))| par | frequência | score |
|---|---|---|
"u" + "g" | 20 | 20 / (36 × 20) = 0.028 |
"u" + "n" | 16 | 16 / (36 × 16) = 0.028 |
"h" + "u" | 15 | 15 / (15 × 36) = 0.028 |
"g" + "s" | 5 | 5 / (20 × 5) = 0.050 |
A pontuação favorece a fusão de "g" e "s" quando o token combinado aparece com mais frequência do que o esperado a partir das frequências dos tokens individuais. O BPE simplesmente funde o par que aparece com mais frequência. O WordPiece mede o quão informativa é cada fusão. Dois tokens que aparecem juntos muito mais do que o previsto pelo acaso são fundidos primeiro.
Tokenização em nível de palavra
A tokenização em nível de palavra divide o texto em tokens com base em espaços, pontuação ou regras específicas do idioma.
["Do", "n't", "you", "love", "🤗", "Transformers", "?", "We", "sure", "do", "."]
O tamanho do vocabulário se torna extremamente grande, pois cada palavra única exige seu próprio token, incluindo todas as variações ("love", "loving", "loved", "lovingly"). A matriz de incorporação resultante é enorme, aumentando a memória e o processamento. Palavras que não estão no vocabulário são mapeadas para um token "<unk>", de modo que o modelo não consegue lidar com palavras novas.
Tokenização em nível de caractere
A tokenização em nível de caracteres divide o texto em caracteres individuais.
["D", "o", "n", "'", "t", "y", "o", "u", "l", "o", "v", "e"]
O vocabulário é pequeno e cada palavra pode ser representada, então não há problema com "<unk>". Mas as sequências ficam muito mais longas. Um caractere como "l" carrega muito menos significado do que "love", o que prejudica o desempenho.
Recursos
- O Capítulo 6 do curso de LLM ensina como treinar um tokenizer do zero e explica as diferenças entre os algoritmos BPE, Unigram e WordPiece.