Skip to content

用跨度标注检测幻觉

如何在 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 的情形)。
  • 事实错误:与既定事实相矛盾。
  • 自相矛盾:与同一段输出中较早出现的内容相冲突。
  • 捏造的引用:所引文献并不存在,或与其声称的内容不符。

按照撰写标注指南的做法,把这套类别保持精简,并为每一类配上一行定义和一个示例。

质量方面的考量

  • 把原始材料提供给标注者;没有原文,"无支撑"就无从定义。
  • 边界规则很重要:跨度是覆盖整句话,还是只覆盖那个错误的从句?请一次性定好。
  • 忠实性在边界情形下带有主观性;要收集重叠标注并跟踪一致性

延伸阅读