用跨度标注检测幻觉
如何在 Potato 中用跨度标注和 MQM 风格的错误标记,定位并标注模型输出中的幻觉与事实错误。
幻觉是指模型给出的、缺乏其输入或事实支撑却言之凿凿的陈述。捕捉幻觉最有用的方式,是把出错的具体词句标出来并说明它们错在哪里,这是一项针对模型输出的跨度标注任务。 跨度级别的标签远比一个笼统的"这个回答是错的"标记更具可操作性。
背景知识参见幻觉(人工智能)。
为什么要标跨度,而不是整段回答
给整段回答打一个"不忠实"的标签,只能告诉你确实有问题;而跨度能告诉你问题是什么、在哪里。跨度数据让你能够按类型测算错误率、发现规律,并构建有针对性的训练数据。这与机器翻译评测中标准的错误跨度框架 MQM(多维质量指标)如出一辙。
设置错误跨度标注
yaml
annotation_schemes:
- annotation_type: span
name: errors
description: "Highlight each problematic span and label the error type."
labels: [unsupported_claim, factual_error, contradiction, fabricated_citation]
label_colors:
unsupported_claim: "#f59e0b"
factual_error: "#ef4444"
contradiction: "#8b5cf6"
fabricated_citation: "#ec4899"
- annotation_type: radio
name: severity
description: "How serious is the worst error?"
labels: [Minor, Major, Critical]像 MQM 那样加入一个严重程度的判断,这样你就能把无关紧要的小失误和危险的捏造区别对待、赋予不同权重。
定义错误类型
- 无支撑的断言:不被原文所支持(即 RAG 的情形)。
- 事实错误:与既定事实相矛盾。
- 自相矛盾:与同一段输出中较早出现的内容相冲突。
- 捏造的引用:所引文献并不存在,或与其声称的内容不符。
按照撰写标注指南的做法,把这套类别保持精简,并为每一类配上一行定义和一个示例。
质量方面的考量
- 把原始材料提供给标注者;没有原文,"无支撑"就无从定义。
- 边界规则很重要:跨度是覆盖整句话,还是只覆盖那个错误的从句?请一次性定好。
- 忠实性在边界情形下带有主观性;要收集重叠标注并跟踪一致性。