Partilhar 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 Large Language Model (LLM) 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 é a Geração Aumentada de Recuperação (RAG), que é uma forma de pré-processamento que combina pesquisa 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 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 tratamento de tipos específicos de entrada ou domínios.

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

Compreender a RAG

O RAG é frequentemente usado para habilitar o cenário de "bate-papo sobre meus dados", onde empresas que têm um grande corpus de conteúdo textual (documentos internos, documentação, etc.) e querem usar esse corpus como base para respostas às solicitações do usuário.

Em um nível alto, você cria uma entrada de banco de dados para cada documento (ou parte de um documento chamado "pedaço"). 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 para o LLM para compor uma resposta.

Nota

O termo Geração Aumentada de Recuperação (RAG) acomodativamente. 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). Esta distinção matizada não é abordada na maioria das leituras relacionadas com as 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 de uma parte do documento). Considere o diagrama a seguir que descreve as etapas básicas para criar um índice vetorizado de documentos.

Diagrama que descreve os diferentes estágios de ingestão de documentos, começando com o fragmentamento, depois as etapas do processo pós-fragmentação, em seguida, chama para a API de incorporação e, em seguida, salva os blocos de 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 é impulsionado pela noção de 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 o bloco de 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 temática, 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 determinado vetor vive em uma determinada área do plano x, y, z. E se tiver 1000 (ou mais) valores? Embora não seja possível para os seres 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 mostra o armazenamento do vetor junto com o próprio conteúdo (ou um ponteiro para a localização 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 os 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, a fim de fornecer ao LLM o que ele precisa para responder à consulta do usuário.

Responder a perguntas com os seus documentos

Um sistema RAG primeiro usa a pesquisa semântica para encontrar artigos que podem ser úteis para o LLM ao compor uma resposta. O próximo passo é enviar os artigos correspondentes juntamente 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 para o usuário.

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

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

Os algoritmos do "vizinho mais próximo" funcionam encontrando os vetores (vizinhos) mais próximos 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 considerar. Esta abordagem é amplamente utilizada na 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 semelhança KNN e cosseno são frequentemente usadas juntas em sistemas como motores 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 (esperamos) 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 é fundamental, 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, uma vez que tanto os processos de recuperação como os processos generativos consomem muitos recursos. Garantir a precisão e a relevância das respostas enquanto gerencia 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 ajustar os 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 linguísticos gerais. 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 formação secundária visa adaptar o modelo para um melhor desempenho em tarefas particulares ou compreender domínios específicos, aumentando a 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 jurídicos, 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, já que 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 de treinamento originais, tornando os LLMs ferramentas versáteis para várias aplicações.
  • Melhor desempenho: para tarefas que são 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 algumas desvantagens e limitações. Compreendê-los pode ajudar a decidir quando optar pelo ajuste fino versus 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. A coleta e a curadoria desse conjunto de dados podem ser desafiadoras e demandar muitos recursos.
  • Risco de sobreajuste: há um risco de sobreajuste, 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 consuma menos 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 eficazes à medida que as informações específicas do domínio mudam ao longo do tempo. Esta manutenção contínua requer recursos e dados adicionais.
  • Desvio 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.

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

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

Superficialmente, pode parecer que há um pouco de sobreposição entre ajuste fino e geração aumentada de recuperação. Escolher 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 base foi treinado, o ajuste fino permite incorporar 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, uma vez 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 - O RAG é mais adequado para tarefas em que ter as informações mais atuais é fundamental. Como os modelos RAG podem obter 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 restrito, o RAG pode ser preferível. Utiliza bases de conhecimento externas, o que lhe permite gerar respostas em diversos domínios sem o risco de sobreadequação 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 as decisões de design do aplicativo

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

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