Late Chunking
O agrupamento tardio gera incorporações de um documento inteiro com um modelo de contexto longo e, em seguida, agrega os vetores dos tokens por bloco, preservando o contexto do documento em cada incorporação de bloco.
O chunking tardio é uma forma de gerar incorporações de chunks de documentos na qual um modelo de incorporação com contexto longo codifica primeiro o documento inteiro. Depois, os vetores de tokens resultantes são separados nos limites dos chunks e agrupados pela média em uma incorporação por chunk. Todos os tokens já processaram o documento inteiro quando são agrupados; assim, um chunk que diz "ele precisa ser substituído" ainda mantém a referência da palavra "ele". Pesquisadores da Jina AI apresentaram o método no artigo de 2024 Chunking tardio: incorporações contextuais de chunks usando modelos de incorporação com contexto longo, que o aplica a modelos de incorporação existentes sem treinamento adicional.
Por que as incorporações de chunks perdem o contexto#
Os sistemas de geração aumentada por recuperação (RAG) dividem documentos em blocos para que cada vetor represente um trecho bem delimitado e o texto recuperado caiba na janela de contexto de um modelo. A segmentação convencional gera uma representação vetorial para cada bloco isoladamente, o que rompe todas as conexões com o texto anterior. Considere duas frases consecutivas de um manual: "A bomba XR-12 faz o líquido de arrefecimento circular pela linha de prensagem." e "Ela precisa ser substituída após 10.000 horas de operação." Quando vetorizada isoladamente, a segunda frase nunca menciona a bomba XR-12; por isso, uma pergunta sobre a substituição dessa bomba apresenta baixa correspondência com a segunda frase na busca vetorial, embora a segunda frase contenha a resposta.
Como funciona o late chunking#
O documento é tokenizado por completo, e o intervalo de tokens de cada bloco é registrado; os limites podem ser definidos por qualquer método de segmentação, inclusive pela divisão em blocos de tamanho fixo ou pela segmentação semântica. Toda a sequência de tokens passa então pelo modelo de embeddings Transformer, no qual a autoatenção mistura as informações de cada token com as de todos os outros. Por fim, calcula-se a média dos vetores dos tokens em cada intervalo para obter a representação vetorial daquele bloco. Documentos que ultrapassam o limite de entrada do modelo — de 8.192 tokens nos modelos jina-embeddings-v2 da Jina, por exemplo — são codificados em macroblocos sobrepostos, técnica que o artigo chama de segmentação tardia para contextos longos.
O exemplo abaixo incorpora a frase sobre a bomba das duas formas com um modelo pequeno de Sentence Transformers e compara cada versão com a pergunta:
import torch
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
chunks = [
"The XR-12 pump circulates coolant through the press line.",
"It must be replaced after 10,000 operating hours.",
]
query = model.encode("When should the XR-12 pump be replaced?", convert_to_tensor=True)
# Chunking convencional: incorporar o segundo chunk isoladamente
naive = model.encode(chunks[1], convert_to_tensor=True)
# Chunking tardio: codificar o documento inteiro e depois agrupar pela média apenas os tokens do segundo chunk
tokens = model.encode(" ".join(chunks), output_value="token_embeddings")
start = len(model.tokenizer(chunks[0])["input_ids"]) - 1 # tokens de [CLS] + chunk 1
late = tokens[start:-1].mean(dim=0) # remover o [SEP] final
for name, emb in [("naive", naive), ("late", late)]:
print(name, round(torch.cosine_similarity(query, emb, dim=0).item(), 3))O chunk incorporado de forma independente obtém 0,382 em relação à pergunta, enquanto a mesma frase processada com chunking tardio obtém 0,62, porque seus tokens prestaram atenção a "A bomba XR-12" antes do agrupamento.
A detecção de objetos passou pela mesma mudança em 2015. O R-CNN executava uma rede convolucional separadamente em cada proposta de região recortada; o Fast R-CNN a executava uma vez na imagem inteira e agrupava cada região a partir dos mapas de características compartilhados, o que tornou a detecção durante o teste 213 vezes mais rápida com um backbone VGG16. O Ultralytics YOLO26 também executa seu backbone uma vez na imagem inteira e prevê todas as caixas a partir dessas características compartilhadas, sem calcular nenhuma detecção a partir de um recorte isolado.
Chunking tardio e métodos relacionados#
- Recuperação contextual: Acrescenta a cada chunk uma nota escrita por um LLM antes da indexação. Custa uma chamada de LLM por chunk e também ajuda na busca por palavras-chave, já que o contexto acrescentado é texto.
- Interação tardia do ColBERT: Mantém um vetor por token e os compara com a consulta no momento da busca. O chunking tardio agrupa os tokens em um único vetor por chunk, que pode ser usado em qualquer índice vetorial padrão.
- Sobreposição de chunks: Repete algumas frases em chunks vizinhos. Preserva apenas o contexto próximo e aumenta o índice.
- Modelos de reordenação: Reordenam os candidatos recuperados com um modelo mais potente após a primeira busca e funcionam bem em conjunto com o chunking tardio.
Quando o chunking tardio ajuda#
Os maiores ganhos ocorrem quando os chunks dependem do texto anterior, como no caso de pronomes, abreviações definidas uma única vez e narrativas, como relatórios e manuais. Os ganhos são menores com registros curtos e independentes, como títulos de produtos. O método exige um modelo de incorporação que agrupe tokens pela média e permita acessar as saídas no nível dos tokens, e é preciso codificar o documento inteiro novamente sempre que qualquer parte dele mudar. Os vetores de chunks gerados com chunking tardio podem ser usados sem alterações em um banco de dados vetorial comum. A API de incorporação da Jina disponibiliza o método como parâmetro late_chunking, que incorpora uma lista de chunks consecutivos como um único documento.










