? Geração Aumentada de Recuperação Incrível (RAG)
Este repositório contém uma lista impressionante com curadoria e informações gerais sobre aplicativos de geração aumentada de recuperação (RAG) em IA generativa.
A Geração Aumentada de Recuperação (RAG) é uma técnica em IA Generativa onde contexto adicional é recuperado de fontes externas para enriquecer o processo generativo de Modelos de Linguagem Grande (LLMs). Esta abordagem permite que os LLMs incorporem informações atualizadas, específicas ou confidenciais que possam faltar apenas nos dados de pré-treinamento.
Contente
- Informações gerais sobre RAG
- Abordagens
- ? Estruturas que facilitam o RAG
- Técnicas
- Métricas
- ? Bancos de dados
Informações gerais sobre RAG
Nas abordagens RAG tradicionais, uma estrutura básica é empregada para recuperar documentos que enriquecem o contexto de um prompt LLM. Por exemplo, ao consultar materiais para renovar uma casa, o LLM pode possuir conhecimentos gerais sobre renovação, mas carece de detalhes específicos sobre a casa específica. A implementação de uma arquitetura RAG permite a busca e recuperação rápida de documentos relevantes, como projetos, para oferecer respostas mais personalizadas. Isto garante que o LLM incorpora informações específicas às necessidades de renovação, aumentando assim a precisão das suas respostas.
Uma implementação típica de RAG segue estas etapas principais:
- Divida a base de conhecimento: divida o corpus do documento em partes menores e gerenciáveis.
- Crie embeddings: aplique um modelo de incorporação para transformar esses pedaços de texto em embeddings vetoriais, capturando seu significado semântico.
- Armazenar em um banco de dados vetorial: salve os embeddings em um banco de dados vetorial, permitindo a recuperação rápida com base na similaridade semântica.
- Lidar com consultas do usuário: converta a consulta do usuário em uma incorporação usando o mesmo modelo que foi aplicado aos blocos de texto.
- Recuperar dados relevantes: pesquise no banco de dados vetorial por incorporações que correspondam melhor à incorporação da consulta com base na semelhança semântica.
- Aprimore o prompt: incorpore os trechos de texto mais relevantes no prompt do LLM para fornecer um contexto valioso para gerar uma resposta.
- Gerar uma resposta: O LLM aproveita o prompt aumentado para fornecer uma resposta precisa e adaptada à consulta do usuário.
Abordagens
As implementações de RAG variam em complexidade, desde a simples recuperação de documentos até técnicas avançadas que integram ciclos de feedback iterativos e melhorias específicas de domínio. As abordagens podem incluir:
- RAG Corretivo (CRAG): Métodos para corrigir ou refinar as informações recuperadas antes da integração nas respostas do LLM.
- Ajuste fino aumentado de recuperação (RAFT): Técnicas para ajustar LLMs especificamente para tarefas aprimoradas de recuperação e geração.
- RAG auto-reflexivo: Modelos que ajustam dinamicamente estratégias de recuperação com base no feedback de desempenho do modelo.
- RAG Fusion: Técnicas que combinam vários métodos de recuperação para melhorar a integração do contexto.
- Recuperação Aumentada Temporal (TAR): Considerando dados sensíveis ao tempo em processos de recuperação.
- Plan-then-RAG (PlanRAG): Estratégias que envolvem etapas de planejamento antes da execução do RAG para tarefas complexas.
- GraphRAG: Uma abordagem estruturada usando gráficos de conhecimento para maior integração de contexto e raciocínio.
- FLARE - Uma abordagem que incorpora geração aumentada de recuperação ativa para melhorar a qualidade da resposta.
- Recuperação Contextual - Melhora a recuperação adicionando contexto relevante aos pedaços de documentos antes da recuperação, aumentando a relevância das informações recuperadas de grandes bases de conhecimento.
? Estruturas que facilitam o RAG
- Haystack - estrutura de orquestração LLM para construir aplicativos LLM personalizáveis e prontos para produção.
- LangChain – Uma estrutura multifuncional para trabalhar com LLMs.
- Kernel Semântico – Um SDK da Microsoft para desenvolver aplicativos de IA generativa.
- LlamaIndex – Estrutura para conectar fontes de dados personalizadas a LLMs.
- Cognita – Estrutura RAG de código aberto para construção de aplicativos modulares e prontos para produção.
- Verba - Aplicativo de código aberto para RAG pronto para uso.
- Mastra - Estrutura Typescript para construção de aplicativos de IA.
Técnicas
Limpeza de dados
- Técnicas de limpeza de dados: etapas de pré-processamento para refinar os dados de entrada e melhorar o desempenho do modelo.
Solicitando
- Estratégias
- Marcação e rotulagem: adição de tags ou rótulos semânticos aos dados recuperados para aumentar a relevância.
- Razão e Ação (ReAct) (ReAct): Integração de capacidades de raciocínio para orientar as respostas do LLM com base no contexto recuperado.
- Cadeia de Pensamento (CoT): Incentivar o modelo a pensar nos problemas passo a passo antes de fornecer uma resposta.
- Cadeia de Verificação (CoVe): Solicita ao modelo que verifique a precisão de cada etapa de seu raciocínio.
- Autoconsistência: Gerar múltiplos caminhos de raciocínio e selecionar a resposta mais consistente.
- Prompt Zero-Shot: Projetar prompts que orientam o modelo sem quaisquer exemplos.
- Solicitação de poucas fotos: Fornecendo alguns exemplos na solicitação para demonstrar o formato de resposta desejado.
- Cache
- Cache de prompt: otimiza LLMs armazenando e reutilizando estados de atenção pré-computados.
Pedaço
- Segmentação de tamanho fixo
- Dividir o texto em segmentos de tamanhos consistentes para processamento eficiente.
- Divide os textos em partes com base no tamanho e na sobreposição.
- Exemplo: Dividir por caractere (LangChain).
- Exemplo: SentençaSplitter (LlamaIndex).
- Segmentação recursiva
- Segmentação hierárquica usando algoritmos recursivos para estruturas complexas de documentos.
- Exemplo: divisão recursiva por caractere (LangChain).
- Segmentação baseada em documento
- Segmentação de documentos com base em metadados ou dicas de formatação para análise direcionada.
- Exemplo: MarkdownHeaderTextSplitter (LangChain).
- Exemplo: manipule incorporações de imagens e texto com modelos como OpenCLIP.
- Segmentação semântica
- Extrair seções significativas com base na relevância semântica, em vez de limites arbitrários.
- Agrupamento agente
- Métodos de chunking interativos onde LLMs orientam a segmentação.
Incorporações
- Selecione o modelo de incorporação
- Tabela de classificação MTEB : explore o benchmark do Hugging Face para avaliar incorporações de modelos.
- Incorporações personalizadas : Desenvolva incorporações personalizadas para domínios ou tarefas específicas para melhorar o desempenho do modelo. Incorporações personalizadas podem capturar terminologia e nuances específicas do domínio. As técnicas incluem o ajuste fino de modelos pré-treinados em seu próprio conjunto de dados ou treinamento de incorporações do zero usando estruturas como TensorFlow ou PyTorch.
Recuperação
- Métodos de pesquisa
- Índice plano de armazenamento de vetores
- Forma simples e eficiente de recuperação.
- O conteúdo é vetorizado e armazenado como vetores de conteúdo simples.
- Recuperação de índice hierárquico
- Limite os dados hierarquicamente a diferentes níveis.
- Executa recuperações por ordem hierárquica.
- Perguntas hipotéticas
- Usado para aumentar a similaridade entre blocos de banco de dados e consultas (o mesmo com HyDE).
- LLM é usado para gerar perguntas específicas para cada pedaço de texto.
- Converte essas questões em incorporações vetoriais.
- Durante a pesquisa, compara as consultas com este índice de vetores de perguntas.
- Incorporações de documentos hipotéticos (HyDE)
- Usado para aumentar a similaridade entre blocos de banco de dados e consultas (o mesmo acontece com perguntas hipotéticas).
- LLM é usado para gerar uma resposta hipotética com base na consulta.
- Converte esta resposta em uma incorporação vetorial.
- Compara o vetor de consulta com o vetor de resposta hipotético.
- Recuperação pequena a grande
- Melhora a recuperação usando pedaços menores para pesquisa e pedaços maiores para contexto.
- Pedaços filhos menores referem-se a pedaços pais maiores
- Reclassificação : aprimora os resultados da pesquisa em pipelines RAG reordenando os documentos inicialmente recuperados, priorizando aqueles mais semanticamente relevantes para a consulta.
Métricas
Métricas de pesquisa
Essas métricas são usadas para medir a similaridade entre embeddings, o que é crucial para avaliar a eficácia com que os sistemas RAG recuperam e integram documentos externos ou fontes de dados. Ao selecionar métricas de similaridade apropriadas, você pode otimizar o desempenho e a precisão do seu sistema RAG. Alternativamente, você pode desenvolver métricas personalizadas adaptadas ao seu domínio ou nicho específico para capturar nuances específicas do domínio e melhorar a relevância.
Similaridade de cosseno
- Mede o cosseno do ângulo entre dois vetores em um espaço multidimensional.
- Altamente eficaz para comparar incorporações de texto onde a direção dos vetores representa informação semântica.
- Comumente usado em sistemas RAG para medir a semelhança semântica entre embeddings de consultas e embeddings de documentos.
Produto escalar
- Calcula a soma dos produtos das entradas correspondentes de duas sequências de números.
- Equivalente à similaridade de cosseno quando os vetores são normalizados.
- Simples e eficiente, frequentemente usado com aceleração de hardware para cálculos em grande escala.
Distância Euclidiana
- Calcula a distância em linha reta entre dois pontos no espaço euclidiano.
- Pode ser usado com incorporações, mas pode perder eficácia em espaços de alta dimensão devido à "maldição da dimensionalidade".
- Freqüentemente usado em algoritmos de agrupamento como K-means após redução de dimensionalidade.
Semelhança de Jaccard
- Mede a similaridade entre dois conjuntos finitos como o tamanho da interseção dividido pelo tamanho da união dos conjuntos.
- Útil ao comparar conjuntos de tokens, como em modelos de saco de palavras ou comparações de n-gramas.
- Menos aplicável a incorporações contínuas produzidas por LLMs.
Nota: Similaridade de cosseno e produto escalar são geralmente vistos como as métricas mais eficazes para medir a similaridade entre embeddings de alta dimensão.
Métricas de avaliação de resposta
Essas métricas avaliam a qualidade e a relevância das respostas geradas pelo seu sistema RAG, avaliando quão precisas, contextualmente apropriadas e confiáveis elas são. Ao aplicar essas métricas de avaliação, você pode obter insights sobre o desempenho do seu sistema e identificar áreas de melhoria.
- Marcação de referência automatizada
- Humanos como juízes
- Modelos como juízes
Ferramentas
Essas ferramentas podem ajudar na avaliação do desempenho do seu sistema RAG, desde o rastreamento do feedback do usuário até o registro de interações de consulta e comparação de múltiplas métricas de avaliação ao longo do tempo.
- LangFuse : ferramenta de código aberto para rastreamento de métricas LLM, observabilidade e gerenciamento imediato.
- Ragas : Framework que ajuda a avaliar pipelines RAG.
- LangSmith : Uma plataforma para construir aplicativos LLM de nível de produção que permite monitorar e avaliar de perto seu aplicativo.
- Hugging Face Evaluate : Ferramenta para calcular métricas como BLEU e ROUGE para avaliar a qualidade do texto.
- Pesos e preconceitos : rastreia experimentos, registra métricas e visualiza o desempenho.
? Bancos de dados
A lista abaixo apresenta vários sistemas de banco de dados adequados para aplicações de Retrieval Augmented Generation (RAG). Eles cobrem uma variedade de casos de uso de RAG, auxiliando no armazenamento e recuperação eficiente de vetores para gerar respostas ou recomendações.
Referências
- Escolhendo um banco de dados vetorial
Mecanismos de processamento e fornecimento de dados distribuídos:
- Apache Cassandra: Sistema distribuído de gerenciamento de banco de dados NoSQL.
- MongoDB Atlas: serviço de banco de dados multimodelo distribuído globalmente com pesquisa vetorial integrada.
- Vespa: mecanismo de processamento e serviço de big data de código aberto projetado para aplicações em tempo real.
Mecanismos de pesquisa com recursos vetoriais:
- Elasticsearch: fornece recursos de pesquisa vetorial junto com funcionalidades de pesquisa tradicionais.
- OpenSearch: mecanismo distribuído de pesquisa e análise, derivado do Elasticsearch.
Bancos de dados vetoriais:
- Chroma DB: um banco de dados de incorporação de código aberto nativo de IA.
- Milvus: Um banco de dados vetorial de código aberto para aplicações baseadas em IA.
- Pinecone: um banco de dados vetorial sem servidor, otimizado para fluxos de trabalho de aprendizado de máquina.
- Oracle AI Vector Search: integra recursos de pesquisa vetorial no Oracle Database para consulta semântica baseada em incorporações de vetores.
Extensões de banco de dados relacional:
- Pgvector: Uma extensão de código aberto para pesquisa de similaridade vetorial no PostgreSQL.
Outros sistemas de banco de dados:
- Azure Cosmos DB: serviço de banco de dados multimodelo distribuído globalmente com pesquisa vetorial integrada.
- Couchbase: um banco de dados em nuvem NoSQL distribuído.
- Lanterna: um mecanismo de pesquisa pessoal que reconhece a privacidade.
- LlamaIndex: Emprega um armazenamento de vetores simples na memória para experimentação rápida.
- Neo4j: Sistema de gerenciamento de banco de dados gráfico.
- Qdrant: Um banco de dados vetorial de código aberto projetado para pesquisa de similaridade.
- Redis Stack: um armazenamento de estrutura de dados na memória usado como banco de dados, cache e intermediário de mensagens.
- SurrealDB: um banco de dados multimodelo escalável otimizado para dados de série temporal.
- Weaviate: um mecanismo de pesquisa vetorial nativo da nuvem de código aberto.
Bibliotecas e ferramentas de pesquisa vetorial:
- FAISS: Uma biblioteca para busca eficiente de similaridade e agrupamento de vetores densos, projetada para lidar com conjuntos de dados em grande escala e otimizada para recuperação rápida de vizinhos mais próximos.