Language Model Hallucination Evaluation with GraphEval
TL;DR · AI 摘要
GraphEval框架通过知识图谱和自然语言推理模型检测大语言模型幻觉,提供可解释的评估方法。
核心要点
- GraphEval使用知识图谱的三元组结构分析模型输出,通过NLI模型验证事实准确性。
- 亚马逊研究团队提出该框架,可定位幻觉具体位置而非仅提供单一评分。
- 代码示例展示如何用Python实现GraphEval的两个评估阶段。
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- GraphEval框架
- 核心方法
- 知识图谱构建
- NLI验证
- 应用场景
- LLM幻觉检测
- 技术优势
- 可解释性评估
金句 / Highlights
值得收藏与分享的关键句。
GraphEval通过知识图谱三元组(S, R, O)与上下文进行NLI验证,识别矛盾或中性三元组作为幻觉。
与传统单一评分指标不同,GraphEval能定位幻觉发生的具体知识三元组位置。
代码示例包含transformers、networkx等库的安装和知识图谱可视化实现。
使用 GraphEval 评估语言模型幻觉 - KDnuggets
publ: 2026年7月24日
- 博客热门文章
- 主题 AI 职业建议 计算机视觉 数据工程 数据科学 语言模型 机器学习 MLOps NLP 编程 Python SQL
- 数据集
- 活动
- 资源 快速参考指南 推荐 技术简报
- 广告
订阅电子报
#header end
/ad_wrapper
使用 GraphEval 评估语言模型幻觉
将 GraphEval 的核心原则和方法论阶段转化为模拟实践场景,更深入理解其在识别和应对大语言模型(LLM)幻觉中的价值和关键意义。
作者:
Iván Palomares Carrascosa
,KDnuggets 技术内容专家,2026年7月24日发布于
语言模型
<div class="addthis_native_toolbox"></div>
# 引言
幻觉是大型语言模型(LLMs)在生成响应时最著名的挑战之一。当模型生成在事实、逻辑或内容上错误、荒谬或完全虚构的响应时,通常是因为模型缺乏相关领域的内部知识,就会出现这种现象。
尽管近年来已出现许多解决模型幻觉问题的方案,但针对内部诊断的系统性评估框架研究相对较少。近期亚马逊研究人员的一项研究提出,可以通过知识图谱来分析和检测LLM中的幻觉。这项研究提出的框架名为 GraphEval。
本文将通过一个基于模拟的轻量级代码示例,以通俗易懂的方式阐释 GraphEval 的核心概念模块,你可以在自己的设备上轻松尝试该示例。
# GraphEval 简介
GraphEval 通过知识图谱识别和标记LLM生成内容中的幻觉。与提供单一评分指标(如准确性、置信度等)的传统评估方法不同,GraphEval 采用两阶段评估流程,强调可解释性,即明确指出幻觉发生的具体位置。
具体来说,GraphEval 包含两个阶段:
- 从生成的模型响应中构建知识图谱。该图谱由 (主体, 关系, 客体) 形式的语义三元组组成,其中主体和客体对应节点,关系对应连接节点的边。
- 通过自然语言推理(NLI)模型,将构建的知识图谱中的每个三元组与源上下文(真实知识库)进行比对。任何无法被NLI引擎推断出的三元组(因与上下文矛盾或无关)都会被标记为幻觉。
# 通过代码示例说明 GraphEval
在开始模拟 GraphEval 框架应用的代码之前,确保已安装必要的库:
!pip install -q transformers networkx matplotlib torch我们即将演示的代码示例旨在揭示 GraphEval 方法的工作原理,因此会用模拟的轻量级替代方案替换实际应用中计算成本较高的环节。
因此,我们将模拟一个包含事实信息的真实知识库(context)。在生产环境中,这些真实知识可能来自检索增强生成(RAG)系统的向量数据库中检索相关文档。为简化起见,此处我们直接创建一个真实上下文并存储在source_context中。
# 提供给LLM的真实上下文
source_context = (
"GraphEval是一个基于知识图谱(KG)结构表示信息的幻觉评估框架。"
"它作为预处理步骤,利用现成的自然语言推理(NLI)模型检测事实不一致性。"
)现在,假设以下内容是对用户提示"简洁解释GraphEval是什么"的原始LLM响应。为了启动评估过程的第一阶段,我们需要让辅助LLM从该响应中构建知识图谱。响应内容和用于获取知识图谱的后续提示如下所示:
# 我们想要评估的生成响应(包含幻觉)
llm_output = (
"GraphEval是一个使用知识图谱的评估框架。"
"它需要昂贵的高端企业级服务器集群才能运行。"
)
# 理论上会传递给本地/免费LLM(如Mistral-7B)的提示模板
KG_EXTRACTION_PROMPT = f"""
你是一位专业信息提取专家。请将以下文本的核心信息提取为知识图谱。
严格以Python元组列表格式返回结果:(主体, 关系, 客体)。
文本: {llm_output}
"""再次为简化流程并避免运行大型LLM的高昂计算成本,我们假设得到以下三元组:
# 模拟提取以避免本地运行大型LLM的高计算成本
extracted_triples = [
("GraphEval", "是", "评估框架"),
("GraphEval", "使用", "知识图谱"),
("GraphEval", "需要", "昂贵的企业级服务器集群")
]
print("提取的三元组:")
for t in extracted_triples:
print(t)输出:
提取的三元组:
('GraphEval', '是', '评估框架')
('GraphEval', '使用', '知识图谱')
('GraphEval', '需要', '昂贵的企业级服务器集群')我们故意添加了一个明显是幻觉的三元组(完全不需要企业级服务器集群!),以便演示后续的NLI过程如何通过知识图谱检测出这一问题。
今天就先进行到这一步模拟。现在进入下一阶段的实际操作:NLI过程。以下代码是利用GraphEval理念的关键部分。它使用来自Hugging Face的预训练NLI模型(该模型公开可用,无需访问令牌即可下载),将每个三元组与真实上下文进行对比。如果NLI模型对某个三元组未预测出蕴含关系,则将其标记为幻觉。
from transformers import pipeline
# 加载开源NLI模型
print("正在加载DeBERTa NLI模型..")
nli_evaluator = pipeline("text-classification", model="cross-encoder/nli-deberta-v3-small")
def evaluate_triple(context, triple):
subject, relation, obj = triple
hypothesis = f"{subject} {relation} {obj}"
# 检查上下文是否蕴含假设
result = nli_evaluator({"text": context, "text_pair": hypothesis})
# NLI模型通常输出: 'entailment', 'neutral', 或 'contradiction'
label = result['label'].lower()
# 在GraphEval中,任何非'entailment'的结果都会被标记为幻觉
is_hallucinated = label != 'entailment'
return is_hallucinated, label, hypothesis
# 运行评估流程
evaluation_results = []
print("\n--- GraphEval 结果 ---")
for t in extracted_triples:
is_hallucinated, nli_label, hypothesis = evaluate_triple(source_context, t)
evaluation_results.append((is_hallucinated, nli_label))
status = "🚨 幻觉" if is_hallucinated else "✅ 有效"
print(f"{status} | 三元组: {t} | NLI 输出: {nli_label}")--- GraphEval 结果 ---
✅ 有效 | 三元组: ('GraphEval', '是', '评估框架') | NLI 输出: entailment
✅ 有效 | 三元组: ('GraphEval', '使用', '知识图谱') | NLI 输出: entailment
🚨 幻觉 | 三元组: ('GraphEval', '需要', '昂贵的企业级服务器集群') | NLI 输出: neutral正如我们所预期的,知识图谱中的最后一个三元组被检测为幻觉。
最后用可视化方式呈现,我们也可以同时显示原始LLM响应的知识图谱和检测结果:
import networkx as nx
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
def visualize_grapheval(triples, eval_results):
G = nx.DiGraph()
edge_colors = []
for (triple, res) in zip(triples, eval_results):
sub, rel, obj = triple
is_hallucinated = res[0]
G.add_node(sub)
G.add_node(obj)
G.add_edge(sub, obj, label=rel)
# 根据NLI评估结果对边进行颜色编码
edge_colors.append('red' if is_hallucinated else 'green')
# 设置画布
plt.figure(figsize=(10, 6))
pos = nx.spring_layout(G, seed=42)
# 绘制节点
nx.draw_networkx_nodes(G, pos, node_color='lightblue', node_size=2500)
nx.draw_networkx_labels(G, pos, font_size=10, font_weight='bold')
# 绘制边和标签
nx.draw_networkx_edges(G, pos, edge_color=edge_colors, width=2.5, arrowsize=20)
edge_labels = nx.get_edge_attributes(G, 'label')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_color='black')
# 添加图例
green_patch = mpatches.Patch(color='green', label='有效(蕴含)')
red_patch = mpatches.Patch(color='red', label='幻觉(中性/矛盾)')
plt.legend(handles=[green_patch, red_patch], loc='lower right')
plt.title("GraphEval 幻觉图谱", fontsize=14, fontweight='bold')
plt.axis('off')
plt.tight_layout()
plt.show()
# 渲染知识图谱
visualize_grapheval(extracted_triples, evaluation_results)可视化结果:
结束语
GraphEval 是一种评估方法,旨在帮助检测和定位 LLM 输出中幻觉的根本原因。本文通过将关键原则和方法论阶段转化为模拟的实际场景,以更好地理解其有用性以及在生产系统中潜在实施的关键影响。
Iván Palomares Carrascosa 是 AI、机器学习、深度学习和 LLM 领域的领导者、作家、演讲者和顾问。他培训并指导他人如何在现实世界中利用 AI。
更多相关内容
- LLM 的防护措施:测量 AI “幻觉”与冗长性
- 最佳的 5 个开源 LLM 评估平台
- Python 中的惰性求值:探索生成器的力量
- 使用 Outlines 进行结构化语言模型生成
- 使用 Ollama 调整本地语言模型设置
- 掌握语言模型部署的 7 个步骤
<hr class="grey-line"><br> <div><h3>我们推荐的 5 门免费课程</h3><br> </div>
Mailchimp for WordPress v4.13.1 - https://wordpress.org/plugins/mailchimp-for-wp/
/ Mailchimp for WordPress 插件
您可以从这里开始编辑。
如果评论已关闭。
<= 上一篇
下一篇 =>
#content end
<script type="text/javascript">kda_sid_write(kda_sid_n);</script>
最新文章
- KDnuggets 每周回顾:2026 年 7 月 20 日周 Language Model 幻觉评估 GraphEval 代理 AI 的 5 个关键概念 每位工程师必须理解的 Agentic AI 入门 OmniVoice-Studio 初步使用 7 个最佳 Claude 代码替代方案用于 CLI 代理编码 Kaggle + Google 的免费 5 天代理 AI 课程
热门文章
- Kaggle + Google 的免费 5 天代理 AI 课程
- 最佳 5 个 MCP 服务器用于高性能代理开发
- 5 门免费课程从 AI 入门到实践
- 7 个最佳 Claude 代码替代方案用于 CLI 代理编码
- 使用 llama.cpp 和 Pi 本地运行 Mythos 增强编码模型
- KDnuggets 新闻,2026 年 1 月 25 日:ChatGPT 作为 Python 编程助手 • 使用 Python 和机器学习预测足球比赛胜者
- 停止使用 If-Else 链:在 Python 中改用注册表模式
- OmniVoice-Studio 入门
- 代理编程高性能设置 Claude Code 的初学者指南
- 10 个 YouTube 频道帮助您在 AI 领域保持领先
#content_wrapper end
© 2026
Guiding Tech Media
|
关于
联系
广告
隐私
服务条款
2026 年 7 月 24 日由 Iván Palomares Carrascosa 发布
blank
不,谢谢!
/.main_wrapper
<script defer type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=gpsaddthis"></script>
noptimize
/noptimize