Compartilhar via


Aumentando um modelo de linguagem grande com geração aumentada de recuperação e ajuste fino

Os artigos desta série discutem os modelos de recuperação de conhecimento que os LLMs usam para gerar suas respostas. Por padrão, um LLM (Large Language Model) só tem acesso aos seus dados de treinamento. No entanto, você pode aumentar o modelo para incluir dados em tempo real ou dados privados. Este artigo discute um dos dois mecanismos para aumentar um modelo.

O primeiro mecanismo é o Retrieval-Augmented Generation (RAG), que é uma forma de pré-processamento que combina busca semântica com priming contextual (discutido em outro artigo).

O segundo mecanismo é o ajuste fino, que se refere ao processo de treinamento adicional do modelo em um conjunto de dados específico após seu treinamento inicial e amplo, com o objetivo de adaptá-lo para ter um melhor desempenho em tarefas ou entender conceitos relacionados a esse conjunto de dados. Esse processo ajuda o modelo a se especializar ou melhorar sua precisão e eficiência no manuseio de determinados tipos de entrada ou domínios.

As seções a seguir descrevem esses dois mecanismos com mais detalhes.

Noções básicas sobre o RAG

O RAG é frequentemente usado para habilitar o cenário de "bate-papo sobre meus dados", onde as empresas que possuem um grande corpus de conteúdo textual (documentos internos, documentação, etc.) e desejam usar esse corpus como base para respostas aos prompts dos usuários.

Em um nível alto, você cria uma entrada de banco de dados para cada documento (ou parte de um documento chamado "bloco"). O bloco é indexado em sua incorporação, um vetor (matriz) de números que representam facetas do documento. Quando um usuário envia uma consulta, você pesquisa documentos semelhantes no banco de dados e, em seguida, envia a consulta e os documentos ao LLM para compor uma resposta.

Observação

O termo Retrieval-Augmented Generation (RAG) acomodatícia. O processo de implementação de um sistema de bate-papo baseado em RAG descrito neste artigo pode ser aplicado se houver o desejo de usar dados externos para serem usados em uma capacidade de suporte (RAG) ou para serem usados como a peça central da resposta (RCG). Essa distinção matizada não é abordada na maioria das leituras relacionadas à RAG.

Criando um índice de documentos vetorizados

A primeira etapa para criar um sistema de bate-papo baseado em RAG é criar um armazenamento de dados vetoriais contendo a incorporação vetorial do documento (ou uma parte do documento). Considere o diagrama a seguir que descreve as etapas básicas para criar um índice vetorizado de documentos.

Diagrama descrevendo os diferentes estágios de ingestão de documentos, começando com o chunking, depois as etapas do processo pós-chunking, depois as chamadas para a API de incorporação e, em seguida, salvando os blocos do documento como incorporações vetorizadas no banco de dados vetorial.

Este diagrama representa um pipeline de dados, que é responsável pela ingestão, processamento e gerenciamento de dados usados pelo sistema. Isso inclui o pré-processamento de dados a serem armazenados no banco de dados vetorial e a garantia de que os dados alimentados no LLM estejam no formato correto.

Todo o processo é conduzido pela noção de uma incorporação, que é uma representação numérica de dados (normalmente palavras, frases, frases ou até mesmo documentos inteiros) que captura as propriedades semânticas da entrada de uma forma que pode ser processada por modelos de aprendizado de máquina.

Para criar uma incorporação, envie a parte do conteúdo (frases, parágrafos ou documentos inteiros) para a API de Incorporação do Azure OpenAI. O que é retornado da API de incorporação é um vetor. Cada valor no vetor representa alguma característica (dimensão) do conteúdo. As dimensões podem incluir matéria de tópico, significado semântico, sintaxe e gramática, uso de palavras e frases, relações contextuais, estilo e tom, etc. Juntos, todos os valores do vetor representam o espaço dimensional do conteúdo. Em outras palavras, se você pode pensar em uma representação 3D de um vetor com três valores, um dado vetor vive em uma determinada área do plano x, y, z. E se você 1000 (ou mais) valores? Embora não seja possível para os humanos desenhar um gráfico de 1000 dimensões em uma folha de papel para torná-lo mais compreensível, os computadores não têm problemas em entender esse grau de espaço dimensional.

A próxima etapa do diagrama descreve o armazenamento do vetor junto com o próprio conteúdo (ou um ponteiro para o local do conteúdo) e outros metadados em um banco de dados vetorial. Um banco de dados vetorial é como qualquer tipo de banco de dados, com duas diferenças:

  • Os bancos de dados vetoriais usam um vetor como índice para pesquisar dados.
  • Os bancos de dados vetoriais implementam um algoritmo chamado cosseno similar search, também conhecido como vizinho mais próximo, que usa vetores que mais se aproximam dos critérios de pesquisa.

Com o corpus de documentos armazenados em um banco de dados vetorial, os desenvolvedores podem construir um componente retriever que recupera documentos que correspondem à consulta do usuário do banco de dados para fornecer ao LLM o que ele precisa para responder à consulta do usuário.

Respondendo a consultas com seus documentos

