Retrieval-Augmented Generation

João Cláudio Nunes Carvalho
4 min readNov 5, 2024

--

Prof. João Cláudio Nunes Carvalho — Ifce

No mundo da tecnologia, “RAG” geralmente significa “Retrieval-Augmented Generation”. É uma técnica usada em modelos de linguagem natural, onde o modelo primeiro recupera partes relevantes de um texto existente e depois gera nova informação baseada no conteúdo recuperado. Isso é útil para aprimorar a qualidade das respostas do modelo, tornando-as mais precisas e informativas.

Exemplo:

Suponha que alguém faça a seguinte pergunta: “Quais são os impactos da mudança climática na biodiversidade da Amazônia?” Para abordar essa questão, o modelo RAG inicia uma busca em um vasto banco de dados por documentos ou segmentos que tratem dos impactos da mudança climática na biodiversidade. Após localizar essas informações, ele utiliza os dados coletados como base para construir uma resposta mais precisa e fundamentada.

Este método é vantajoso pois permite que o modelo tenha acesso a informações específicas e aprofundadas que não necessariamente foram incluídas durante seu treinamento. Portanto, o modelo é capaz de oferecer respostas não somente baseadas nos padrões de linguagem que aprendeu, mas também enriquecidas com conhecimentos adquiridos de fontes externas.

Vamos explorar mais detalhadamente como funciona um modelo de linguagem que emprega a técnica de Geração com Aumento por Recuperação (RAG):

1. Consulta de Entrada

  • O usuário insere uma pergunta ou solicitação, por exemplo: “Quais são os efeitos da mudança climática na biodiversidade da Amazônia?”

2. Etapa de Recuperação (Retrieval)

  • O modelo possui acesso a uma base de dados extensa, como artigos científicos, enciclopédias, ou qualquer outra fonte de informação relevante. Para a pergunta acima, o modelo busca textos que discutem mudanças climáticas, a Amazônia e sua biodiversidade.
  • A tecnologia por trás dessa busca pode envolver mecanismos de busca baseados em palavras-chave, indexação semântica ou até técnicas mais avançadas como vetores de embeddings que capturam o significado dos textos de maneira multidimensional.

3. Seleção de Conteúdo

  • Entre os documentos recuperados, o modelo seleciona os segmentos mais relevantes que realmente abordam os impactos da mudança climática na biodiversidade da Amazônia. Esta seleção é crucial para garantir que a geração subsequente seja informada e precisa.

4. Etapa de Geração (Generation)

  • Usando os trechos selecionados como contexto, o modelo agora gera uma resposta. Essa resposta é construída não apenas com base no conhecimento interno do modelo treinado em dados gerais, mas é especialmente informada e enriquecida pelo conteúdo específico recuperado.
  • O modelo pode usar uma combinação de aprendizado profundo e técnicas de processamento de linguagem natural para sintetizar uma resposta que é coerente, informativa e diretamente relevante para a pergunta feita.

5. Otimização e Aprendizado Contínuo

  • Em sistemas avançados, o feedback sobre a qualidade das respostas pode ser usado para melhorar continuamente os algoritmos de recuperação e geração. Por exemplo, se as respostas são frequentemente validadas como precisas ou úteis pelos usuários, o sistema aprende a melhorar tanto a seleção dos documentos quanto a forma como gera as respostas.

Benefícios

  • Precisão: Ao integrar informações específicas e relevantes, o modelo pode responder com maior precisão.
  • Cobertura de Conhecimento: O modelo pode abordar uma gama mais ampla de tópicos, mesmo aqueles não cobertos extensivamente em seu treinamento original.
  • Adaptação Contextual: A capacidade de adaptar respostas com base no conteúdo recuperado torna o modelo mais flexível e adaptável a novas informações e contextos.

Essa técnica combina o poder de modelos de linguagem neural profundos com a vasta quantidade de informações disponíveis em textos escritos, proporcionando uma ferramenta poderosa para aplicações de resposta a perguntas, assistentes virtuais, e muitas outras aplicações onde a precisão da informação é crucial.

# Exemplos de textos sobre a biodiversidade e mudanças climáticas
textos = [
"A Amazônia é a maior floresta tropical do mundo, lar de inúmeras espécies de flora e fauna.",
"As mudanças climáticas são caracterizadas por alterações em padrões de temperatura e precipitação, afetando ecossistemas globais.",
"A biodiversidade da Amazônia está sob ameaça devido às mudanças climáticas, que alteram o habitat natural e a disponibilidade de recursos."
]
def recuperar_texto(pergunta, documentos):
"""
Função para recuperar o texto mais relevante com base na pergunta.
Usa contagem de palavras-chave para determinar a relevância.
"""
palavras_chave = pergunta.lower().split()
melhor_pontuacao = 0
melhor_documento = ""
for doc in documentos:
pontuacao = sum(1 for palavra in palavras_chave if palavra in doc.lower())
if pontuacao > melhor_pontuacao:
melhor_pontuacao = pontuacao
melhor_documento = doc
return melhor_documento
def gerar_resposta(documento, pergunta):
"""
Gera uma resposta baseada no documento recuperado.
Esta função tenta extrair uma sentença relevante e reformular a informação de forma resumida.
"""
# Dividir o documento em sentenças
sentencas = documento.split('.')
# Escolher a primeira sentença que contém uma palavra-chave relevante
for sentenca in sentencas:
if any(palavra in sentenca.lower() for palavra in pergunta.lower().split()):
# Retornar essa sentença com uma pequena reformulação
return "Um efeito observado é que " + sentenca.strip() + '.'
return "Não foi possível extrair uma resposta específica do documento."
def main():
# Pergunta do usuário
pergunta = "Quais são os efeitos da mudança climática na biodiversidade da Amazônia?"
# Encontrar o texto mais relevante
texto_selecionado = recuperar_texto(pergunta, textos)
# Gerar uma resposta
resposta = gerar_resposta(texto_selecionado, pergunta)
print("Resposta:", resposta)if __name__ == "__main__":
main()

Como Funciona:

  • Recuperação de Texto: A função recuperar_texto seleciona o documento que contém o maior número de palavras-chave da pergunta.
  • Geração de Resposta: A função gerar_resposta agora busca no documento recuperado por sentenças que contêm palavras-chave e tenta reformular uma dessas sentenças para fornecer uma resposta concisa.

Esta abordagem ainda é bastante básica, mas ilustra como você pode começar a manipular e extrair informações de um texto de forma programática.

--

--

João Cláudio Nunes Carvalho
João Cláudio Nunes Carvalho

Written by João Cláudio Nunes Carvalho

Professor of Physics at the Federal Institute of Ceará. Phd in physics(UFC). MBA in Data Science and Analytics — USP — University of São Paulo