Tokenização: vocabulário, one-hot e byte pair encoding em Python
Redes neurais só entendem números, então o texto é primeiro dividido em tokens e cada token recebe um id. Modelos de linguagem como o GPT usam byte pair encoding, que cria tokens a partir de pedaços frequentes de palavras.
O conceito em palavras simples
Redes neurais só entendem números, então o texto é primeiro dividido em tokens e cada token recebe um id. Modelos de linguagem como o GPT usam byte pair encoding, que cria tokens a partir de pedaços frequentes de palavras.
Transforme texto em números como os modelos de linguagem: monte um vocabulário, codifique palavras em one-hot e aprenda subpalavras com BPE.
Ideias principais
- Um token é uma unidade de texto, como uma palavra, parte de uma palavra ou um caractere.
- Vetores one-hot são simples, mas ficam muito longos com vocabulários grandes.
- O BPE lida com palavras raras e novas dividindo-as em pedaços conhecidos.
- Depois, os modelos convertem cada id de token em um vetor aprendido chamado embedding.
Quando usar?
- Entender o que acontece dentro das redes neurais e das bibliotecas de IA.
- Aprender a ideia antes de implementá-la nos desafios correspondentes.
- Se preparar para cursos de aprendizado de máquina, entrevistas e projetos.
Veja na prática
Digite sua própria frase para montar um vocabulário e clique em Passo para ver o byte pair encoding juntar o par mais frequente.
Código de exemplo
from collections import Counter
text = "the cat sat on the mat"
# 1. Build a vocabulary: every distinct word gets an id.
words = text.split()
vocab = {word: i for i, word in enumerate(sorted(set(words)))}
print("vocab:", vocab)
print("ids:", [vocab[w] for w in words])
# 2. One-hot encoding: a vector with a single 1 at the word's id.
def one_hot(word):
return [1 if vocab[word] == i else 0 for i in range(len(vocab))]
print("one-hot 'cat':", one_hot("cat"))
# 3. Byte pair encoding: repeatedly merge the most frequent pair of symbols.
tokens = list("banana")
for _ in range(2):
pairs = Counter(zip(tokens, tokens[1:]))
best = max(pairs, key=pairs.get)
merged, i = [], 0
while i < len(tokens):
if i + 1 < len(tokens) and (tokens[i], tokens[i + 1]) == best:
merged.append(tokens[i] + tokens[i + 1])
i += 2
else:
merged.append(tokens[i])
i += 1
tokens = merged
print("merge", best, "->", tokens)
Saída esperada
vocab: {'cat': 0, 'mat': 1, 'on': 2, 'sat': 3, 'the': 4}
ids: [4, 0, 3, 2, 4, 1]
one-hot 'cat': [1, 0, 0, 0, 0]
merge ('a', 'n') -> ['b', 'an', 'an', 'a']
merge ('b', 'an') -> ['ban', 'an', 'a']
Como funciona
O vocabulário associa cada palavra distinta a um id, e a frase vira uma lista de ids. Um vetor one-hot só tem 1 na posição do id da palavra. O BPE conta os pares de símbolos vizinhos e junta o mais frequente, primeiro ('a', 'n') e depois ('b', 'an').
Altere os valores e execute o programa no compilador Python online CodeUtility sem instalar Python.
Exercícios práticos
Altere as entradas e teste casos de borda antes de usar conjuntos de dados maiores.
- Mude as entradas ou os pesos e preveja a saída antes de executar.
- Imprima os valores intermediários para acompanhar cada passo do cálculo.
- Resolva os desafios indicados abaixo para implementar a ideia você mesmo.
Pratique com um desafio
Use o conteúdo desta lição para resolver um problema real. Cada desafio roda no navegador, com testes instantâneos e uma revisão por IA.
- Tokenizador de palavras e vocabulário Divida um texto em palavras minúsculas e construa um vocabulário ordenado por frequência, o primeiro passo de todo modelo de linguagem. Fácil
- Codificação one-hot Transforme categorias em vetores com um único 1, o formato de entrada de classificadores e embeddings. Fácil
- Fusões de Byte Pair Encoding (BPE) Aprenda fusões de subpalavras como os tokenizadores do GPT: funda repetidamente o par de símbolos vizinhos mais frequente. Médio