Incorporar primeiro, depois fragmentar: Recuperação mais inteligente de RAG com fragmentação semântica Max-Min
A Geração Aumentada de Recuperação (RAG) tornou-se a abordagem padrão para fornecer contexto e memória para aplicações de IA - agentes de IA, assistentes de apoio ao cliente, bases de conhecimento e sistemas de pesquisa dependem todos dela.
Em quase todos os pipelines RAG, o processo padrão é o mesmo: pegar nos documentos, dividi-los em partes e, em seguida, incorporar essas partes para recuperação por semelhança numa base de dados vetorial como o Milvus. Uma vez que a divisão em blocos é feita à partida, a qualidade desses blocos afecta diretamente a eficácia do sistema na recuperação de informações e a precisão das respostas finais.
O problema é que as estratégias tradicionais de fragmentação normalmente dividem o texto sem qualquer compreensão semântica. Os cortes de chunking de comprimento fixo baseiam-se na contagem de tokens e o chunking recursivo utiliza uma estrutura de nível superficial, mas ambos ignoram o significado real do texto. Como resultado, as ideias relacionadas são frequentemente separadas, as linhas não relacionadas são agrupadas e o contexto importante é fragmentado.
Neste blogue, gostaria de partilhar uma estratégia de fragmentação diferente: Max-Min Semantic Chunking. Em vez de dividir em pedaços primeiro, incorpora o texto antecipadamente e utiliza a semelhança semântica para decidir onde os limites devem ser formados. Ao incorporar antes de cortar, o pipeline pode seguir as mudanças naturais de significado em vez de se basear em limites de comprimento arbitrários.
Como funciona um pipeline RAG típico
A maioria dos pipelines RAG, independentemente da estrutura, segue a mesma linha de montagem em quatro etapas. Provavelmente já escreveu alguma versão desta linha:
1. Limpeza e fragmentação de dados
O pipeline começa por limpar os documentos em bruto: removendo cabeçalhos, rodapés, texto de navegação e tudo o que não seja conteúdo real. Uma vez eliminado o ruído, o texto é dividido em partes mais pequenas. A maioria das equipas usa pedaços de tamanho fixo - normalmente 300-800 tokens - porque isso mantém o modelo de incorporação gerível. A desvantagem é que as divisões são baseadas no comprimento e não no significado, pelo que os limites podem ser arbitrários.
2. Incorporação e armazenamento
Cada pedaço é então incorporado usando um modelo de incorporação como o do OpenAI text-embedding-3-small ou o codificador do BAAI. Os vectores resultantes são armazenados numa base de dados vetorial, como a Milvus ou a Zilliz Cloud. A base de dados trata da indexação e da pesquisa de semelhanças para que possa comparar rapidamente novas consultas com todos os pedaços armazenados.
3. Consulta
Quando um utilizador faz uma pergunta - por exemplo, "Como é que o RAG reduz as alucinações?" - o sistema incorpora a consulta e envia-a para a base de dados. A base de dados devolve os K pedaços superiores cujos vectores estão mais próximos da pergunta. Estes são os pedaços de texto em que o modelo se baseará para responder à pergunta.
4. Geração de respostas
Os fragmentos recuperados são agrupados com a consulta do utilizador e introduzidos num LLM. O modelo gera uma resposta utilizando o contexto fornecido como base.
A fragmentação está no início de todo este processo, mas tem um impacto muito grande. Se os pedaços estiverem alinhados com o significado natural do texto, a recuperação parece exacta e consistente. Se os pedaços foram cortados em locais estranhos, o sistema tem mais dificuldade em encontrar a informação correta, mesmo com uma forte incorporação e uma base de dados vetorial rápida.
Os desafios de fazer o Chunking correto
Atualmente, a maioria dos sistemas RAG utiliza um de dois métodos básicos de fragmentação, ambos com limitações.
1. Chunking de tamanho fixo
Esta é a abordagem mais simples: dividir o texto por uma contagem fixa de tokens ou caracteres. É rápido e previsível, mas não tem em conta a gramática, os tópicos ou as transições. As frases podem ser cortadas a meio. Por vezes, até palavras. Os embeddings obtidos a partir destes pedaços tendem a ser ruidosos porque os limites não reflectem a forma como o texto está realmente estruturado.
2. Divisão recursiva de caracteres
Este método é um pouco mais inteligente. Divide o texto hierarquicamente com base em pistas como parágrafos, quebras de linha ou frases. Se uma secção for demasiado longa, divide-a recursivamente. O resultado é geralmente mais coerente, mas continua a ser inconsistente. Alguns documentos não têm uma estrutura clara ou têm secções de comprimento desigual, o que prejudica a precisão da recuperação. E, nalguns casos, esta abordagem ainda produz partes que excedem a janela de contexto do modelo.
Ambos os métodos enfrentam o mesmo compromisso: precisão vs. contexto. Os blocos mais pequenos melhoram a precisão da recuperação, mas perdem o contexto envolvente; os blocos maiores preservam o significado, mas correm o risco de acrescentar ruído irrelevante. Encontrar o equilíbrio correto é o que torna a fragmentação fundamental - e frustrante - na conceção de sistemas RAG.
Fragmentação semântica Max-Min: Incorporar primeiro, fragmentar depois
Em 2025, S.R. Bhat et al. publicaram Rethinking Chunk Size for Long-Document Retrieval: A Multi-Dataset Analysis. Uma das suas principais conclusões foi que não existe um único "melhor" tamanho de bloco para RAG. Os blocos pequenos (64-128 tokens) tendem a funcionar melhor para questões factuais ou de pesquisa, enquanto os blocos maiores (512-1024 tokens) ajudam em tarefas narrativas ou de raciocínio de alto nível. Por outras palavras, a fragmentação de tamanho fixo é sempre um compromisso.
Isto levanta uma questão natural: em vez de escolhermos um comprimento e esperarmos que seja o melhor, será que podemos dividir por significado e não por tamanho? O Max-Min Semantic Chunking é uma abordagem que encontrei que tenta fazer exatamente isso.
A ideia é simples: primeiro, inserir, depois, separar. Em vez de dividir o texto e depois incorporar os pedaços que caem, o algoritmo incorpora todas as frases à partida. Depois, utiliza as relações semânticas entre essas frases incorporadas para decidir para onde devem ir os limites.
Diagrama que mostra o fluxo de trabalho incorporar-primeiro-fragmento-segundo no Max-Min Semantic Chunking
Conceptualmente, o método trata o chunking como um problema de agrupamento limitado no espaço de incorporação. Percorre-se o documento por ordem, uma frase de cada vez. Para cada frase, o algoritmo compara a sua incorporação com as do bloco atual. Se a nova frase for semanticamente suficientemente próxima, junta-se ao bloco. Se estiver demasiado longe, o algoritmo inicia um novo bloco. A principal restrição é que os pedaços devem seguir a ordem original das frases - sem reordenação, sem agrupamento global.
O resultado é um conjunto de pedaços de comprimento variável que reflectem onde o significado do documento realmente muda, em vez de onde um contador de caracteres chega a zero.
Como funciona a estratégia de fragmentação semântica Max-Min
O Max-Min Semantic Chunking determina os limites dos blocos comparando a forma como as frases se relacionam umas com as outras no espaço vetorial de alta dimensão. Em vez de se basear em comprimentos fixos, analisa a forma como o significado se altera ao longo do documento. O processo pode ser dividido em seis etapas:
1. Incorporar todas as frases e iniciar um pedaço
O modelo de incorporação converte cada frase do documento numa incorporação vetorial. Processa as frases por ordem. Se as primeiras n-k frases formarem o atual bloco C, a frase seguinte (sₙ₋ₖ₊₁) tem de ser avaliada: deve juntar-se a C ou iniciar um novo bloco?
2. Medir a consistência do pedaço atual
Dentro do pedaço C, calcular a semelhança mínima de cosseno entre todos os encaixes de frases. Este valor reflecte a proximidade entre as frases dentro do bloco. Uma semelhança mínima mais baixa indica que as frases estão menos relacionadas, sugerindo que o bloco pode precisar de ser dividido.
3. Comparar a nova frase com o bloco
Em seguida, calcular a semelhança máxima de cosseno entre a nova frase e qualquer frase já existente em C. Este valor reflecte o grau de alinhamento semântico da nova frase com o bloco existente.
4. Decidir se se deve alargar o bloco ou iniciar um novo
Esta é a regra principal:
Se a semelhança máxima da nova frase com o bloco C for maior ou igual à semelhança mínima dentro de C, → A nova frase encaixa e permanece no bloco.
Caso contrário, → inicia-se um novo bloco.
Isto garante que cada bloco mantém a sua consistência semântica interna.
5. Ajustar os limiares à medida que o documento muda
Para otimizar a qualidade dos blocos, parâmetros como o tamanho dos blocos e os limiares de semelhança podem ser ajustados dinamicamente. Isto permite que o algoritmo se adapte a estruturas de documentos e densidades semânticas variáveis.
6. Tratar as primeiras frases
Quando um bloco contém apenas uma frase, o algoritmo trata a primeira comparação utilizando um limiar de semelhança fixo. Se a semelhança entre a frase 1 e a frase 2 for superior a esse limiar, estas formam um bloco. Caso contrário, dividem-se imediatamente.
Pontos fortes e limitações do Max-Min Semantic Chunking
O Max-Min Semantic Chunking melhora a forma como os sistemas RAG dividem o texto, utilizando o significado em vez do comprimento, mas não é uma solução milagrosa. Aqui está um olhar prático sobre o que ele faz bem e onde ele ainda fica aquém.
O que faz bem
O Max-Min Semantic Chunking melhora o chunking tradicional de três maneiras importantes:
1. Limites de chunk dinâmicos e orientados para o significado
Ao contrário das abordagens de tamanho fixo ou baseadas em estrutura, este método baseia-se na semelhança semântica para orientar a fragmentação. Compara a semelhança mínima dentro do pedaço atual (quão coeso é) com a semelhança máxima entre a nova frase e esse pedaço (quão bem se encaixa). Se esta última for superior, a frase junta-se ao bloco; caso contrário, inicia-se um novo bloco.
2. Afinação simples e prática dos parâmetros
O algoritmo depende apenas de três hiperparâmetros principais:
o tamanho máximo do bloco,
a semelhança mínima entre as duas primeiras frases, e
o limiar de semelhança para adicionar novas frases.
Estes parâmetros ajustam-se automaticamente ao contexto - pedaços maiores requerem limiares de semelhança mais rigorosos para manter a coerência.
3. Baixo custo de processamento
Uma vez que o pipeline RAG já calcula os embeddings de frases, o Max-Min Semantic Chunking não acrescenta um cálculo pesado. Tudo o que precisa é de um conjunto de verificações de semelhança de cosseno enquanto percorre as frases. Isto torna-o mais barato do que muitas técnicas de fragmentação semântica que requerem modelos extra ou agrupamento em várias fases.
O que ainda não consegue resolver
O Max-Min Semantic Chunking melhora os limites dos pedaços, mas não elimina todos os desafios da segmentação de documentos. Uma vez que o algoritmo processa as frases por ordem e apenas agrupa localmente, pode ainda falhar relações de longo alcance em documentos mais longos ou mais complexos.
Um problema comum é a fragmentação do contexto. Quando a informação importante está espalhada por diferentes partes de um documento, o algoritmo pode colocar essas partes em pedaços separados. Cada fragmento contém então apenas parte do significado.
Por exemplo, nas notas de lançamento do Milvus 2.4.13, como mostrado abaixo, um pedaço pode conter o identificador de versão enquanto outro contém a lista de recursos. Uma consulta como "Que novas funcionalidades foram introduzidas no Milvus 2.4.13?" depende de ambos. Se esses pormenores estiverem divididos em diferentes partes, o modelo de incorporação pode não os ligar, o que resulta numa recuperação mais fraca.
-
Exemplo que mostra a fragmentação do contexto nas Notas de Lançamento do Milvus 2.4.13, com o identificador da versão e a lista de funcionalidades em partes separadas
Esta fragmentação também afecta a fase de geração da LLM. Se a referência à versão estiver num pedaço e as descrições das caraterísticas estiverem noutro, o modelo recebe um contexto incompleto e não pode raciocinar de forma clara sobre a relação entre os dois.
Para atenuar estes casos, os sistemas utilizam frequentemente técnicas como janelas deslizantes, limites de blocos sobrepostos ou varrimentos multi-passos. Estas abordagens reintroduzem parte do contexto em falta, reduzem a fragmentação e ajudam a etapa de recuperação a reter informações relacionadas.
Conclusão
O Max-Min Semantic Chunking não é uma solução mágica para todos os problemas de RAG, mas dá-nos uma forma mais sensata de pensar sobre os limites dos blocos. Em vez de deixar que os limites de tokens decidam onde as ideias são cortadas, ele usa embeddings para detetar onde o significado realmente muda. Para muitos documentos do mundo real - APIs, especificações, logs, notas de lançamento, guias de solução de problemas - isso por si só pode elevar a qualidade da recuperação de forma notável.
O que eu gosto nessa abordagem é que ela se encaixa naturalmente nos pipelines RAG existentes. Se já incorporar frases ou parágrafos, o custo adicional é basicamente algumas verificações de semelhança de cosseno. Não são necessários modelos adicionais, agrupamentos complexos ou pré-processamento pesado. E quando funciona, os pedaços que produz parecem mais "humanos" - mais próximos da forma como agrupamos mentalmente a informação quando lemos.
Mas o método continua a ter pontos cegos. Só vê o significado localmente e não consegue voltar a ligar a informação que está intencionalmente separada. Continuam a ser necessárias janelas sobrepostas, digitalizações de várias passagens e outros truques de preservação do contexto, especialmente para documentos em que as referências e explicações se encontram distantes umas das outras.
Ainda assim, o Max-Min Semantic Chunking leva-nos na direção certa: longe do corte arbitrário de texto e em direção a condutas de recuperação que respeitam realmente a semântica. Se estiver a explorar formas de tornar o RAG mais fiável, vale a pena experimentar.
Tem dúvidas ou deseja aprofundar-se na melhoria do desempenho do RAG? Junte-se ao nosso Discord e conecte-se com engenheiros que estão criando e ajustando sistemas de recuperação reais todos os dias.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



