ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepEval SummaC 文本一致性检测实战指南:5 分钟跑通忠实度评分与排错

DeepEval SummaC 文本一致性检测实战指南:5 分钟跑通忠实度评分与排错 DeepEval SummaC 文本一致性检测实战指南5 分钟跑通忠实度评分与排错【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval客服机器人把30 天退换答成14 天摘要把发布日期从 9 月写成 10 月——这类生成文本与原文对不上的问题靠人眼几乎盯不过来。DeepEval 里的 SummaC 模型专门干这件事给它一段原始参考文本和一段生成文本它基于零样本自然语言推理NLI打出一个 0–1 的一致性得分越接近 1 表示生成内容越贴合原文越低说明存在矛盾或事实偏差。读完这篇你能在本机跑通第一个一致性评分、看懂关键参数并把检测接进 RAG 和指标断言流程。工具定位SummaC 解决的是原文与生成文本是否一致这一类问题适合做 RAG 答案忠实度校验、摘要质量把关、文档改写回归。它不需要标注数据本地推理即可出分因此既能离线批量跑也能当作 CI 里的一道质量关卡。默认使用精度最高的vitc模型追求速度或省显存时可换轻量模型。安装与环境准备先装主包再补齐 SummaC 依赖的三个库基础安装不一定带全。pip install -U deepeval # SummaC 依赖 transformers / nltk / torch若缺失则单独补装 pip install transformers nltk torch装完用一行命令确认版本可正常导入python -c import deepeval; print(deepeval.__version__)预期输出一串版本号如3.x.x。若这一步报错多半是依赖没装齐或 Python 版本不满足先解决导入再往下走。最小可运行示例跑通第一个一致性得分先走一条最短闭环输入原文 生成文本输出一个一致性分。这里用Scorer.faithfulness_score这个便捷入口它的语义最清晰——target是原始参考文本prediction是待检测的生成文本返回值直接就是浮点分数。from deepeval.scorer import Scorer # target原始参考文本prediction待检测的生成文本 score Scorer.faithfulness_score( targetThe 2024 budget is $12 million; launch is scheduled for June., predictionThe budget is $12 million and the product launches in June., modelvitc, # 默认即 vitc显式写出便于替换 granularitysentence, # 按句切分适合短文本 ) print(f一致性得分: {score:.3f})预期输出接近1.0两句语义一致、无矛盾。把prediction改成...launches in September.再跑一次得分会明显下降——这正是它捕捉事实偏差的方式。核心参数速查表model_name / granularity / op 怎么选下面这张表覆盖SummaCModels与Scorer.faithfulness_score的关键入参。聚合类参数op1/op2/use_ent/use_con通过SummaCModels(...)的 **kwargs 传入。参数常见取值作用选型建议model_namevitc(默认)/vitc-base/mnli/mnli-base/snli-base/snli-large/anli决定用哪个 NLI 底模关键任务用vitc要快或省显存用snli-basegranularitysentence(默认)/paragraph/document/2sents/mixed文本切分粒度支持sentence-paragraph组合原文/生成文本分别取前后段短文本用sentence长文档用paragraphdevice不传 /cpu/cuda/mps运行设备不传会自动在 CUDA 可用时选 GPU否则 CPUop1max(默认)/mean/min每条原文分块在生成文本方向上的聚合想放大是否被覆盖信号用maxop2mean(默认)/max/min所有生成句的最终汇总任何一句出错就压低总分用min看整体用meanuse_ent/use_conTrue(默认) /False是否启用蕴含 / 矛盾信号一般保持默认image_load_cacheTrue(默认) /False是否读写 NLI 缓存重复评同一批文本时保持开启选型逻辑一句话先按任务重要性选model_name再按文本长短选granularity最后用op2决定多严格。精度优先就vitc sentence op2max要在 CI 里高频、低成本地跑就snli-base paragraph op2mean。场景实战RAG 忠实度、摘要校验、指标断言场景一 · RAG 答案批量一致性评分场景说明RAG 系统产出大量问题—上下文—答案需要离线给每条答案对上下文打一致性分筛出低分样本。批量调用时传入两个等长列表即可。from deepeval.models.summac_model import SummaCModels checker SummaCModels(model_namevitc, granularitysentence) references [Remote work starts Monday. Cost is $9 per seat., Support hours are 9am to 5pm, weekdays only.] summaries [Remote work starts Tuesday. Cost is $15 per seat., Support is available 24/7, including weekends.] # 两个列表等长返回 {scores: [...], images: [...]} out checker(summaries, references) for s, sc in zip(summaries, out[scores]): print(fscore{sc:.3f} {s[:40]}...)结果解读两条都会得到低分——第一条把Monday/$9说成Tuesday/$15第二条把工作日 9–5说成24/7都属于事实级矛盾得分越低说明偏差越重。注意这里的调用顺序是checker(生成列表, 原文列表)第一个参数当生成文本第二个当原文。场景二 · 会议纪要摘要校验场景说明会议记录被压成一段摘要后要确认关键数字与结论没被改错。长文档换用paragraph粒度更快底模换成snli-base更省显存。from deepeval.models.summac_model import SummaCModels # 长文档用 paragraph 粒度更快snli-base 比 vitc 省显存 checker SummaCModels(model_namesnli-base, granularityparagraph) notes (Q2 revenue reached $4.2M, up 12% year over year. Churn fell to 3% after the new onboarding flow.\n\n We will launch the mobile app in September and hire two engineers for the platform team.) summary (Q2 revenue was $4.2M, up 12%. Churn dropped to 3% after onboarding changes. The mobile app ships in October.) print(fscore: {checker(summary, notes)[score]:.3f})结果解读营收、流失率等数字一致但摘要把9 月上线写成了10 月上线这一处矛盾会拉低整体得分。得分不是越低越糟而是越低越该人工复核——它定位的是哪里可能不一致。场景三 · 用 FaithfulnessMetric 接入指标体系场景说明想把一致性校验纳入断言与回归而不是裸调模型可以换用框架内置的FaithfulnessMetricLLM 裁判型指标配合assert_test直接判定通过与否。from deepeval.test_case import LLMTestCase from deepeval.metrics import FaithfulnessMetric from deepeval import assert_test case LLMTestCase( inputWhat is our refund window?, actual_outputYou can request a refund within 14 days of purchase., retrieval_context[Refunds are available for 30 days after purchase.], ) # threshold0.5 为通过线include_reason 输出判定理由 metric FaithfulnessMetric(threshold0.5, include_reasonTrue) assert_test(test_casecase, metrics[metric]) print(ffaithfulness{metric.score:.2f} passed{metric.success})结果解读答案说14 天而上下文是30 天属于典型幻觉faithfulness会接近 0、passed为False。⚠️注意FaithfulnessMetric依赖大模型裁判需配置评估模型密钥默认走 OpenAI即设置OPENAI_API_KEY前两个场景的 SummaC 纯本地推理无需密钥。常见坑与排错现象运行报ModuleNotFoundError: No module named transformers或nltk/torch。原因SummaC 依赖这三个库基础安装不一定带全。解法执行pip install transformers nltk torchnltk首次分句还需语料按需python -m nltk.downloader punkt punkt_tab。现象报Unrecognized model name。原因model_name不在支持列表内。解法只用映射表里的键如vitc、vitc-base、mnli、mnli-base、snli-base、snli-large、anli见 相关源码 中的model_map。现象单条调用拿到的是dict而不是浮点数。原因SummaCModels单条返回{score: ..., image: ...}。解法取[score]或直接用Scorer.faithfulness_score它返回浮点。现象显存不足或速度很慢。原因vitc对应 albert-xlarge参数量大。解法换snli-base/vitc-base长文档改paragraph粒度必要时devicecpu。现象得分方向与直觉相反。原因checker(生成, 原文)的参数顺序与语义容易记混。解法统一走Scorer.faithfulness_score(target, prediction)语义清晰不易出错。生态与延伸DeepEval 不止于本地打分。登录 Confident AI 平台后deepeval login再deepeval test run 你的测试文件一致性等指标的评估结果可自动同步做可视化、历史对比、回归测试与生产监控仪表板如下框架侧integrations 目录 提供了 LangChain、LlamaIndex、CrewAI、PydanticAI 等的接入可以把埋点与评估挂到现有链路上指标侧除了 SummaC还有 40 内置指标FaithfulnessMetric等可直接与assert_test/evaluate组合。一个把 SummaC 之外的忠实度指标接进 Qdrant RAG 的完整示例见 RAG 评估示例更多用法可翻 文档目录 与 SummaC 源码。下一步建议先在 CI 里对一批历史样本用Snli-base paragraph跑基线记录低分样本作为回归集。把FaithfulnessMetric加进assert_test让一致性成为发布前的硬门槛。关键线上链路再切回vitc sentence op2max换取更严格的判定。小贴士把op2min与op2mean各跑一遍同一批数据对比分差能直观看出是否有单句硬伤——两者差距越大越说明存在局部而非整体的不一致。【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表