返回首页

LLM 长上下文注意力问题

本文分析了 LLM 在长上下文中的注意力退化:Lost-in-the-Middle 效应、幻觉增加和架构原因。描述了 RAG 系统的分块、重排序和验证技术。2025-2026 基准测试确认即使在 1M 令牌模型中也存在问题。

LLM 在上下文中间丢失事实:RAG 的修复方案
Advertisement 728x90

大语言模型为何在长上下文中遗忘事实:注意力机制与幻觉现象解析

基于Transformer架构的大语言模型在长上下文中存在注意力衰减问题:首因效应和近因效应会削弱对文本中间部分的信息处理。这导致“迷失在中间”效应、幻觉现象增加,即使拥有百万级token的上下文窗口也会出现准确性下降。本文探讨这一问题的成因及生产环境中RAG系统的应对技术。

长序列自注意力机制的问题

Transformer的自注意力机制具有二次复杂度O(n²),限制了上下文长度。FlashAttention、RoPE和ALiBi等优化技术虽然降低了计算成本,但引入了位置偏差:

  • 首因偏差:上下文开头部分记忆最牢固
  • 近因偏差:上下文结尾部分也容易访问
  • 中间迷失:由于因果掩码和位置编码衰减,中间位置的token获得减弱的注意力

扩大上下文窗口并不能消除偏差,反而会扩展中间的“盲区”。模型不会承认信息缺失,而是生成看似合理但实际错误的事实。

Google AdInline article slot

“迷失在中间”效应的数据表现

Nelson Liu(斯坦福大学,2023年)的研究显示准确率呈U型曲线:在20-30个文档的中间部分,信息准确率下降30-50%。2025-2026年,MIT等实验室证实这一效应在拥有100万+token的模型中依然存在。

基准测试不断演进:

  • 大海捞针测试:在长文本中寻找特定事实的测试
  • U-NIAH(2026):比较长上下文LLM与RAG系统
  • NeedleBench、BABILong、LooGLE:测试从分散部分进行综合推理的能力

Vectara幻觉排行榜(HHEM-2.3,2026年)记录显示,在32K+token时幻觉现象显著增加:模型会连接片段A和C,忽略B,并编造缺失的内容。

Google AdInline article slot

长上下文中幻觉现象的机制

OpenAI(2025年,《当更多变成更少》)指出:更大的上下文增加了推理能力但降低了质量。模型会用“看似合理”的连接填补空白。MIT(2025年)补充道:语言自信度与幻觉现象成正比增长——事实越少,虚构内容越令人信服。

形成链条:长上下文 → 噪声 → 注意力模糊 → 事实缺失 → RLHF训练要求“始终回应” → 创造性幻觉

RAG系统的分块策略

有效的RAG始于合理的文档分割。避免使用默认分割器——采用针对性方法:

Google AdInline article slot
  • 递归字符文本分割器(LangChain):400-512个token的块,重叠10-20%。适用于结构化文本
  • 语义分块器:基于嵌入向量分割,复杂数据准确率提升15-20%
  • 分层节点解析器(LlamaIndex):2048 → 512 → 128 token的分层结构,用于分阶段检索

向模型传递3-5个相关块,而非10万个token的垃圾信息。

重排序分块实现示例:

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

# 递归+重叠
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=512,
    chunk_overlap=100,
    separators=["\n\n", "\n", ". ", " ", ""]
)

# 语义分割器
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2")
semantic_splitter = SemanticChunker(embeddings)

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

检索20个块,重排序器保留前5个——减少噪声。

验证与智能体工作流

检索后添加验证层:

  • 自一致性/CoVe:生成答案,然后提出问题进行自我检查
  • 批评智能体:独立的LLM根据上下文验证答案
  • 符号验证:知识图谱或Pydantic验证日期、数字、名称

智能体工作流(2026年标准):

  • 规划器:分解任务
  • 检索智能体:搜索子任务
  • 执行器:生成内容
  • 验证器:迭代检查

最小验证循环:

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

def verify_answer(answer: str, context: str) -> str:
    prompt = (
        "检查答案是否与上下文匹配。"
        "回答YES/NO + 解释。\n"
        f"上下文: {context}\n"
        f"答案: {answer}"
    )
    return llm.invoke(prompt)

tools = [Tool(name="验证器", func=verify_answer, description="检查答案是否与上下文匹配")]
agent = create_react_agent(llm, tools, prompt=react_prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, max_iterations=5)

高风险领域的混合神经符号方法

在法律、医疗、金融领域,结合LLM + 知识图谱 + 符号验证器。可减少60-80%的幻觉现象(2025年研究),但需要相应基础设施。

关键要点:

  • 长上下文因注意力偏差加剧“迷失在中间”效应和幻觉现象
  • 分块(递归/语义)+ 重排序——占RAG成功因素的70%
  • 验证层(CoVe、批评智能体)在生产环境中必不可少
  • 智能体工作流在声誉风险场景中物有所值
  • 受监管领域采用混合方法

— Editorial Team

Advertisement 728x90

继续阅读