有了这个简单的小窍门,我的 GPT 评估器的性能提高了 1000%。
我希望我早就知道这个技巧。
我的所有文章都是免费阅读的。非会员可以通过点击此链接免费阅读。
去年夏天,我在Adobe Research实习。项目开始几周后,我陷入了困境。
我似乎永远无法让项目正常运作,因为缺少一个我无法解决的关键细节:
一个有效的评估器。
评估是根据一些预定义标准评估模型性能的过程*.*
在我的具体项目中,我需要评估LLM的输出是否忠实于上下文。
一种简单的方法是检查真实答案是否在模型的输出中。例如,如果真实答案是“Apple”,这可以是条件:
但这并不总是有效,就像我们上面看到的例子一样。输出包含“Apple”这个词,但整体答案并不忠实于上下文。
通常,在这种情况下,大多数人会转向一种方法:GPT-评估。
我之前写过另一篇博客,讨论了我为什么认为GPT-评估被高估,并且往往不起作用:
尽管如此,我意识到某种形式的GPT-评估可能是评估我的开放式生成所必需的。
FYI: 开放式生成只是LLM的长格式生成,而不是单个标记或单个单词的预测。
我没想到我的GPT-评估器在一开始就无法正常工作。
一个简单的解决方案(我的第一个方法)
首先,我尝试实现一个 GPT-evaluator,它的输入是上下文、问题和模型的输出。这是我输入到 GPT-4 的可视化表示。
实际上,我们使用上下文、问题和模型输出,将它们整合成一个提示,然后传递给 GPT-4,以判断模型是否忠实于上下文。
回想起来,我觉得自己很天真,因为我原本以为这会是如此简单。当我实际在大约 100 个示例输出上尝试时,我查看了模型给出的分数,发现它几乎总是给出了错误的分数。
评分如此糟糕,以至于我决定每次尝试实验时都手动评估所有 100 个示例。
不过,最终我们决定将示例数量增加到接近 1000,以确保我们的准确性评分在统计上是显著的。此时,对于每个实验进行手动评估几乎是不可能的。
我以为项目会到此为止,因为评估如此困难,现有的库(如 DeepEval)或方法都无法奏效。
但我接下来尝试的解决了这个问题。评估几乎达到了 100% 的准确率。
有效的方法
- 我创建了一个 few-shot prompt,并提供了多个示例。
- 我提供了 ground truth answer 以及提示。
少量示例提示
少量示例提示 在一些论文中被称为“上下文学习”(In-Context Learning,ICL)。以下是该术语的自解释定义:
少量示例提示 是一种在提示中使用少量示例的技术,指导LLM执行特定任务。
我给你一个简单的例子。
假设我们希望GPT输出1,如果给定的句子是“快乐”,而输出0如果句子是“悲伤”。这是一个有效的少量示例提示,可以输入到GPT-4中以实现该目标:
在我的具体案例中,我提供了大约10个上下文-问题-输出三元组,以及每个三元组的预期评估分数(0或1)。
在创建少量示例提示后,模型开始表现得更好。我本打算就此停止,但随后我意识到我错过了一些非常明显的东西。
提供真实答案
我使用的数据集也提供了真实答案。在我们之前展示的例子中,真实答案是“Apple”。
不知怎么的,在这样做之后,我最终得到了基本上所有输出分数都与我预期的一致。
虽然这看起来微不足道,但并非如此——一些不忠实的例子在输出中某处包含了真实答案的单词,但GPT仍然能够推断出措辞并不忠实。
结论建议
以下是我从这次探索中学到的一些事情:
- GPT评估有局限性。 它们确实并不总是有效,可能需要一些实验来找到适合您特定用例的方法。
- 少量示例提示帮助很大。 通过提供多个多样化的示例,可以显著提高GPT的最终评分的准确性。
- 提供尽可能多的信息。 您提供的信息越多,GPT进行评估就越容易。在我们的案例中,我们恰好有真实答案,这使得GPT的评估更为简单。
GPT在问题模糊的情况下表现往往较差。例如,要求它在1到10的范围内对段落的流畅性进行评分是困难的。它不知道如何同时考虑多个因素并给出一个在所见示例中一致的数字评分。
总体而言,将GPT视为一个人似乎是有帮助的。考虑一下它可能会发现哪些信息有用,以帮助它尽快找出分数。
致谢
所有图表均由我在 Canva 上制作。
关注我: LinkedIn | X (Twitter) | 网站