Proč LLM zapomínají fakta v dlouhém kontextu: analýza pozornosti a halucinací
LLM modely založené na transformerech trpí degradací pozornosti v dlouhých kontextech: primacy a recency bias oslabují zpracování středu textu. To vede k efektu Lost-in-the-Middle, nárůstu halucinací a ztrátě přesnosti i při oknech o milionu tokenů. V článku najdete příčiny problému a techniky pro produkční RAG systémy.
Problémy self-attention na dlouhých sekvencích
Self-attention v transformerech má kvadratickou složitost O(n²), což omezuje délku kontextu. Optimalizace jako FlashAttention, RoPE a ALiBi snižují náklady, ale zavádějí pozicní posuny:
- Primacy bias: začátek kontextu se pamatuje nejlépe.
- Recency bias: konec kontextu je také dostupný.
- Střed se ztrácí: tokeny uprostřed získávají oslabenou pozornost kvůli causal masking a útlumu v positional embeddings.
Zvětšení okna kontextu neodstraňuje bias, ale rozšiřuje 'mrtvou zónu' uprostřed. Model neuznává mezery, ale generuje věrohodné, leč nepravdivé informace.
Efekt Lost-in-the-Middle v číslech
Výzkum Nelsona Liua (Stanford, 2023) ukázal U-křivku přesnosti: pokles o 30–50 % pro informace uprostřed 20–30 dokumentů. V letech 2025–2026 MIT a další laboratoře potvrdily přetrvávání efektu u modelů s 1M+ tokeny.
Benchmarky se vyvíjely:
- Needle-in-a-Haystack: test hledání faktu v dlouhém textu.
- U-NIAH (2026): porovnání long-context LLM a RAG.
- NeedleBench, BABILong, LooGLE: ověření syntézy z rozptýlených částí.
Vectara Hallucination Leaderboard (HHEM-2.3, 2026) zaznamenává nárůst halucinací na 32K+ tokenech: model spojuje fragmenty A a C, ignoruje B a vymýšlí chybějící.
Mechanismus halucinací v dlouhém kontextu
OpenAI (2025, 'When More Becomes Less') poznamenal: větší kontext zvyšuje inferenci, ale snižuje kvalitu. Model vyplňuje mezery 'věrohodnými' souvislostmi. MIT (2025) dodal: jistota jazyka roste úměrně halucinacím – čím méně faktů, tím přesvědčivější výmysl.
Řetězec: dlouhý kontext → šum → rozostření pozornosti → absence faktu → RLHF trénink na 'vždy odpovídat' → kreativní halucinace.
Chunking strategie pro RAG
Efektivní RAG začíná správným rozdělením dokumentů. Vyhněte se výchozím splitterům – použijte cílené přístupy:
- RecursiveCharacterTextSplitter (LangChain): chunky 400–512 tokenů, overlap 10–20 %. Spolehlivý pro strukturované texty.
- SemanticChunker: rozdělení podle embeddingů, +15–20 % přesnosti na složitých datech.
- HierarchicalNodeParser (LlamaIndex): hierarchie 2048 → 512 → 128 tokenů pro postupné vyhledávání.
Předávejte modelu 3–5 relevantních chunků místo 100K tokenů odpadu.
Příklad implementace chunkingu s rerankingem:
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})
)
Vytáhneme 20 chunků, reranker ponechá top-5 – sníží šum.
Verification a agentic workflows
Po retrieval přidejte vrstvy ověření:
- Self-Consistency / CoVe: generujte odpověď, poté otázky pro samokontrolu.
- Critic Agent: samostatná LLM validuje odpověď na kontext.
- Symbolic verification: Knowledge Graph nebo Pydantic pro data, čísla, jména.
Agentic workflow (standard 2026):
- Planner: rozděluje úkol.
- Retriever Agent: vyhledávání podle podúkolů.
- Executor: generování.
- Verifier: iterativní kontrola.
Minimální verification loop:
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import Tool
def verify_answer(answer: str, context: str) -> str:
prompt = (
"Zkontroluj, zda odpověď odpovídá kontextu. "
"Odpověz YES/NO + vysvětlení.\n"
f"Context: {context}\n"
f"Answer: {answer}"
)
return llm.invoke(prompt)
tools = [Tool(name="Verifier", func=verify_answer, description="Kontroluje odpověď na shodu s kontextem")]
agent = create_react_agent(llm, tools, prompt=react_prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, max_iterations=5)
Hybrid neuro-symbolic pro high-stakes domény
V právu, medicíně, financích kombinujte LLM + Knowledge Graph + symbolic verifier. Snížení halucinací o 60–80 % (výzkumy 2025), ale vyžaduje infrastrukturu.
Co je důležité:
- Dlouhý kontext zesiluje Lost-in-the-Middle a halucinace kvůli attention bias.
- Chunking (recursive/semantic) + reranking – 70 % úspěchu RAG.
- Verification layers (CoVe, critic agents) jsou v produkci povinné.
- Agentic workflows se vyplatí při rizicích reputace.
- Hybridní přístup pro regulované domény.
— Editorial Team
Zatím žádné komentáře.