Um sistema RAG usa primeiro a pesquisa semântica para encontrar artigos que poderiam ser úteis para o LLM ao compor uma resposta. O próximo passo é enviar os artigos correspondentes junto com o prompt original do usuário para o LLM para compor uma resposta.

Considere o diagrama a seguir como uma implementação RAG simples (às vezes referida como "RAG ingênua").

Diagrama representando um fluxo RAG simples, com caixas representando etapas ou processos e setas conectando cada caixa. O fluxo começa com a consulta do usuário, que é enviada para a API de incorporação. A API de incorporação retorna resultados em uma consulta vetorizada, que é usada para localizar as correspondências mais próximas (blocos de artigo) no banco de dados vetorial. Os blocos de consulta e artigo são enviados para a API de conclusão e os resultados são enviados ao usuário.

No diagrama, um usuário envia uma consulta. A primeira etapa é criar uma incorporação para o prompt do usuário para recuperar um vetor. A próxima etapa é pesquisar no banco de dados vetorial os documentos (ou partes de documentos) que são uma correspondência de "vizinho mais próximo".

A similaridade de cosina é uma medida usada para determinar quão semelhantes são dois vetores, essencialmente avaliando o cosseno do ângulo entre eles. Uma semelhança cosseno próxima a 1 indica um alto grau de similaridade (ângulo pequeno), enquanto uma similaridade próxima a -1 indica dissimilaridade (ângulo próximo a 180 graus). Essa métrica é crucial para tarefas como a semelhança de documentos, onde o objetivo é encontrar documentos com conteúdo ou significado semelhantes.

Os algoritmos de "vizinho mais próximo" funcionam encontrando os vetores mais próximos (vizinhos) de um determinado ponto no espaço vetorial. No algoritmo k-nearest neighbors (KNN), 'k' refere-se ao número de vizinhos mais próximos a serem considerados. Essa abordagem é amplamente utilizada em classificação e regressão, onde o algoritmo prevê o rótulo de um novo ponto de dados com base no rótulo majoritário de seus vizinhos 'k' mais próximos no conjunto de treinamento. A similaridade KNN e cosseno são frequentemente usadas juntas em sistemas como mecanismos de recomendação, onde o objetivo é encontrar itens mais semelhantes às preferências de um usuário, representados como vetores no espaço de incorporação.

Você obtém os melhores resultados dessa pesquisa e envia o conteúdo correspondente junto com o prompt do usuário para gerar uma resposta que (espera-se) seja informada pelo conteúdo correspondente.

Desafios e Considerações

A implementação de um sistema RAG vem com seu conjunto de desafios. A privacidade dos dados é primordial, pois o sistema deve lidar com os dados do usuário de forma responsável, especialmente ao recuperar e processar informações de fontes externas. Os requisitos computacionais também podem ser significativos, pois tanto os processos de recuperação quanto os processos generativos consomem muitos recursos. Garantir a precisão e a relevância das respostas ao gerenciar vieses presentes nos dados ou no modelo é outra consideração crítica. Os desenvolvedores devem navegar por esses desafios cuidadosamente para criar sistemas RAG eficientes, éticos e valiosos.

O próximo artigo desta série, Building advanced Retrieval-Augmented Generation systems, fornece mais detalhes sobre a construção de dados e pipelines de inferência para habilitar um sistema RAG pronto para produção.

Se você quiser começar a experimentar a criação de uma solução de IA generativa imediatamente, recomendamos dar uma olhada em Introdução ao bate-papo usando sua própria amostra de dados para Python. Há versões do tutorial também disponíveis em .NET, Java e JavaScript.

Ajustando um modelo

O ajuste fino, no contexto de um LLM, refere-se ao processo de ajuste dos parâmetros do modelo em um conjunto de dados específico do domínio depois de inicialmente ser treinado em um conjunto de dados grande e diversificado.

Os LLMs são treinados (pré-treinados) em um amplo conjunto de dados, compreendendo a estrutura da linguagem, o contexto e uma ampla gama de conhecimentos. Esta etapa envolve a aprendizagem de padrões gerais de linguagem. O ajuste fino está adicionando mais treinamento ao modelo pré-treinado com base em um conjunto de dados menor e específico. Esta fase de treinamento secundário visa adaptar o modelo para ter um melhor desempenho em tarefas específicas ou entender domínios específicos, aumentando sua precisão e relevância para essas aplicações especializadas. Durante o ajuste fino, os pesos do modelo são ajustados para prever ou entender melhor as nuances desse conjunto de dados menor.

