这篇题为《Quantifying Document Impact in RAG-LLMs》的论文由马里兰大学的研究团队于2026年发表,主要解决检索增强生成(RAG)系统中一个关键问题:如何量化每个检索到的文档对最终生成答案的实际贡献程度。RAG系统虽然能有效缓解大语言模型(LLM)的幻觉问题,但同时也带来了新的挑战——我们无法准确知道模型在生成答案时,到底更"依赖"哪个文档。
传统方法通常采用提示词工程(prompt engineering)让模型自报出处,但这种方法存在明显缺陷:模型可能会为了符合引用格式而简化推理过程,而且对提示词的遵循并不稳定。更严重的是,当存在恶意文档(poisoned documents)时,模型可能无法准确识别并报告其影响。
典型的RAG系统工作流程如下:
这个过程看似简单,但存在一个黑箱问题:我们不知道每个文档对最终答案的实际贡献有多大。当答案出现问题时,我们难以定位是哪个文档导致了错误;当需要优化检索系统时,我们缺乏细粒度的反馈指标。
当前主要有三种方法试图解决这个问题,但各有不足:
注意力机制分析:直接查看transformer模型的注意力权重。问题在于:
提示词工程:通过设计特殊提示让模型说明参考了哪些文档。问题在于:
基于梯度的归因方法:计算输入对输出的梯度影响。问题在于:
论文创新性地采用了部分信息分解(Partial Information Decomposition, PID)理论框架。PID是一种信息论方法,用于分析多个输入变量如何共同影响输出变量。它将信息分解为三种成分:
互信息(Mutual Information, I):单个来源与目标之间的关系
并集信息(Union Information, U):至少一个来源提供的总信息量
排除信息(Excluded Information, E):除了某一特定来源外,其他来源的信息总和
数学表达式为:
code复制E(Xi→Y|X1,...,Xk) = U(X1,...,Xk;Y) - I(Xi;Y)
I(Xi;Y) = H(Y) - H(Y|Xi)
U(X1,...,Xk;Y) = inf_Q I(Q;Y) s.t. ∀i Xi∈Q
传统PID需要计算概率分布,但在RAG场景中直接应用会遇到两个问题:
论文创新地采用语义熵(Semantic Entropy)替代传统香农熵,解决了这些问题:
解决语义冗余:传统熵基于token计算,而语义熵基于意思计算。例如"北京是中国的首都"和"中国的首都是北京"会被识别为相同语义。
应对无限样本空间:通过采样有限数量的响应(如10个),计算它们之间的语义相似度,将无限文本空间坍缩为有限"含义簇"。
语义熵计算流程:
基于PID和语义熵,论文定义了影响力评分(Influence Score, IS):
code复制IS_i = -E(Xi→Y|X1,...,Xk)
= I(Xi;Y) - U(X1,...,Xk;Y)
= H_S(Y|X1,...,Xk) - H_S(Y|Xi)
IS的直观解释:
添加负号是为了使IS与依赖程度呈正相关关系。
实验设置:
关键结果:

实验设置:
关键结果:

增强归因与事实核查:
偏见识别:
检索优化:
安全防御:
计算开销:
适用边界:
设置基础环境:
计算语义熵:
python复制def compute_semantic_entropy(responses, embedding_model):
# 获取所有响应的嵌入
embeddings = [embedding_model.encode(r) for r in responses]
# 计算余弦相似度矩阵
sim_matrix = cosine_similarity(embeddings)
# 归一化相似度(行归一化)
norm_sim = sim_matrix / sim_matrix.sum(axis=1, keepdims=True)
# 计算语义熵
entropy = -np.sum(norm_sim * np.log2(norm_sim + 1e-10), axis=1).mean()
return entropy
计算IS分数:
python复制def compute_influence_score(query, docs, llm, embedding_model, N=10):
# 计算H_S(Y|X1,...,Xk)
full_context = "\n".join(docs)
full_responses = [llm.generate(full_context, query) for _ in range(N)]
H_full = compute_semantic_entropy(full_responses, embedding_model)
IS_scores = []
for doc in docs:
# 计算H_S(Y|Xi)
single_responses = [llm.generate(doc, query) for _ in range(N)]
H_single = compute_semantic_entropy(single_responses, embedding_model)
# 计算IS_i
IS_i = H_full - H_single
IS_scores.append(IS_i)
return IS_scores
计算效率优化:
质量提升技巧:
应用场景选择:
这项研究为RAG系统的可解释性提供了重要工具,但仍有多个值得探索的方向:
动态IS计算:
多模态扩展:
训练阶段集成:
安全增强:
在实际应用中,我们可以根据具体需求对IS方法进行调整。例如,对于实时性要求高的场景,可以开发轻量级近似算法;对于关键任务系统,可以结合IS与其他解释性方法提供更全面的分析。