Powrót do strony głównej

Problemy attention LLM w długim kontekście

Artykuł analizuje degradację uwagi w LLM na długich kontekstach: efekt Lost-in-the-Middle, wzrost halucynacji i przyczyny architektoniczne. Opisano techniki chunking, reranking i verification dla systemów RAG. Benchmarki 2025-2026 potwierdzają problemy nawet u modeli z 1M tokenów.

LLM tracą fakty w środku kontekstu: poprawki dla RAG
Advertisement 728x90

Dlaczego LLM zapominają fakty w długim kontekście: analiza attention i halucynacji

Modele LLM oparte na architekturze transformer cierpią na degradację uwagi w długich kontekstach: bias primacy i recency osłabiają przetwarzanie środkowej części tekstu. Prowadzi to do efektu Lost-in-the-Middle, wzrostu halucynacji i utraty dokładności nawet przy oknach obejmujących milion tokenów. W artykule – przyczyny problemu oraz techniki dla systemów RAG w środowisku produkcyjnym.

Problemy self-attention w długich sekwencjach

Self-attention w transformerach ma złożoność kwadratową O(n²), co ogranicza długość kontekstu. Optymalizacje takie jak FlashAttention, RoPE i ALiBi redukują koszty, ale wprowadzają przesunięcia pozycyjne:

  • Bias primacy: początek kontekstu jest zapamiętywany najlepiej.
  • Bias recency: koniec kontekstu również pozostaje dostępny.
  • Środek się gubi: tokeny w centrum otrzymują osłabioną uwagę z powodu causal masking i rozpadu w positional embeddings.

Zwiększenie okna kontekstu nie eliminuje biasu, a rozszerza 'martwą strefę' w środku. Model nie przyznaje się do luk, lecz generuje wiarygodne, ale fałszywe fakty.

Google AdInline article slot

Efekt Lost-in-the-Middle w liczbach

Badanie Nelsona Liu (Stanford, 2023) wykazało krzywą dokładności w kształcie litery U: spadek o 30–50% dla informacji znajdującej się w środku 20–30 dokumentów. W latach 2025–2026 MIT i inne laboratoria potwierdziły utrzymywanie się efektu u modeli z 1M+ tokenów.

Benchmarki ewoluowały:

  • Needle-in-a-Haystack: test wyszukiwania faktu w długim tekście.
  • U-NIAH (2026): porównanie long-context LLM i RAG.
  • NeedleBench, BABILong, LooGLE: weryfikacja syntezy z rozproszonych części.

Vectara Hallucination Leaderboard (HHEM-2.3, 2026) odnotowuje wzrost halucynacji przy 32K+ tokenach: model łączy fragmenty A i C, ignorując B, i wymyśla brakujące elementy.

Google AdInline article slot

Mechanizm halucynacji w długim kontekście

OpenAI (2025, 'When More Becomes Less') zauważył: większy kontekst zwiększa inferencję, ale obniża jakość. Model wypełnia luki 'wiarygodnymi' powiązaniami. MIT (2025) dodał: pewność języka rośnie proporcjonalnie do halucynacji – im mniej faktów, tym bardziej przekonujący jest wymysł.

Łańcuch przyczynowy: długi kontekst → szum → rozmycie uwagi → brak faktu → trening RLHF na 'zawsze odpowiadaj' → kreatywna halucynacja.

Strategie chunking dla RAG

Skuteczny RAG zaczyna się od właściwego podziału dokumentów. Unikaj domyślnych splitterów – stosuj ukierunkowane podejścia:

Google AdInline article slot
  • RecursiveCharacterTextSplitter (LangChain): chunki 400–512 tokenów, overlap 10–20%. Solidny dla tekstów ustrukturyzowanych.
  • SemanticChunker: podział na podstawie embeddingów, +15–20% dokładności na złożonych danych.
  • HierarchicalNodeParser (LlamaIndex): hierarchia 2048 → 512 → 128 tokenów dla stopniowego wyszukiwania.

Przekazuj modelowi 3–5 relewantnych chunków zamiast 100K tokenów śmieci.

Przykład implementacji chunkingu z rerankingiem:

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS

# Recursive + overlap
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=512,
    chunk_overlap=100,
    separators=["\n\n", "\n", ". ", " ", ""]
)

# Semantic splitter
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
semantic_splitter = SemanticChunker(embeddings)

# Reranking
compressor = CrossEncoderReranker(model_name="BAAI/bge-reranker-large")
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=vectorstore.as_retriever(search_kwargs={"k": 20})
)

Pobieramy 20 chunków, reranker zostawia top-5 – redukuje szum.

Weryfikacja i agentic workflows

Po retrieval dodaj warstwy sprawdzające:

  • Self-Consistency / CoVe: generuj odpowiedź, następnie pytania do samoweryfikacji.
  • Critic Agent: osobna LLM waliduje odpowiedź względem kontekstu.
  • Symbolic verification: Knowledge Graph lub Pydantic dla dat, liczb, nazw.

Agentic workflow (standard 2026):

  • Planner: dzieli zadanie.
  • Retriever Agent: wyszukiwanie według podzadań.
  • Executor: generacja.
  • Verifier: iteracyjna weryfikacja.

Minimalny verification loop:

from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool

def verify_answer(answer: str, context: str) -> str:
    prompt = (
        "Sprawdź, czy odpowiedź odpowiada kontekstowi. "
        "Odpowiedz YES/NO + wyjaśnienie.\n"
        f"Context: {context}\n"
        f"Answer: {answer}"
    )
    return llm.invoke(prompt)

tools = [Tool(name="Verifier", func=verify_answer, description="Sprawdza zgodność odpowiedzi z kontekstem")]
agent = create_react_agent(llm, tools, prompt=react_prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, max_iterations=5)

Hybrydowe neuro-symbolic dla high-stakes domen

W prawoznawstwie, medycynie, finansach łącz LLM + Knowledge Graph + symbolic verifier. Redukcja halucynacji o 60–80% (badania 2025), ale wymaga infrastruktury.

Co jest ważne:

  • Długi kontekst wzmacnia Lost-in-the-Middle i halucynacje z powodu biasu attention.
  • Chunking (recursive/semantic) + reranking – 70% sukcesu RAG.
  • Warstwy weryfikacji (CoVe, critic agents) są obowiązkowe w produkcji.
  • Agentic workflows opłacają się przy ryzyku reputacyjnym.
  • Podejście hybrydowe dla regulowanych domen.

— Editorial Team

Advertisement 728x90

Czytaj dalej