Pressione Esc para fechar

Chunking - Parent-child Retrieval

← Voltar para o Dia 6: RAG avançado

Parent-child Retrieval

O que é

Parent-child Retrieval é uma estratégia de Chunking e Retrieval na qual um documento é dividido em chunks de diferentes tamanhos, criando uma relação entre chunks filhos (children) e chunks pais (parents).

A ideia é separar duas necessidades que normalmente entram em conflito no RAG:

Child
↓
bom para encontrar a informação

Parent
↓
bom para fornecer contexto

Os chunks filhos são menores e mais específicos, facilitando a localização de um trecho relevante durante o Retrieval. Depois que um child é encontrado, o sistema recupera o respectivo parent, que contém uma quantidade maior de contexto, para ser enviado à LLM.

Assim, o sistema não precisa escolher entre chunks muito pequenos ou muito grandes. Ele utiliza os dois em etapas diferentes.

Como funciona

Primeiro, o documento é dividido em chunks maiores, que funcionam como parents. Esses parents são então subdivididos em chunks menores, que funcionam como children.

Documento
    ↓
Parent Chunk
    ↓
┌──────────┬──────────┬──────────┐
│ Child 1  │ Child 2  │ Child 3  │
└──────────┴──────────┴──────────┘

Um documento pode, por exemplo, ser organizado assim:

Documento
   ↓
Parent 1
   ├── Child 1
   ├── Child 2
   └── Child 3

Parent 2
   ├── Child 4
   ├── Child 5
   └── Child 6

Os embeddings são normalmente gerados para os children, porque eles representam unidades menores e mais específicas de informação.

Quando o usuário faz uma pergunta, o Retrieval procura primeiro entre os children:

Pergunta
   ↓
Embedding da pergunta
   ↓
Busca entre Children
   ↓
Child relevante
   ↓
Identificação do Parent
   ↓
Parent recuperado
   ↓
Contexto
   ↓
LLM

Suponha que o usuário pergunte:

"Qual é o prazo para solicitar reembolso de uma viagem?"

O sistema pode encontrar:

Child 27:
"O pedido deve ser realizado em até 30 dias após o retorno."

Esse child pertence a:

Parent 8:
Política de Reembolso de Viagens

Seção completa sobre solicitação,
prazos, documentação e exceções.

Em vez de enviar apenas o pequeno Child 27 para a LLM, o sistema pode recuperar o Parent 8 e fornecer mais contexto.

Isso resolve um problema comum do Chunking: um chunk pequeno pode ser excelente para encontrar uma informação, mas insuficiente para interpretá-la corretamente.

O processo pode ser visualizado assim:

                    Documento
                        ↓
                 Parent Chunks
                        ↓
                Child Chunks
                        ↓
                  Embeddings
                        ↓
                     Index
                        ↓
                    Consulta
                        ↓
               Retrieval dos Children
                        ↓
                 Child relevante
                        ↓
                Recupera o Parent
                        ↓
                    Contexto
                        ↓
                       LLM

Em implementações mais sofisticadas, vários children podem apontar para o mesmo parent. O sistema também pode recuperar mais de um parent quando diferentes children relevantes pertencem a partes diferentes do documento.

Um exemplo

Imagine um manual corporativo com uma seção sobre reembolso de viagens.

A estrutura original poderia ser:

Manual de Despesas Corporativas

Parent:
Reembolso de viagens

    Child 1:
    Quem pode solicitar reembolso

    Child 2:
    Quais despesas são elegíveis

    Child 3:
    Prazo para solicitação

    Child 4:
    Documentação necessária

    Child 5:
    Exceções

O usuário pergunta:

"Até quando posso solicitar o reembolso?"

Durante o Retrieval, o sistema pode encontrar:

Consulta
   ↓
Child 3
"Prazo para solicitação"
   ↓
Parent
"Reembolso de viagens"

O Parent fornece o contexto mais amplo:

Parent:
Reembolso de viagens

"Os funcionários devem solicitar o reembolso
em até 30 dias após o retorno da viagem.
A solicitação deve conter os comprovantes
das despesas realizadas. Casos excepcionais
devem ser encaminhados ao gestor responsável."

A LLM recebe esse contexto e consegue formular uma resposta mais completa:

Pergunta
   ↓
Child relevante
   ↓
Parent correspondente
   ↓
Contexto
   ↓
LLM
   ↓
"Você deve solicitar o reembolso em até 30 dias
após o retorno da viagem."

A grande vantagem é que o sistema utiliza o child para localizar e o parent para contextualizar.

Por que é importante

Parent-child Retrieval é importante porque ajuda a resolver uma das principais dificuldades do Chunking: encontrar o equilíbrio entre granularidade de busca e preservação de contexto.

Chunks pequenos tendem a ser mais específicos e podem facilitar o Retrieval:

Chunk pequeno
   ↓
Mais específico
   ↓
Boa capacidade de localização

Porém, podem perder informações necessárias para compreender o trecho.

Chunks grandes preservam mais contexto:

Chunk grande
   ↓
Mais contexto
   ↓
Melhor compreensão

Mas podem conter informações demais e dificultar a identificação precisa do trecho relevante.

Parent-child Retrieval combina as duas abordagens:

Child
↓
Granularidade para Retrieval
        +
Parent
↓
Contexto para a LLM

Isso também estabelece uma conexão direta com o conceito de Chunk Size. Em vez de procurar um único tamanho ideal para todos os objetivos, o sistema pode utilizar diferentes tamanhos em diferentes etapas:

Documento
    ↓
Parent maior
    ↓
Children menores
    ↓
Embedding dos Children
    ↓
Retrieval
    ↓
Child relevante
    ↓
Parent correspondente
    ↓
Contexto para a LLM

Essa estratégia é particularmente útil para documentos estruturados, como manuais, contratos, políticas corporativas e documentação técnica, nos quais um pequeno trecho pode conter a resposta, mas seu significado depende da seção maior à qual pertence.

Portanto, Parent-child Retrieval pode ser entendido como uma forma de separar duas perguntas diferentes dentro do RAG:

"Qual parte do documento é relevante?"
        ↓
Child

"Qual contexto devo fornecer para compreender essa parte?"
        ↓
Parent

Essa separação permite que o Retrieval seja preciso sem necessariamente sacrificar o contexto necessário para a resposta da LLM.

link de compartilhamento