Vocabulário não é só lista de palavras, é estrutura
A pergunta o que é um vocabulário parece simples demais até você se dar conta de quantas camadas ela esconde. Na prática, um vocabulário é um conjunto finito de símbolos, termos ou entradas que um sistema — seja humano, seja máquina — reconhece e opera com ele. Em linguística, é o repertório de palavras de uma pessoa ou de uma língua. Em processamento de linguagem natural, é o mapeamento entre tokens e ids numéricos que um modelo realmente "enxerga". As duas coisas têm pouco a ver uma com a outra fora do nome compartilhado. Eu trabalho com construção de vocabulários para modelos de linguagem há anos, e a parte que ninguém conta é que a definição técnica depende inteiramente do contexto de uso. Um vocabulário de 8 mil tokens pode ser suficiente para um chatbot interno que lida só com suporte técnico. O mesmo vocabulário aplicado a um texto literário em português gera uma explosão de tokens desconhecidos e destrói a qualidade da saída. A escolha do tamanho e do método de extração é o que separa um pipeline que funciona de um que quebra nos detalhes.
o que é um vocabulário e como ele nasce na prática
Começando pelo mais útil primeiro: a maioria das pessoas acha que criar um vocabulário é rodar um tokenizer e pronto. Não é. O processo real envolve definir regras de segmentação, decidir como tratar caracteres raros e subword, e depois validar contra dados reais antes de commitar qualquer coisa. Eu uso BPE (Byte-Pair Encoding) como padrão, mas às vezes SwitchCase ou WordPiece fazem mais sentido dependendo do domínio. O passo a passo que eu sigo é este. Primeiro, reúno um corpus representativo do domínio, não um monte de texto genérico da internet. Se o projeto é voltado para documentação médica em português, puxar Wikipedia geral é erro. Depois, defino o tamanho alvo do vocabulário com base no custo computacional que posso arcar — cada token adicional aumenta a matriz de embedding e a latência. Em seguida, rodando o treino do algoritmo de merge sobre o corpus limpo. Finalmente, testou contra samples do domínio e ajustei os parâmetros de frequência mínima para capturar termos técnicos sem inflar o vocabulário com ruído.
Um detalhe técnico que quem entra na área perde: a ordem dos caracteres importa mais do que parece. Em português, acentos e ligaduras geram tokens diferentes se o pré-processamento não for consistente. Eu padronizo tudo com NFKC antes de treinar, senão você acaba com "ação" e "ac¸ao" como entradas distintas e o modelo perde consistência.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Erros comuns que eu vejo todo dia
O erro mais frequente é tratar o vocabulário como algo estático. Modelos são atualizados, novos termos entram no uso corrente, gírias técnicas surgem. Um vocabulário que eu fiz em 2021 para um sistema de análise de sentimentos em português já estava deficitário em 2023 por não ter absorvido termos como "hate speech" e "dogmatizar" que tinham entrado no jargão de redes sociais. A solução foi refazer o treino a cada seis meses com um delta de dados recentes, mantendo o vocabulário anterior congelado e só adicionando os novos tokens sem reprocessar tudo. Outro problema sério é ignorar a distribuição de frequência. Quem treina vocabulário sem analisar o curve de Zipf acaba com milhares de tokens que aparecem uma vez só no corpus. Isso é custo sem benefício. Eu filtro eliminando ocorrências abaixo de cinco antes do treino, e o resultado é um vocabulário 30% menor com performance igual ou melhor nos testes downstream.
O caso mais específico que eu lembrei agora foi com um cliente que precisava de reconhecimento de nomes próprios em textos jurídicos brasileiros. O BPE padrão simplesmente fragmentava sobrenomes como "Machado de Assis" em pedaços sem sentido. A solução foi criar um vocabulário híbrido: BPE para o corpo geral do texto e uma lista manual de top 2 mil sobrenomes mais frequentes injetados diretamente no dicionário antes do treino. Funcionou, mas exigiu manutenção constante porque novos nomes apareciam nos processos judiciais o tempo todo.
Limitações que ninguém anuncia
Vocabulário não resolve tudo. Ele é apenas a camada de.tokenização. Se o modelo subjacente é fraco, um vocabulário enorme não vai salvá-lo. O ganho marginal de performance diminui drasticamente após cerca de 50 mil tokens para a maioria das línguas, então gastar tempo aumentando o vocabulário além disso geralmente é perda de recurso. Para línguas com morfologia rica como o português, o vocabulário precisa ser maior do que para inglês para cobrir a mesma quantidade de conceitos, porque a flexão gera combinações exponenciais. Um corpus de 100 milhões de palavras em português produz um vocabulário natural significativamente maior do que o mesmo tamanho em inglês. Ignorar isso leva a subtokenizer e perda de informação.
Se o seu cenário é de domínio muito restrito com terminologia especializada, às vezes fazer um vocabulário customizado do zero a partir de um corpus de domínio vale mais do que tentar adaptar um genérico. É trabalho extra, mas o retorno em precisão costuma compensar. Resumo rápido para quem precisa de ação imediata: defina o domínio, colete corpus representativo, aplique NFKC, escolha BPE como padrão, teste tamanhos entre 8 mil e 32 mil tokens, filtre ocorrências abaixo de cinco, valide contra dados reais do seu caso de uso e estabeleça um ciclo de atualização semestral. Qualquer coisa fora disso é ajuste fino que você fará de qualquer forma.