Grandes Modelos de Linguagem
Grande Modelo de Linguagem (large language model, LLM) — é um tipo de modelo de aprendizado de máquina, implementado com uma rede neural profunda que possui um grande número de parâmetros (geralmente bilhões ou mais) e é treinado em grandes volumes de dados textuais. "Grande", neste contexto, refere-se simultaneamente à escala dos parâmetros e ao volume do corpus de treinamento, que nos sistemas modernos atinge vários petabytes e trilhões de tokens. Os modelos LLM são treinados predominantemente por métodos auto-supervisionados ou semi-supervisionados (self-/semi-supervised), prevendo o próximo token em uma sequência e, assim, aprendendo as regularidades estatísticas da linguagem. O crescimento dos parâmetros, dados e passos computacionais leva a uma melhoria previsível na qualidade, o que é confirmado pelas scaling laws.
Após o surgimento do BERT (2017) e especialmente do GPT-3 (2020), a abordagem LLM tornou-se dominante no processamento de linguagem natural. Os modelos modernos (GPT-4o, Claude 3, Gemini 1.5, LLaMA 3, etc.) podem, sem ajuste especial, escrever textos e código de programação, traduzir, resumir, responder a perguntas e construir cadeias de raciocínio; as versões multimodais analisam imagens, som e vídeo. A adaptação a uma tarefa aplicada é feita através de ajuste fino ou engenharia de prompts (prompt engineering, in-context learning). Juntamente com suas conquistas, os LLMs herdam os vieses e imprecisões dos dados originais, são propensos a "alucinações" e exigem grandes recursos computacionais. Por isso, as pesquisas atuais se concentram no alinhamento do comportamento, na filtragem dos corpora e em arquiteturas energeticamente eficientes.
Arquitetura
Nos LLMs modernos, quase sempre é utilizada a arquitetura Transformer (transformador) — uma rede com um mecanismo de autoatenção (self-attention). O modelo transformer foi proposto pela primeira vez no artigo "Attention is All You Need" por desenvolvedores do Google em 2017.
A arquitetura Transformer é um esquema de rede neural básico para trabalhar com sequências, incluindo dois módulos lógicos — o encoder (codifica a entrada) e o decoder (gera a saída). Uma sequência é recebida na entrada, sua representação vetorial (em inglês, embedding) é criada, um vetor de codificação posicional é adicionado, e então o conjunto de elementos, sem considerar a ordem na sequência, é alimentado no componente codificador (processamento paralelo). Em seguida, o componente decodificador recebe parte dessa sequência e a saída do codificador como entrada. O resultado é uma nova sequência de saída.
O componente codificador do transformer consiste em várias camadas de codificação idênticas; o componente decodificador é estruturado de forma semelhante. O próprio transformer é uma sequência de modelos de atenção que transformam a sequência de vetores original em uma nova sequência, onde cada elemento considera o contexto dos outros. O codificador forma representações ocultas dos dados de entrada, preservando informações sobre as inter-relações entre os elementos. O decodificador, com base nas representações ocultas, cria uma nova sequência de embeddings para os tokens de saída. Em seguida, com base nesses embeddings, os elementos de saída finais são gerados por um modelo de linguagem.
Como os transformers foram originalmente desenvolvidos para tarefas como tradução automática, sua arquitetura inclui um encoder (que processa o texto de entrada, como a frase original) e um decoder (que gera a saída, como a tradução). No entanto, muitos modelos de linguagem usam apenas a parte do decodificador, operando em modo autorregressivo.
Os transformers são aplicados em três configurações principais, cada uma utilizando o encoder e o decoder de maneira diferente e sendo orientada para seu próprio conjunto de tarefas:
- Transformers do tipo encoder (bidirecionais) aprendem a reconstruir fragmentos de texto intencionalmente ocultados, sendo, portanto, bem adequados para tarefas de "compreensão" — classificação, extração de fatos, busca semântica.
- Transformers do tipo decoder (autorregressivos) são otimizados para prever o próximo token e são usados onde a geração de saída sequencial é necessária: agentes de diálogo, autocompletar de código, geração criativa.
- Esquemas completos «encoder + decoder» combinam ambas as abordagens: o encoder constrói uma representação de todo o texto de entrada, e o decoder, baseando-se nela, forma o resultado passo a passo. Essa configuração é mais eficaz para tradução automática, sumarização e sistemas de perguntas e respostas.
Tokenização
Tokenização — é a etapa inicial crucial no processamento de texto em grandes modelos de linguagem. Nesta fase, uma string contínua de caracteres é dividida em unidades individuais — os tokens. A tokenização realiza a tarefa de transformar uma sequência de caracteres em uma sequência de elementos estruturados, garantindo o funcionamento eficiente da rede neural.
Do ponto de vista linguístico, a tokenização poderia, em certa medida, corresponder ao processo de identificar as unidades mínimas da linguagem que possuem significado independente ou função, como palavras, morfemas ou seus fragmentos. No entanto, muitas vezes um token é simplesmente uma sequência de caracteres estatisticamente frequente, por isso é importante não superestimar o significado linguístico de todos os tokens. Dependendo do esquema escolhido, um token pode ser: uma palavra inteira, uma subpalavra, um caractere individual ou um marcador de serviço (por exemplo, marcadores de início e fim de sequência).
A tokenização permite:
- limitar o tamanho do vocabulário a uma escala gerenciável;
- processar corretamente palavras raras e novas;
- garantir um mapeamento inequívoco do texto para uma sequência de identificadores numéricos.
Para dividir o texto, são utilizados algoritmos de subpalavras, sendo os mais comuns o Byte Pair Encoding (BPE), WordPiece e UnigramLM. Cada um deles constrói um vocabulário a partir dos fragmentos mais frequentes do corpus e o utiliza para segmentar sequencialmente qualquer texto de entrada.
Após a etapa de tokenização, cada unidade de texto — o token — é convertida em uma representação numérica compreensível para a rede neural. Esse processo envolve vários passos sequenciais:
- Conversão de tokens em identificadores: Cada token é mapeado para um índice numérico único com base em um vocabulário de tokens pré-construído. Os tokens de texto são substituídos por seus identificadores numéricos únicos (IDs). Cada ID é o número do token em um vocabulário pré-construído, o que permite que a rede neural trabalhe com números em vez de palavras.
- Conversão de identificadores em embeddings: Para cada identificador de token, um vetor correspondente de dimensão fixa — o embedding — é recuperado ou calculado. Esta representação numérica multidimensional substitui o ID e já contém informações sobre o significado e as propriedades contextuais do token. Todos os embeddings têm o mesmo comprimento para facilitar o processamento.
- Adição de codificações posicionais: Como a arquitetura Transformer por si só não considera a ordem dos elementos, codificações posicionais (positional encodings) são adicionadas aos embeddings para fornecer informações sobre a posição do token na sequência. Em outras palavras, graças a isso, o modelo "sabe" qual token vem primeiro, segundo, terceiro e assim por diante na frase.
- Formação das matrizes de entrada: O resultado é uma matriz de dimensão
[comprimento da sequência × dimensão do embedding], que serve como a representação inicial do texto e é passada para a entrada da rede neural, especificamente para os blocos de autoatenção (self-attention) do Transformer. Cada linha desta matriz corresponde a um token, e o vetor que ela contém carrega tanto seu significado semântico (embedding) quanto informações sobre sua posição no texto (codificação posicional).
Texto → Tokens → Identificadores → Embeddings + Codificações Posicionais → Entrada para o modelo
Mecanismo de Atenção
O mecanismo de atenção (attention mechanism) — é o componente chave da arquitetura Transformer, que permite levar em conta as dependências entre tokens, independentemente da distância entre eles na sequência. Depois que o texto de entrada é convertido em uma sequência de vetores, essa sequência é alimentada no elemento central do transformer — o bloco de atenção (attention block).
O mecanismo de atenção é uma forma de a rede neural determinar a quais partes dos dados de entrada deve prestar mais atenção ao processar cada elemento da sequência. Graças a ele, os vetores de fragmentos de texto individuais podem interagir entre si, enriquecendo-se com informações e atualizando seus valores com base no contexto circundante. Isso permite que o modelo capture eficientemente tanto as dependências locais quanto as de longo alcance entre os tokens, o que aumenta significativamente sua capacidade de interpretar estruturas textuais complexas.
Na linguagem natural, o significado de uma palavra ou expressão não é determinado isoladamente — ele depende do contexto, ou seja, de outras palavras e estruturas ao redor. Nas redes neurais, o texto é codificado por meio de representações vetoriais — embeddings, que refletem numericamente as propriedades lexicais e sintáticas dos tokens. Sem um mecanismo de atenção direta (como no Transformer), a informação contextual ou se perderia em longas distâncias (como em modelos mais simples) ou seria transmitida sequencialmente, o que é menos eficiente para capturar relações de longo alcance. No entanto, na linguagem natural, o significado de uma palavra ou construção sintática é dinâmico, e sua interpretação deve se adaptar dependendo do contexto. O mecanismo de atenção realiza a contextualização das representações vetoriais, o que significa que (ou simplesmente :):
- Cada token "avalia" sua importância em relação aos outros tokens na frase.
- No processo de atualização, as representações vetoriais são enriquecidas com informações mútuas, refletindo dependências sintáticas, papéis semânticos e contexto pragmático.
Como resultado dessa troca de informações, os vetores atualizados começam a codificar não apenas o significado do próprio token, but também suas conexões gramaticais (sintaxe), seu papel na situação descrita (semântica) e o sentido geral no contexto (pragmática).
Vetores de entrada dos tokens (com posições) → Mecanismo de Atenção (Interação de vetores) → Vetores de tokens contextualizados (Vetores enriquecidos com informação sobre as conexões com outros tokens)
Implementação técnica do mecanismo de atenção
O funcionamento interno do mecanismo de atenção inclui vários passos e componentes computacionais chave. Para cada vetor de entrada, três vetores são gerados: Consulta (Query), Chave (Key) e Valor (Value). Com base na interação deles, os pesos de atenção são calculados, que são então usados para obter as representações vetoriais atualizadas e contextualizadas. Uma abordagem comum é usar uma arquitetura de múltiplas cabeças (Multi-Head Attention) para o processamento paralelo de informações.
Consulta (Query), Chave (Key), Valor (Value)
Na base do cálculo do mecanismo de atenção está a transformação de cada vetor de entrada (que é a soma do embedding do token e sua codificação posicional) em três representações vetoriais distintas: Consulta (Query, Q), Chave (Key, K) e Valor (Value, V).
Conceitualmente, esses três vetores desempenham os seguintes papéis no mecanismo de atenção:
- Consulta (Query): Representa o vetor do token atual, que inicia o processo de busca por informações relevantes na sequência. Pode ser visto como uma "pergunta" ou "sonda", usada para avaliar a importância de outros tokens em relação ao atual.
- Chave (Key): Atua como um identificador ou "etiqueta" que descreve um aspecto do conteúdo de cada token. O vetor de Consulta (Q) do token atual é comparado com todos os vetores de Chave (K) na sequência (incluindo o seu próprio) para determinar o grau de sua correspondência ou relevância.
- Valor (Value): Contém a informação real ou a representação associada a cada token, que será transmitida adiante. Após o cálculo dos pesos de atenção com base na interação entre Consultas e Chaves, esses pesos são aplicados aos vetores de Valor para formar a representação ponderada final, que é a saída do mecanismo de atenção para o token em questão.
Treinamento de grandes modelos de linguagem
O treinamento de um LLM ocorre predominantemente em duas etapas:
- Pré-treinamento (Pretraining) Nesta fase, o modelo é treinado em grandes corpora de texto não rotulados usando aprendizado auto-supervisionado (self-supervised learning). A tarefa consiste em prever o próximo token em uma sequência (autorregressão) ou em reconstruir fragmentos ocultos (aprendizado mascarado). O pré-treinamento permite que o modelo aprenda vastas regularidades estatísticas da linguagem, gramática, fatos sobre o mundo e formas básicas de raciocínio.
- Ajuste fino (Fine-tuning) Após o pré-treinamento, o modelo é treinado adicionalmente com dados especializados para executar tarefas específicas, como geração de respostas, classificação de textos ou seguimento de instruções. As abordagens modernas incluem:
- Ajuste fino em conjuntos de dados rotulados (supervised fine-tuning).
- Aprendizagem por reforço com feedback humano (RLHF, reinforcement learning from human feedback) para ajustar o comportamento do modelo de acordo com métricas alvo de qualidade, segurança e utilidade.
Problemas e limitações
Apesar do progresso impressionante, os Grandes Modelos de Linguagem (LLMs) modernos possuem uma série de problemas e limitações:
I. Limitações Computacionais e Arquitetônicas
- Altos custos computacionais: O treinamento e a operação de LLMs exigem poder computacional, tempo e energia significativos, o que acarreta altos custos econômicos e ambientais. Além disso, a natureza autorregressiva da geração (criação sequencial de tokens) limita a paralelização e diminui a velocidade de inferência em comparação com abordagens não autorregressivas.
- Limitação do comprimento do contexto: A arquitetura Transformer tem uma dependência quadrática dos custos computacionais e dos requisitos de memória em relação ao comprimento da sequência. Isso força o estabelecimento de um limite fixo (janela de contexto) para o volume de texto que o modelo pode processar de uma vez, levando ao truncamento de documentos longos e à perda de informações fora da janela.
II. Problemas de Confiabilidade e Precisão da Geração
- Alucinações: Geração de informações factualmente incorretas, mas que soam plausíveis. Isso está relacionado à falta de compreensão real do mundo pelo modelo, sua dependência de padrões estatísticos nos dados e sua incapacidade de verificar as afirmações geradas.
- Propagação de erros (Error Propagation): Processo no qual erros cometidos nos estágios iniciais da geração são amplificados e levam a um acúmulo de imprecisões nos passos subsequentes, diminuindo a qualidade geral e a coerência do texto.
- Composicionalidade limitada: Dificuldades com tarefas que exigem raciocínio lógico de múltiplos passos ou cálculos precisos (por exemplo, multiplicação de números com muitos dígitos, resolução de quebra-cabeças). A precisão dos modelos em tais tarefas cai drasticamente com o aumento da complexidade devido à natureza autorregressiva da geração.
- Repetições: Tendência a repetir excessivamente palavras ou frases, o que reduz a informatividade e a legibilidade do texto. Está relacionado às particularidades do treinamento e aos algoritmos de decodificação (seleção do próximo token).
- Maldição da reversão (Reversal Curse): Incapacidade do modelo de generalizar automaticamente o conhecimento na direção oposta: depois de aprender com a afirmação "A é B", o modelo muitas vezes não consegue inferir "B é A".
- Compromisso "criatividade-precisão": A necessidade de equilibrar a geração de respostas diversas e originais com a manutenção da precisão factual. Melhorar um aspecto muitas vezes afeta negativamente o outro; por exemplo, alta criatividade pode estar correlacionada com um aumento de alucinações.
III. Problemas de Interação e Controle:
- Baixa controlabilidade: Dificuldade em controlar com precisão o estilo, o tom, o conteúdo do texto gerado ou o seguimento de instruções complexas. A controlabilidade depende fortemente da qualidade das instruções de entrada ("prompts") e dos métodos de ajuste fino (fine-tuning).
- Sensibilidade à formulação: Pequenas alterações na solicitação de entrada (prompt) podem levar a respostas significativamente diferentes, mesmo que a semântica da solicitação seja mantida. Isso dificulta a obtenção de resultados estáveis e previsíveis.
IV. Aspectos Éticos e Sociais:
- Problemas de viés e justiça: Os modelos podem reproduzir e amplificar estereótipos sociais, preconceitos ou toxicidade existentes nos dados de treinamento. Garantir a justiça e a segurança dos modelos é uma tarefa complexa.
- Problema de alinhamento (LLM Alignment): Um problema mais geral que inclui o ponto anterior. É a tarefa de garantir que o comportamento do modelo esteja em conformidade com os valores humanos, intenções e normas éticas. Inclui combater o viés, as alucinações, a geração de conteúdo malicioso e aumentar a controlabilidade.
- Riscos de uso malicioso: A possibilidade de usar LLMs para criar e disseminar em massa desinformação, phishing, spam, código malicioso ou gerar textos falsos convincentes, o que representa ameaças à segurança da informação e pessoal, além de minar a confiança na sociedade.
Links:
- "Modelo de linguagem grande" // Wikipédia (Versão em russo)
- Large Language Model // Wikipedia (versão em inglês)
- Grand Modèle de Langage // Wikipédia (Versão em francês)
- Sprachmodell // Wikipedia (Versão em alemão)
- Naveed H. et al. // A Comprehensive Overview of Large Language Models // arXiv:2307.06435, 2023
Literatura
- Vaswani, A. et al. (2017). Attention Is All You Need. arXiv:1706.03762.
- Devlin, J. et al. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. arXiv:1810.04805.
- Brown, T. et al. (2020). Language Models Are Few-Shot Learners. arXiv:2005.14165.
- Kaplan, J. et al. (2020). Scaling Laws for Neural Language Models. arXiv:2001.08361.
- Hoffmann, J. et al. (2022). Training Compute-Optimal Large Language Models. arXiv:2203.15556.
- Ouyang, L. et al. (2022). Training Language Models to Follow Instructions with Human Feedback. arXiv:2203.02155.
- Bai, Y. et al. (2022). Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073.
- Bubeck, S. et al. (2023). Sparks of Artificial General Intelligence: Early Experiments with GPT-4. arXiv:2303.12712.
- OpenAI. (2023). GPT-4 Technical Report. arXiv:2303.08774.
- Touvron, H. et al. (2024). The Llama 3 Herd of Models. arXiv:2407.21783.