1. Tokenizing
Tokenizing
Tokenizing é o processo de dividir dados, como texto, em partes menores e gerenciáveis chamadas tokens. Cada token é então atribuído a um identificador numérico único (ID). Este é um passo fundamental na preparação do texto para processamento por modelos de aprendizado de máquina, especialmente em processamento de linguagem natural (NLP).
O objetivo desta fase inicial é muito simples: Dividir a entrada em tokens (ids) de uma maneira que faça sentido.
How Tokenizing Works
Splitting the Text:
Basic Tokenizer: Um tokenizer simples pode dividir o texto em palavras individuais e sinais de pontuação, removendo espaços.
Exemplo: Texto:
"Hello, world!"
Tokens:["Hello", ",", "world", "!"]
Creating a Vocabulary:
Para converter tokens em IDs numéricos, um vocabulário é criado. Este vocabulário lista todos os tokens únicos (palavras e símbolos) e atribui a cada um um ID específico.
Special Tokens: Estes são símbolos especiais adicionados ao vocabulário para lidar com vários cenários:
[BOS]
(Início da Sequência): Indica o início de um texto.[EOS]
(Fim da Sequência): Indica o fim de um texto.[PAD]
(Preenchimento): Usado para fazer com que todas as sequências em um lote tenham o mesmo comprimento.[UNK]
(Desconhecido): Representa tokens que não estão no vocabulário.Exemplo: Se
"Hello"
é atribuído ao ID64
,","
é455
,"world"
é78
, e"!"
é467
, então:"Hello, world!"
→[64, 455, 78, 467]
Handling Unknown Words: Se uma palavra como
"Bye"
não está no vocabulário, ela é substituída por[UNK]
."Bye, world!"
→["[UNK]", ",", "world", "!"]
→[987, 455, 78, 467]
(Assumindo que[UNK]
tem ID987
)
Advanced Tokenizing Methods
Enquanto o tokenizer básico funciona bem para textos simples, ele tem limitações, especialmente com vocabulários grandes e ao lidar com palavras novas ou raras. Métodos avançados de tokenização abordam essas questões dividindo o texto em subunidades menores ou otimizando o processo de tokenização.
Byte Pair Encoding (BPE):
Purpose: Reduz o tamanho do vocabulário e lida com palavras raras ou desconhecidas, dividindo-as em pares de bytes que ocorrem com frequência.
How It Works:
Começa com caracteres individuais como tokens.
Mescla iterativamente os pares de tokens mais frequentes em um único token.
Continua até que não haja mais pares frequentes que possam ser mesclados.
Benefits:
Elimina a necessidade de um token
[UNK]
, uma vez que todas as palavras podem ser representadas combinando tokens de subpalavras existentes.Vocabulário mais eficiente e flexível.
Exemplo:
"playing"
pode ser tokenizado como["play", "ing"]
se"play"
e"ing"
forem subpalavras frequentes.
WordPiece:
Used By: Modelos como BERT.
Purpose: Semelhante ao BPE, divide palavras em unidades de subpalavras para lidar com palavras desconhecidas e reduzir o tamanho do vocabulário.
How It Works:
Começa com um vocabulário base de caracteres individuais.
Adiciona iterativamente a subpalavra mais frequente que maximiza a probabilidade dos dados de treinamento.
Usa um modelo probabilístico para decidir quais subpalavras mesclar.
Benefits:
Equilibra entre ter um tamanho de vocabulário gerenciável e representar palavras de forma eficaz.
Lida eficientemente com palavras raras e compostas.
Exemplo:
"unhappiness"
pode ser tokenizado como["un", "happiness"]
ou["un", "happy", "ness"]
dependendo do vocabulário.
Unigram Language Model:
Used By: Modelos como SentencePiece.
Purpose: Usa um modelo probabilístico para determinar o conjunto mais provável de tokens de subpalavras.
How It Works:
Começa com um grande conjunto de tokens potenciais.
Remove iterativamente tokens que menos melhoram a probabilidade do modelo em relação aos dados de treinamento.
Finaliza um vocabulário onde cada palavra é representada pelas unidades de subpalavras mais prováveis.
Benefits:
Flexível e pode modelar a linguagem de forma mais natural.
Muitas vezes resulta em tokenizações mais eficientes e compactas.
Exemplo:
"internationalization"
pode ser tokenizado em subpalavras menores e significativas como["international", "ization"]
.
Code Example
Vamos entender isso melhor a partir de um exemplo de código de https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:
Referências
Last updated