如果能对性能进行量化,就能更好地提高性能。有时,对提示词的修改在特定例子上表现更佳,但在普遍样本集上可能导致整体性能下降。因此,为确保改动对总体性能产生积极影响,需要设计一份全面的测试(也称为”评估”)。
有时,很难确定某个更改,比如新的指令或设计,是否真的改善了系统。观察几个案例可能会有所帮助,但在样本量较小的情况下,很难判断这是真正的改进还是偶然的幸运。可能某些更改在特定输入上提高了性能,但在其他情况下则降低了性能。
评估程序对于优化系统设计非常有用。有效的评估特点是:
- 能够代表现实世界中的使用情况(或至少具有多样性)
- 包含众多测试案例,从而拥有更强的统计能力(参见下表中的指南)
- 可以轻松自动化或重复
需要检测的差异 | 为了达到 95% 的置信度所需的样本量 |
---|---|
30% | 约 10 |
10% | 约 100 |
3% | 约 1,000 |
1% | 约 10,000 |
评估可以由计算机、人工或两者结合进行。计算机可以自动化那些具有客观标准的评估(例如,有唯一正确答案的问题),也可以用于某些主观或模糊标准的评估,在这种情况下,模型输出由其他模型查询进行评估。OpenAI Evals 是一个开源软件框架,提供创建自动化评估的工具。
当涉及到一系列可能的答案,且这些答案都被视为高质量时,基于模型的评估方法会非常有帮助,比如在回答需要较长解答的问题时。判断何时使用基于模型的评估和何时需要人工评估之间的界限并不明确,随着模型能力的提升,这一界限也在不断变化。我们鼓励大家进行实验,以探索基于模型的评估在特定应用场景下的实际效果。
根据标准答案的参考评估模型输出效果
假设我们已经知道对某个问题的正确回答应当涉及一组特定的已知事实。在这种情况下,我们可以通过模型查询来检查回答中包含了哪些必要的事实。
例如,可以使用以下系统提示:
系统 | 你将接收到用三个引号界定的文本,这些文本应当是对某个问题的回答。请检查答案中是否直接包含以下信息: – 尼尔·阿姆斯特朗是第一个踏上月球的人。- 尼尔·阿姆斯特朗首次登月的日期是 1969 年 7 月 21 日。 对每一点进行以下操作: 1 – 重申该信息点。2 – 提供一个与该信息点最接近的答案引用。3 – 考虑一个不熟悉该话题的人是否能从引用中直接理解该信息点。在做出判断之前,解释为什么能或不能。4 – 如果第 3 步的答案是肯定的,就写“是”,否则写“否”。 最后,统计“是”的答案数量,并以 {“count”: <插入数量>} 的形式呈现。 |
以下是一个示例输入,满足两个信息点:
系统 | <插入上述系统消息> |
用户 | “””尼尔·阿姆斯特朗因为成为第一个登上月球的人而闻名。这一历史性事件发生在 1969 年 7 月 21 日的阿波罗 11 号任务中。””” |
以下是一个示例输入,仅满足一个信息点:
系统 | <插入上述系统消息> |
用户 | “””尼尔·阿姆斯特朗在他走出登月舱时创造了历史,成为第一个登上月球的人。””” |
以下是一个示例输入,两个信息点都不满足:
系统 | <插入上述系统消息> |
用户 | “””在 1969 年那个炎热的夏天,阿波罗 11 号启程了一次宏大的旅行,其勇气如同传说中的英雄。当阿姆斯特朗迈出那历史性的一步时,他宣告了一个崭新世界的开端,他说的那句“一个小小的步伐”,铭记在了历史上。””” |
在这类型的基于模型的评估中,有多种可能的变体。其中一个变体是追踪候选答案与标准答案之间的相似性,以及候选答案是否与标准答案有任何矛盾。
系统 | 按照以下步骤回应用户输入。在执行每一步前,需要完整地重述每一步,例如“步骤 1: 分析……”。 步骤 1: 逐步分析提交的答案与专家答案相比,信息是不是完全不相关、完全相同、是部分包含、完全包含或部分重叠(即有交集但不是子集或超集)。 步骤 2: 逐步分析提交的答案是否与专家答案有任何矛盾。 步骤 3: 输出一个如下结构的 JSON 对象:{“type_of_overlap”: “disjoint”, “equal”, “subset”, “superset”, “overlapping” 中的一种,”contradiction”: true 或 false} |
以下是一个例子,展示了一个答案虽不完全符合标准,但并未与专家答案相矛盾的情况:
系统 | <插入上述系统消息> |
用户 | 问题:”””尼尔·阿姆斯特朗最著名的是什么事迹,具体日期是什么时候?以协调世界时为准。””” 提交答案:”””他不是在月球上走了一段吗?””” 专家答案:”””尼尔·阿姆斯特朗最著名的是成为第一个踏上月球的人。这一历史性事件发生在 1969 年 7 月 21 日。””” |
以下是另一个例子,显示了一个与专家答案直接相矛盾的答案:
系统 | <插入上述系统消息> |
用户 | 问题:”””尼尔·阿姆斯特朗最著名的是什么事迹,具体日期是什么时候?以协调世界时为准。””” 提交答案:”””1969 年 7 月 21 日,尼尔·阿姆斯特朗成为继巴兹·奥尔德林之后的第二个踏上月球的人。””” 专家答案:”””尼尔·阿姆斯特朗最著名的是成为第一个踏上月球的人。这一历史性事件发生在 1969 年 7 月 21 日。””” |
这是一个正确答案的例子,它提供了比必要更多的细节:
系统 | <插入上述系统消息> |
用户 | 问题:”””尼尔·阿姆斯特朗最为人所知的成就是什么,具体日期是哪一天?请以协调世界时(UTC)为准。””” 提交的答案:”””在 1969 年 7 月 21 日,大约凌晨 02:56(UTC 时间),尼尔·阿姆斯特朗成为了第一个登上月球的人,这一壮举标志着人类历史上的一个巨大飞跃。””” 专家答案:”””尼尔·阿姆斯特朗最为世人瞩目的壮举是成为第一个在月球上行走的人。这一划时代的事件发生于 1969 年 7 月 21 日。””” |