Tokenização é o processo de dividir texto em unidades discretas chamadas tokens, que servem como o vocabulário básico que um modelo de linguagem de grande porte lê como entrada e produz como saída. Tokens são tipicamente pedaços de subpalavras, em vez de palavras inteiras ou caracteres individuais, uma escolha de design que equilibra o tamanho do vocabulário com o comprimento da sequência.
Por que não palavras ou caracteres
Dividir texto em palavras inteiras exigiria um vocabulário grande o suficiente para cobrir toda forma de palavra em cada idioma que um modelo suporta, incluindo palavras raras, erros de ortografia e nomes, enquanto ainda falharia sempre que uma palavra genuinamente nova aparecesse. Dividir texto em caracteres individuais evita esse problema de vocabulário, mas produz sequências muito mais longas para um modelo processar, o que é custoso dado que transformadores e mecanismos de atenção escalam mal com o comprimento da sequência. A tokenização por subpalavras é um compromisso: palavras comuns são tipicamente representadas como um único token, enquanto palavras mais raras são divididas em pedaços menores e reutilizáveis, e até combinações de caracteres totalmente inéditas podem ainda ser representadas como uma sequência de unidades de subpalavras conhecidas.
Métodos
O método de tokenização por subpalavras mais amplamente usado é a codificação por pares de bytes, adaptada para modelos de linguagem a partir de um algoritmo de compressão de dados de 1994 e construída sobre técnicas estatísticas anteriores de processamento de linguagem natural para lidar com palavras não vistas durante o treinamento. Ele funciona começando com caracteres ou bytes individuais e mesclando iterativamente os pares que co-ocorrem com mais frequência em novos tokens, construindo um vocabulário de tamanho fixo das unidades de subpalavras mais úteis observadas em um grande corpus de treinamento. Variantes como SentencePiece e WordPiece seguem lógica de mesclagem semelhante com diferentes pré-processamentos e tratamento de espaços em branco. O vocabulário resultante, tipicamente de dezenas de milhares de tokens, é fixo uma vez que um modelo é treinado e não pode ser alterado sem retreinar.
De tokens a números
Uma vez que o texto é dividido em tokens, cada token é mapeado para um índice inteiro e depois para uma representação vetorial aprendida chamada incorporação, que é o que a rede neural realmente processa. GPT-2 e GPT-3 ambos usaram tokenizadores de codificação por pares de bytes em nível de byte, e a maioria dos modelos de linguagem de grande porte subsequentes seguiu abordagens semelhantes, às vezes com vocabulários expandidos para melhor representar idiomas não ingleses e código.
Implicações práticas
A tokenização tem várias consequências que são visíveis para usuários de modelos de linguagem mesmo sem qualquer conhecimento técnico. A janela de contexto de um modelo, a quantidade máxima de texto que ele pode processar de uma vez, é medida em tokens, em vez de palavras ou caracteres, e APIs comerciais tipicamente cobram por token, tornando a tokenização diretamente relevante para o custo. Esquemas de tokenização treinados predominantemente em texto em inglês tendem a dividir texto não inglês, especialmente idiomas com escritas diferentes, em um número maior de tokens por palavra do que o inglês, o que pode tornar o uso de um modelo mais caro e pode efetivamente reduzir a janela de contexto utilizável para falantes desses idiomas. A tokenização também pode produzir comportamento surpreendente em tarefas que exigem raciocínio sobre caracteres individuais, como contar letras dentro de uma palavra, já que um modelo pode nunca ver a palavra dividida em seus caracteres componentes.