Algumas considerações:

  • Especialização: o ajuste fino adapta o modelo a tarefas específicas, como análise de documentos legais, interpretação de textos médicos ou interações de atendimento ao cliente. Isso torna o modelo mais eficaz nessas áreas.
  • Eficiência: é mais eficiente ajustar um modelo pré-treinado para uma tarefa específica do que treinar um modelo do zero, pois o ajuste fino requer menos dados e recursos computacionais.
  • Adaptabilidade: O ajuste fino permite a adaptação a novas tarefas ou domínios que não faziam parte dos dados originais de treinamento, tornando os LLMs ferramentas versáteis para várias aplicações.
  • Desempenho aprimorado: para tarefas significativamente diferentes dos dados nos quais o modelo foi originalmente treinado, o ajuste fino pode levar a um melhor desempenho, pois ajusta o modelo para entender a linguagem, o estilo ou a terminologia específicos usados no novo domínio.
  • Personalização: em alguns aplicativos, o ajuste fino pode ajudar a personalizar as respostas ou previsões do modelo para atender às necessidades ou preferências específicas de um usuário ou organização. No entanto, o ajuste fino também apresenta certas desvantagens e limitações. Compreendê-los pode ajudar a decidir quando optar pelo ajuste fino em vez de alternativas como a geração aumentada de recuperação (RAG).
  • Requisito de dados: o ajuste fino requer um conjunto de dados suficientemente grande e de alta qualidade específico para a tarefa ou domínio de destino. Reunir e organizar esse conjunto de dados pode ser desafiador e consumir muitos recursos.
  • Risco de overfitting: Há um risco de overfitting, especialmente com um pequeno conjunto de dados. O overfitting faz com que o modelo tenha um bom desempenho nos dados de treinamento, mas mal em dados novos e invisíveis, reduzindo sua generalizabilidade.
  • Custo e recursos: Embora menos intensivo em recursos do que o treinamento do zero, o ajuste fino ainda requer recursos computacionais, especialmente para grandes modelos e conjuntos de dados, o que pode ser proibitivo para alguns usuários ou projetos.
  • Manutenção e atualização: os modelos ajustados podem precisar de atualizações regulares para permanecerem efetivos à medida que as informações específicas do domínio mudam ao longo do tempo. Essa manutenção contínua requer recursos e dados extras.
  • Deriva de modelo: Como o modelo é ajustado para tarefas específicas, ele pode perder parte de sua compreensão geral de linguagem e versatilidade, levando a um fenômeno conhecido como deriva de modelo.

A personalização de um modelo com ajuste fino explica como ajustar um modelo. Em um alto nível, você fornece um conjunto de dados JSON de perguntas potenciais e respostas preferenciais. A documentação sugere que há melhorias perceptíveis ao fornecer de 50 a 100 pares de perguntas/respostas, mas o número certo varia muito no caso de uso.

Ajuste fino versus geração aumentada de recuperação

Na superfície, pode parecer que há um pouco de sobreposição entre o ajuste fino e a geração aumentada de recuperação. A escolha entre ajuste fino e geração aumentada de recuperação depende dos requisitos específicos de sua tarefa, incluindo expectativas de desempenho, disponibilidade de recursos e a necessidade de especificidade de domínio versus generalizabilidade.

Quando preferir o ajuste fino em vez da geração aumentada de recuperação:

  • Desempenho específico da tarefa - O ajuste fino é preferível quando o alto desempenho em uma tarefa específica é crítico e existem dados específicos de domínio suficientes para treinar o modelo de forma eficaz sem riscos significativos de sobreajuste.
  • Controle sobre dados - Se você tiver dados proprietários ou altamente especializados que diferem significativamente dos dados nos quais o modelo de base foi treinado, o ajuste fino permite que você incorpore esse conhecimento exclusivo ao modelo.
  • Necessidade limitada de atualizações em tempo real - Se a tarefa não exigir que o modelo seja constantemente atualizado com as informações mais recentes, o ajuste fino pode ser mais eficiente, já que os modelos RAG normalmente precisam de acesso a bancos de dados externos atualizados ou à Internet para obter dados recentes.

Quando preferir a Geração Aumentada de Recuperação em vez do ajuste fino:

  • Conteúdo dinâmico ou em evolução - RAG é mais adequado para tarefas onde ter as informações mais atuais é fundamental. Como os modelos RAG podem extrair dados de fontes externas em tempo real, eles são mais adequados para aplicativos como geração de notícias ou resposta a perguntas sobre eventos recentes.
  • Generalização sobre especialização - Se o objetivo é manter um forte desempenho em uma ampla gama de tópicos, em vez de se destacar em um domínio estreito, o RAG pode ser preferível. Ele usa bases de conhecimento externas, permitindo gerar respostas em diversos domínios sem o risco de sobreajuste a um conjunto de dados específico.
  • Restrições de recursos - Para organizações com recursos limitados para coleta de dados e treinamento de modelos, o uso de uma abordagem RAG pode oferecer uma alternativa econômica ao ajuste fino, especialmente se o modelo base já tiver um desempenho razoavelmente bom nas tarefas desejadas.

Considerações finais que podem influenciar suas decisões de design de aplicativo

Aqui está uma pequena lista de coisas a serem consideradas e outras conclusões deste artigo que afetam suas decisões de design de aplicativo:

  • Decida entre o ajuste fino e a geração aumentada de recuperação com base nas necessidades específicas do seu aplicativo. O ajuste fino pode oferecer melhor desempenho para tarefas especializadas, enquanto o RAG pode fornecer flexibilidade e conteúdo atualizado para aplicativos dinâmicos.