Descubra as principais diferenças entre tokenização e embeddings em Modelos de Linguagem de Grande Escala (LLMs) como o GPT. Aprenda como a tokenização divide o texto em unidades gerenciáveis, enquanto os embeddings fornecem representações vetoriais ricas desses tokens. Compreender esses processos é crucial para desbloquear o potencial dos LLMs em tarefas de processamento de linguagem natural.
Introdução
Tokenização e embeddings são componentes fundamentais dos Modelos de Linguagem de Grande Escala (LLMs) como o GPT, essenciais para entender e gerar texto. A tokenização envolve dividir o texto bruto em unidades gerenciáveis chamadas tokens, enquanto os embeddings fornecem representações vetoriais ricas desses tokens. Compreender as diferenças entre tokenização e embeddings é essencial para captar as complexidades de como os LLMs processam dados de linguagem.
O que é Tokenização
Tokens são frequentemente discutidos em pesquisas de IA, como no artigo do Llama 2, onde os autores mencionam treinamento em 2 trilhões de tokens de dados. Os tokens servem como unidade fundamental, análoga ao “átomo”, para Modelos de Linguagem de Grande Escala (LLMs). A tokenização envolve traduzir strings (ou seja, texto) em sequências de tokens e vice-versa.
No âmbito do aprendizado de máquina, um token tipicamente não equivale a uma única palavra. Em vez disso, pode representar uma unidade menor, como um caractere ou parte de uma palavra, ou uma maior, como uma frase inteira. O tamanho dos tokens varia de acordo com a abordagem de tokenização utilizada.
A tokenização geralmente é tratada por um componente conhecido como “Tokenizer”. Este módulo opera independentemente do Modelo de Linguagem de Grande Escala e possui seu próprio conjunto de dados de treinamento de texto, que pode diferir completamente dos dados de treinamento do LLM.
Por que a Tokenização é Importante?
A tokenização frequentemente está na base de muitas peculiaridades observadas em Modelos de Linguagem de Grande Escala (LLMs). Embora alguns problemas possam inicialmente parecer decorrentes da arquitetura da rede neural ou do próprio LLM, eles podem na verdade ser atribuídos à tokenização. Aqui está uma lista não exaustiva de problemas que podem ser rastreados até a tokenização:
- Imprecisões na ortografia
- Dificuldade com tarefas simples de processamento de strings, como inverter uma string
- Menor desempenho em idiomas não-ingleses, como o japonês
- Desempenho abaixo do ideal em operações aritméticas básicas
- Desafios com tarefas de codificação, como Python, enfrentados pelo GPT-2
- Problemas como espaços em branco à direita
- Casos em que versões anteriores do GPT exibiam comportamento errático ao serem solicitadas sobre “SolidGoldMagikarp”
- Preferência por YAML em vez de JSON ao lidar com dados estruturados
Vamos nos aprofundar em como a tokenização contribui para esses problemas neste post.
Detalhes da Tokenização
Aqui está uma visão geral das etapas envolvidas na tokenização. Embora algumas dessas etapas possam não estar imediatamente claras, vamos abordá-las em mais detalhes ao longo deste post.
Pré-treinamento: Estabelecendo o Vocabulário
- Coletar Dados de Treinamento: Monte um grande corpus de dados de texto a partir do qual o modelo aprenderá.
- Tokenização Inicial: Empregue métodos iniciais de tokenização para dividir o texto em unidades fundamentais, como palavras, subpalavras ou caracteres.
- Criação do Vocabulário: Selecione um algoritmo de tokenização, como Byte Pair Encoding (BPE), WordPiece ou SentencePiece, para gerar um conjunto de tokens gerenciável e eficiente.
- Aplicação do Algoritmo: Implemente o algoritmo escolhido nos tokens iniciais para produzir um conjunto de tokens de subpalavras ou caracteres que capturem as nuances linguísticas presentes nos dados de treinamento.
- Atribuição de IDs: Atribua um ID inteiro único a cada token no vocabulário resultante.
Processo de Tokenização em Tempo Real
- Transforme o texto de entrada em tokens com base no vocabulário estabelecido, garantindo cobertura completa de todo o texto.
- Associe cada token ao seu respectivo ID inteiro, conforme definido no vocabulário pré-estabelecido.
- Incorpore quaisquer tokens especiais essenciais na sequência para atender aos requisitos de processamento do modelo.
Entendendo os Desafios da Tokenização
Sinta-se à vontade para digitar frases e observe como os tokens são gerados (e observe o consequente aumento na contagem de tokens e no preço por prompt).
Passe o mouse sobre o texto no lado direito após ativar a caixa de seleção “Mostrar espaços em branco”, e você observará os tokens destacados. Esses tokens geralmente consistem em “pedaços” que frequentemente incluem o caractere de espaço no início.

Aqui está outro exemplo:

