ktg-plugin-marketplace/plugins/ms-ai-architect/skills/ms-ai-engineering/references/rag-architecture/late-chunking-patterns.md
Kjell Tore Guttormsen 6a7632146e feat(ms-ai-architect): add plugin to open marketplace (v1.5.0 baseline)
Initial addition of ms-ai-architect plugin to the open-source marketplace.
Private content excluded: orchestrator/ (Linear tooling), docs/utredning/
(client investigation), generated test reports and PDF export script.
skill-gen tooling moved from orchestrator/ to scripts/skill-gen/.

Security scan: WARNING (risk 20/100) — no secrets, no injection found.
False positive fixed: added gitleaks:allow to Python variable reference
in output-validation-grounding-verification.md line 109.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 17:17:17 +02:00

10 KiB

Late Chunking Patterns — Chunking etter embedding

Last updated: 2026-02 Status: GA (Jina Embeddings), Preview (Azure Marketplace) Category: RAG Architecture & Semantic Search


Introduksjon

Late chunking er en teknikk der et helt dokument embeddes gjennom en transformer-modell før det deles opp i chunks. I tradisjonell (naiv) chunking embeddes hver chunk isolert, og mister dermed kontekst fra resten av dokumentet — pronomener som «den», «de» og «selskapet» blir semantisk tvetydige.

Ved late chunking genererer modellen token-level embeddings med full dokumentkontekst via self-attention, og deretter beregnes chunk-embeddings via mean pooling over de relevante token-posisjonene. Resultatet er at hvert segment «vet» hva resten av dokumentet inneholder.

Jina AI introduserte teknikken i 2024 (arXiv:2409.04701) og viste konsistent forbedring på BeIR-datasett: SciFact +1.9%, NFCorpus +27.8% relativ forbedring i nDCG@10. Effekten øker med dokumentlengde.

Azure-integrasjon er mulig via Jina Embeddings v3/v4 på Azure Marketplace. Azure OpenAI sine embedding-modeller (text-embedding-3) eksponerer per i dag ikke token-level embeddings, men overlapping chunk-strategier gir en tilnærming.


Kjernekomponenter

Naiv vs. Late Chunking

Aspekt Naiv chunking Late chunking
Rekkefølge Chunk → Embed Embed → Chunk
Kontekst-scope Kun innen chunk Hele dokumentet
Kryss-referanser Tapes Bevares via token-embeddings
Krav til modell Vilkårlig embedding-modell Long-context embedding (8K+ tokens)
Kostnad Lavere (kun chunks embeddes) Høyere (fullt dokument embeddes)

Long-context embedding-modeller

Modell Context Length Dimensjoner Azure-tilgjengelighet
text-embedding-3-large 8 191 tokens 3 072 GA via Azure OpenAI
text-embedding-3-small 8 191 tokens 1 536 GA via Azure OpenAI
jina-embeddings-v3 8 192 tokens 1 024 Azure Marketplace
jina-embeddings-v4 8 192 tokens 1 024 Azure Marketplace

8 000 tokens ≈ 10 standardsider — tilstrekkelig for de fleste enkeltdokumenter.

Benchmark-resultater (BeIR)

Datasett Naiv chunking (nDCG@10) Late chunking (nDCG@10) Forbedring
SciFact 64.20% 66.10% +1.9 pp
NFCorpus 23.46% 29.98% +6.52 pp (+27.8%)

Effekten er størst for lengre dokumenter med mange kryss-referanser.


Arkitekturmønstre

Mønster 1: Native late chunking med Jina Embeddings

Arkitektur: Data source → Indexer → Text extraction → Jina API (late_chunking=True) → Azure AI Search index

Implementering:

import requests

response = requests.post(
    "https://<jina-endpoint>.azurecontainer.io/v1/embeddings",
    headers={"Authorization": f"Bearer {api_key}"},
    json={
        "input": full_document_text,
        "model": "jina-embeddings-v3",
        "late_chunking": True,
        "chunk_size": 512
    }
)
chunk_embeddings = response.json()["data"]

Fordeler:

  • Ekte late chunking med full dokumentkontekst
  • Native API-parameter — ingen custom logikk
  • God multilingual-støtte (norsk inkludert)

Ulemper:

  • Krever Jina-modell (ikke Azure OpenAI natively)
  • Azure Marketplace deployment nødvendig
  • 8K token-grense per dokument

Anbefalt for: Narrative dokumenter med mange kryss-referanser (juridiske tekster, forskningsrapporter).

Mønster 2: Pseudo-late chunking med overlapping windows (Azure OpenAI)

Arkitektur: Data source → Indexer → Text Split (chunks med kontekst-vinduer) → Azure OpenAI Embedding → Index

Implementering:

from openai import AzureOpenAI

client = AzureOpenAI(...)
chunks = split_document(document, chunk_size=500, overlap=150)

for i, chunk in enumerate(chunks):
    # Include surrounding chunks for context
    context_window = chunks[max(0,i-1):min(len(chunks),i+2)]
    enriched_text = " ".join(context_window)

    embedding = client.embeddings.create(
        model="text-embedding-3-large",
        input=enriched_text[:8000]
    ).data[0].embedding

Fordeler:

  • Bruker Azure OpenAI (ingen tredjepartavhengighet)
  • Enkelt å implementere i eksisterende pipeline
  • 70-80% av late chunking-effekten til lavere kostnad

