Bom dia a todos! Sou Louis-François, cofundador e CTO da Towards AI, e hoje vamos nos aprofundar no que provavelmente é a melhor pilha de Retrieval-Augmented Generation (RAG) disponível atualmente, graças à excelente pesquisa de Wang et al. (2024). Essa pesquisa oferece uma grande oportunidade de criar uma pilha de RAG O sistema fornece percepções valiosas, e estou aqui para desvendar os mistérios.
Então, o que torna um sistema RAG realmente de primeira linha? Seus componentes, é claro! Vamos dar uma olhada nesses melhores componentes e como eles funcionam para que você também possa criar um sistema RAG de alto nível, com um ovo multimodal no final.
Classificação das consultas
Classificação de consultas
Vamos começar com o Classificação das consultas Início. Nem todas as consultas precisam ser recuperadas, porque o modelo de linguagem grande às vezes já sabe a resposta. Por exemplo, se você perguntar "Quem é Lionel Messi?" o modelo de linguagem grande já poderá lhe responder, sem a necessidade de recuperá-la!
Wang et al. criaram 15 categorias de tarefas para determinar se uma consulta fornece informações suficientes ou se precisa ser recuperada. Eles treinaram um classificador binário para diferenciar as tarefas, sendo que as tarefas rotuladas como "suficientes" não precisam ser recuperadas e as tarefas rotuladas como "insuficientes" precisam ser recuperadas. Nesta imagem, a cor amarela significa que nenhuma recuperação é necessária e a cor vermelha significa que alguns documentos precisam ser recuperados!
fragmentação
Chunking
Próximo. fragmentação. O desafio aqui é encontrar o tamanho ideal de bloco para seus dados. Muito grande? Você adicionará ruído e custos desnecessários. Muito curto? Você perderá informações contextuais.
Wang et al. descobriram que tamanhos de blocos entre 256 e 512 token Entre funciona melhor. Mas lembre-se, isso depende do tipo de dados - portanto, não deixe de fazer sua avaliação! DICA PRO: Use a função small2big(comece com pedaços pequenos ao pesquisar e, em seguida, use pedaços maiores ao gerar), ou experimente o janela deslizante para sobrepor tokens entre blocos.
Metadados e pesquisa híbrida
Metadados e pesquisa híbrida
Use seus metadados! Adicione títulos, palavras-chave e até mesmo perguntas hipotéticas. Em seguida, trabalhe com o Pesquisa híbridaque combina a pesquisa vetorial (para correspondência semântica) com o clássico BM25 pesquisa de palavras-chave, seu sistema terá um desempenho brilhante.
A HyDE (geração de pseudodocumentos para aprimorar a pesquisa) é interessante e oferece melhores resultados, mas é extremamente ineficiente. Fique com a pesquisa híbrida por enquanto - ela é melhor para equilibrar o desempenho e é especialmente boa para a criação de protótipos.
Modelos de incorporação
Modelo de incorporação
Selecionando o correto Modelos de incorporação É como encontrar o par de tênis certo. Você não usaria chuteiras para jogar tênis.FlagEmbedding's LLM-Embedder O melhor ajuste neste estudo - um bom equilíbrio entre desempenho e tamanho. Nem muito grande, nem muito pequeno - na medida certa.
Observe que eles testaram apenas o modelo de código aberto, portanto, o Coesão e os modelos da OpenAI não são considerados. Caso contrário, o Cohere é provavelmente sua melhor opção.
banco de dados de vetores
Banco de dados vetorial
Agora vamos ao banco de dados. Para uso a longo prazo, oMilvus é o banco de dados de vetores escolhido por eles. Ele é de código aberto, confiável e uma excelente opção para manter seu sistema de recuperação funcionando sem problemas. Também forneci links na descrição abaixo.
Conversão de consulta
Transformação de consultas
Antes de recuperar, você deve primeiro conversões consulta do usuário! Seja por meio do Reescrita de consulta para melhorar a clareza, ou Decomposição de consultas Dividir problemas complexos em problemas menores e recuperar cada subproblema, ou até mesmo gerar pseudodocumentos (por exemplo HyDE feitas) e usá-las no processo de recuperação - essa etapa é fundamental para melhorar a precisão. Lembre-se de que mais conversões aumentarão a latência, especialmente com o HyDE.
rearranjo
Reranking
Agora vamos conversar. rearranjo. Depois de recuperar os documentos, você precisa garantir que os mais relevantes estejam no topo, e é aí que entra a reordenação.
Neste estudo.monoT5 é a opção de melhor desempenho entre desempenho e eficiência. Ele faz o ajuste fino do modelo T5, reordenando os documentos com base em sua relevância para a consulta, garantindo que as melhores correspondências venham primeiro.ClassificaçãoLaMA Melhor desempenho geral, mas TILDEv2 A velocidade mais rápida. Se você estiver interessado, o jornal tem mais informações sobre isso.
Reembalagem de documentos
Reembalagem de documentos
Depois de reordenar, você precisa fazer alguns Reembalagem de documentos Wang et al. recomendam o uso do método "reverso", ou seja, a classificação dos documentos em ordem crescente de relevância. Liu et al. (2024) Descobriu-se que essa abordagem de colocar informações relevantes no início ou no final melhora o desempenho. O reempacotamento otimiza a forma como as informações são apresentadas ao modelo de linguagem grande após o processo de reordenação para ajudar o modelo a entender melhor a ordem em que as informações são fornecidas, em vez de se basear apenas em uma ordem teórica de relevância.
resumos
Sumarização
Então, antes de chamar o modelo de linguagem grande, você precisa passar o resumos para remover informações redundantes. Os longos prompts enviados a grandes modelos de linguagem são caros e, muitas vezes, desnecessários. O resumo pode ajudar a remover informações redundantes ou desnecessárias e, assim, reduzir os custos.
Você pode usar algo como Recomp Ferramentas como essa executam a compactação extrativa para selecionar frases úteis ou a compactação generativa para consolidar informações de vários documentos. No entanto, se a velocidade for sua prioridade, você pode pular essa etapa.
Gerador de ajuste fino
Ajuste fino do gerador
Por fim, é apropriado fornecer uma lista dos nomes que você está usando para o gerando Como fazer o ajuste fino do Big Language Model? É absolutamente necessário! O ajuste fino com uma combinação de dados de documentos correlacionados e aleatórios melhora a capacidade do gerador de lidar com informações irrelevantes. Isso torna o modelo mais robusto e ajuda a fornecer melhores respostas gerais. Embora a proporção exata não seja fornecida no artigo, os resultados são bastante claros: o ajuste fino vale a pena! É claro que isso também depende de seu domínio específico.
multimodal
Multimodalidades
Ao processar imagens? Realização multimodal Recuperação. Para tarefas de texto para imagem, consultar o banco de dados em busca de imagens semelhantes pode acelerar o processo. Em tarefas de imagem para texto, a correspondência de imagens semelhantes pode recuperar descrições precisas e preexistentes. A chave está enraizada em informações reais e verificadas.
chegar a um veredicto
Em suma, esse artigo de Wang et al. nos fornece um plano sólido para a criação de sistemas RAG eficientes. No entanto, lembre-se de que este é apenas um artigo e não abrange todos os aspectos do pipeline RAG. Por exemplo, o artigo não explora o treinamento conjunto de recuperadores e geradores, o que pode revelar mais potencial. Além disso, o documento não se aprofunda em técnicas de fragmentação que não foram investigadas devido a questões de custo, mas essa é uma direção que vale a pena explorar.
Recomendo enfaticamente a leitura do documento completo para obter mais informações.
Como sempre, obrigado pela leitura. Se você achou este detalhamento útil ou tem algum comentário, informe-me na seção de comentários e nos vemos na próxima vez!
bibliografia
Criação de LLMs para produção. https://amzn.to/4bqYU9b
Wang et al., 2024 (Referência da tese). https://arxiv.org/abs/2407.01219
LLM-Embedder (Modelos de incorporação). https://github.com/FlagOpen/FlagEmbedding/tree/master/FlagEmbedding/llm_embedder
Milvus (banco de dados vetorial). https://milvus.io/
Liu et al., 2024 (reembalagem de documentos). https://arxiv.org/abs/2307.03172
Recomp (ferramenta de resumo). https://github.com/carriex/recomp