Observe como os pedaços de token e suas representações numéricas variam com base em:
- A presença de um espaço antes da palavra
- A existência de pontuação
- O uso de maiúsculas/minúsculas
O Modelo de Linguagem de Grande Escala (LLM) deve aprender a partir de dados brutos que, apesar dessas diferenças nos tokens, as palavras representam o mesmo conceito ou são pelo menos extremamente semelhantes. Essa variabilidade pode diminuir o desempenho.
Outros Idiomas Humanos
Ao comparar o tamanho do pedaço para o inglês com outros idiomas, você frequentemente notará um número significativamente maior de tokens usados para idiomas diferentes do inglês. Essa diferença decorre do fato de que os pedaços para outros idiomas tendem a ser mais fragmentados, levando a um comprimento de sequência inflado nos documentos.
No mecanismo de atenção dos transformers de aprendizado de máquina, há uma maior probabilidade de ficar sem contexto para idiomas não-ingleses. Mesmo ao transmitir a mesma mensagem, mais tokens são consumidos porque os pedaços são menores. Essa discrepância é influenciada tanto pelo conjunto de treinamento usado para o tokenizer quanto pelo próprio tokenizer.
Em última análise, essa utilização ineficiente da janela de contexto para idiomas não-ingleses resulta em um desempenho inferior do Modelo de Linguagem de Grande Escala (LLM) ao lidar com consultas não-inglesas.
Tokenização e Código — Python
No caso do Python, o codificador GPT-2 da OpenAI frequentemente gastava numerosos tokens em caracteres de espaço individuais usados na indentação de segmentos de código Python. Esse comportamento, semelhante aos desafios enfrentados com idiomas não-ingleses, leva a um inchaço considerável da janela de contexto do Modelo de Linguagem de Grande Escala (LLM) e, consequentemente, a uma queda no desempenho.
Config: YAML vs. JSON
Descobriu-se que o YAML possui maior densidade em comparação com o JSON, exigindo menos tokens para realizar a mesma tarefa.
Aqui está uma ilustração direta:


JSON: 46 tokens
O inchaço aumentado para o JSON resulta em:
- Maior dificuldade para o LLM compreender (menos densidade, mais propenso a exceder a janela de contexto).
- Maior gasto para os usuários (já que eles pagam essencialmente por token durante as chamadas de API para a OpenAI).
Problemas de Tokenização
A tokenização está no centro de muitas anomalias observadas em Modelos de Linguagem de Grande Escala (LLMs). Vários problemas que podem inicialmente parecer relacionados à arquitetura da rede neural ou ao próprio LLM podem na verdade ser rastreados até a tokenização. Por exemplo:
- LLMs têm dificuldade em soletrar palavras ou executar tarefas básicas de processamento de strings, como inverter uma string.
- O desempenho tende a se deteriorar para idiomas não-ingleses.
- LLMs exibem desempenho abaixo do ideal ao lidar com aritmética simples.
- O GPT-2 encontrou desafios significativos ao ser encarregado de codificar em Python.
- Avisos peculiares podem surgir em relação a espaços em branco à direita.
- A frase “Solid Gold Magikarp” frequentemente leva os LLMs a se desviarem para tangentes não relacionadas.
- O YAML é preferido ao JSON ao trabalhar com LLMs.
Tokenização em Modelos de Linguagem de Grande Escala
No treinamento de modelos de linguagem de grande escala (LLMs), o processo envolve pegar strings e convertê-las em inteiros de um vocabulário predefinido. Esses inteiros são então utilizados para recuperar vetores de uma tabela de embeddings, que são subsequentemente inseridos no modelo Transformer. Esse processo se torna complexo porque exige não apenas suportar o alfabeto inglês básico, mas também acomodar vários idiomas e caracteres especiais como emojis.
Strings em Python e Pontos de Código Unicode
Em Python, strings são sequências imutáveis compostas por pontos de código Unicode. Esses pontos de código são definidos pelo Consórcio Unicode dentro do padrão Unicode, que atualmente abrange aproximadamente 150.000 caracteres em 161 scripts. O padrão Unicode é mantido ativamente, com a versão mais recente, 15.1, lançada em setembro de 2023.
Para recuperar o ponto de código Unicode de um único caractere em Python, podemos usar a função ord(). Por exemplo:

No entanto, empregar esses inteiros brutos de pontos de código para tokenização não é viável, pois resultaria em um vocabulário excessivamente grande (150.000+) que também é instável devido à evolução contínua do padrão Unicode.
Codificações de Byte Unicode
Em busca de uma solução de tokenização mais eficaz, olhamos para as codificações de byte Unicode, como ASCII, UTF-8, UTF-16 e UTF-32. Essas codificações ditam os métodos para traduzir pontos de código Unicode abstratos em bytes tangíveis que são adequados para armazenamento e transmissão.
Codificações de Byte Unicode, ASCII, UTF-8, UTF-16, UTF-32
O Consórcio Unicode delineia três tipos de codificações: UTF-8, UTF-16 e UTF-32. Essas codificações servem como meios para converter texto Unicode em dados binários ou fluxos de bytes.
Entre essas codificações, a UTF-8 é a mais prevalente. Ela traduz cada ponto de código Unicode em um fluxo de bytes que varia de um a quatro bytes, dependendo do ponto de código. Os primeiros 128 pontos de código (ASCII) necessitam apenas de um byte. Os próximos 1.920 pontos de código necessitam de dois bytes para codificação, abrangendo a maioria dos alfabetos de escrita latina. Três bytes são necessários para os 61.440 pontos de código restantes dentro do Plano Multilíngue Básico (BMP). Quatro bytes abrangem outros planos Unicode, incluindo caracteres CJK menos comuns, vários scripts históricos e símbolos matemáticos.

Usar os bytes UTF-8 brutos diretamente seria altamente ineficiente para modelos de linguagem, resultando em sequências excessivamente longas com um tamanho de vocabulário restrito de apenas 256 valores de byte possíveis. Tal restrição dificulta a capacidade do modelo de atender a contextos suficientemente longos.
A solução está em empregar um algoritmo de codificação de pares de bytes (BPE) para comprimir essas sequências de bytes de forma variável. Essa abordagem permite a representação eficiente de texto com um tamanho de vocabulário maior, porém ajustável.
Qual é a Diferença Entre Tokenização e Embeddings?
Tokenização e embeddings são processos separados, porém inter-relacionados, dentro de Modelos de Linguagem de Grande Escala (LLMs) como o GPT, contribuindo para como esses modelos compreendem e geram texto. Aqui está uma breve visão geral de cada um e suas distinções:
Tokenização em LLMs
Objetivo: A tokenização visa transformar texto bruto em uma sequência de tokens, que podem abranger palavras, subpalavras ou caracteres, dependendo da abordagem de tokenização escolhida.
Procedimento: Envolve dissecar o texto em segmentos gerenciáveis que o modelo possa interpretar. Isso pode implicar segmentar inicialmente o texto com base em espaços e pontuação, seguido por segmentação adicional em subpalavras ou caracteres se eles estiverem ausentes do vocabulário predefinido do modelo.
Resultado: O resultado é uma sequência de tokens que representa o texto original em um formato propício ao processamento do modelo. Cada token recebe um ID inteiro único correspondente ao vocabulário do modelo.
Embeddings
Objetivo: Embeddings são representações vetoriais contínuas, compactas e de baixa dimensionalidade dos tokens. Eles codificam significados semânticos e sintáticos, facilitando a compreensão das nuances da linguagem pelo modelo.
Procedimento: Após a tokenização, cada token (representado por seu ID inteiro) é associado a um vetor de embedding. Esses vetores são adquiridos durante a fase de treinamento do modelo e são armazenados em uma matriz ou tabela de embeddings.
Resultado: Os embeddings funcionam como entrada para as camadas da rede neural do LLM, permitindo que o modelo realize computações nos tokens e discerna relações e padrões dentro do conjunto de dados.
Encontre informações mais detalhadas sobre Embeddings de LLM em nosso blog: O que são Embeddings de LLM: Tudo o que Você Precisa Saber

Características Distintivas
Estágio de Processamento: A tokenização serve como uma etapa de pré-processamento inicial, convertendo texto em um formato compreensível para o modelo (tokens), enquanto os embeddings ocorrem após a tokenização, traduzindo tokens em representações vetoriais detalhadas.
Função: A tokenização envolve principalmente a desconstrução estrutural e representação do texto, enquanto os embeddings focam em capturar e aproveitar os significados semânticos e sintáticos embutidos nos tokens.
Representação: A tokenização produz representações discretas baseadas em inteiros dos componentes do texto, enquanto os embeddings transformam esses inteiros em vetores contínuos que codificam informações linguísticas.
Conclusão
Em conclusão, a tokenização e os embeddings desempenham papéis fundamentais no funcionamento dos Modelos de Linguagem de Grande Escala. Enquanto a tokenização estrutura o texto em tokens, os embeddings fornecem significados semânticos e sintáticos a esses tokens por meio de representações vetoriais. Ao compreender esses processos, obtemos insights sobre como os LLMs interpretam e geram texto, contribuindo para avanços no processamento de linguagem natural.
novita.ai, a plataforma única para criatividade ilimitada que oferece acesso a mais de 100 APIs. Desde geração de imagens e processamento de linguagem até aprimoramento de áudio e manipulação de vídeo, com pagamento conforme o uso acessível, ela libera você das dores de manutenção de GPU enquanto cria seus próprios produtos. Experimente gratuitamente.
Leitura recomendada