Ulemper:

  • Ikke ekte late chunking (kun nabochunk-kontekst)
  • Økt embedding-kostnad (3x chunk-størrelse)

Anbefalt for: Teams som vil ha bedre kontekst uten å introdusere Jina-avhengighet.

Mønster 3: Hybrid — Late chunking for langdokumenter, naiv for korte

Arkitektur: Router → [Kort dokument: naiv chunking] + [Langt dokument: late chunking] → Felles index

Beslutningsregel:

  • Dokument < 2 000 tokens → Naiv chunking (lite å vinne)
  • Dokument 2 000-8 000 tokens → Late chunking via Jina
  • Dokument > 8 000 tokens → Segmenter i 8K-vinduer, late chunking per segment

Anbefalt for: Produksjonsløsninger med heterogene dokumentsamlinger.


Beslutningsveiledning

Beslutningstabell

Dokumenttype Late chunking? Begrunnelse
Lange rapporter (>2K tokens) Ja Mange kryss-referanser
Narrative tekster (artikler) Ja Kontekst flyter mellom seksjoner
Korte, selvstendige docs Nei Ingen kryss-avhengigheter
Strukturerte data (tabeller, lister) Nei Rader/elementer er selvstendig
Juridiske dokumenter med referanser Ja Paragrafhenvisninger krever kontekst

Vanlige feil

Feil Konsekvens Løsning
Late chunking på korte docs (<1K tokens) Ingen gevinst, økt kostnad Bruk naiv chunking for korte docs
Ignorerer 8K token-grense Trunkering = tap av sluttkontekst Segmenter lange docs i 8K-vinduer
Blander embedding-modeller i samme indeks Inkompatible vektorrom Én modell per vector-felt
Hopper over eval etter bytte Vet ikke om det faktisk hjalp Mål nDCG@10, precision@5, recall@5

Integrasjon med Microsoft-stakken

Tjeneste Integrasjonspunkt
Azure AI Search Vector index med custom embedding via push API eller custom skill
Azure OpenAI text-embedding-3-large for pseudo-late chunking (mønster 2)
Jina Embeddings (Azure Marketplace) Native late chunking via Container Instance
Azure Functions Custom skill wrapper for Jina API
Azure AI Document Intelligence Tekst-ekstraksjon før late chunking
Semantic Kernel Custom embedding connector for Jina

Offentlig sektor (Norge)

Dataplassering

  • Jina Embeddings (Azure Marketplace): Deploy i Norway East — data forblir i Norge
  • Azure OpenAI Embeddings: Sweden Central — data i EU/EØS
  • Azure AI Search: Norway East — indeks i Norge

Relevante vurderinger

Krav Implikasjon
Schrems II Jina AI er tysk selskap — EU-data processing
GDPR Embedding-prosessen behandler dokumentinnhold — databehandleravtale
Sikkerhetsloven Gradert informasjon krever on-premises embedding

Kostnad og lisensiering

Kostnadssammenligning (1 000 dokumenter, 5 000 tokens snitt, 10 chunks/doc)

Tilnærming Embedding-kall Totalt tokens Kostnad (text-embedding-3-large)
Naiv chunking 10 000 ~500K ~$0.26
Late chunking (full doc + chunks) 11 000 ~5.5M ~$2.86
Pseudo-late chunking (3x window) 10 000 ~1.5M ~$0.78

Trade-off: 3-10x kostnadsøkning for 5-30% bedre retrieval-kvalitet (avhengig av dokumenttype).

Jina Embeddings på Azure

  • Deployment: Azure Container Instance (consumption-basert)
  • Prising: Per API-kall til Jina-endepunktet
  • Fordel: Ingen Azure OpenAI-kvote nødvendig

For arkitekten (Cosmo)

Spørsmål å stille kunden

  1. "Hvor lange er dokumentene?" — Late chunking gir mest verdi for docs >2 000 tokens
  2. "Er det mange kryss-referanser internt i dokumenter?" — Pronomen, forkortelser, «se avsnitt 3.2»
  3. "Er retrieval-kvaliteten god nok i dag?" — Mål baseline først
  4. "Aksepterer dere Jina AI som tredjepart?" — GDPR/vendor assessment
  5. "Hva er embedding-budsjettet?" — Late chunking er 3-10x dyrere

Fallgruver

  • Over-investering for korte docs: Late chunking gir tilnærmet null gevinst for docs <1K tokens
  • Vendor lock-in til Jina: Azure OpenAI kan få native late chunking-støtte — design for utbyttbarhet
  • Manglende evaluering: Uten nDCG/precision-metrics vet du ikke om det hjelper

Anbefalinger per modenhetsnivå

Modenhet Anbefaling
Prototyp Naiv chunking med 25% overlap. Mål baseline.
Pilot Pseudo-late chunking (mønster 2) med 3-chunk vinduer. Sammenlign metrics.
Produksjon Hybrid (mønster 3) — late chunking for lange docs, naiv for korte.
Enterprise Native late chunking via Jina + A/B-testing mot baseline.

Kilder og verifisering

Kilde Konfidens URL
Late Chunking in Long-Context Embedding Models (Jina AI) Verified jina.ai
arXiv:2409.04701 (forskningspaper) Verified arxiv.org
Jina Embeddings on Azure Marketplace Verified azuremarketplace.microsoft.com
Jina Embeddings v3 announcement Verified jina.ai
Azure OpenAI Embeddings Verified learn.microsoft.com
Late Chunking tutorial (DataCamp) Baseline datacamp.com