评估的黄金标准(Gold Standard)是收集真实的用户反馈。即:如果想要深入了解应用程序的质量与实用性,最佳方法是收集真实用户的反馈。除此之外,其它的评估方法都是从侧面反映出模型的质量水平。收集用户反馈的具体策略可以有不同的形式,例如:
通过以上两种规则方式,随着越来越多的用户开始使用该模型应用程序,就会收集到很多用户关于该模型的使用数据,根据该数据来分析模型的输出效果,从而不断地改进模型效果。但该方法也存在一定滞后性。因为只有当模型上线对客且用户使用一段时间之后,这些数据才能够收集到。为此,在模型应用上线对客之前我们还需要对其进行评估测试,这就需要下面的这几个方法。
二、人工评估
上线对客之前,评估大模型应用输出水平的最佳选择是:让标注人员在预部署阶段评估大模型应用的输出。典型的评估方法是构建测试数据集,根据测试数据集进行模型评估。
让我们看一个简单的问答案例。即:根据用户评论,来回答有关华为耳机产品相关问题,如下所示。目标是对大模型输出结果进行评级。
❝ 用户评论:华为耳机pro是一款特别优秀的耳机,音质特别好,可以听到音乐的每个细节。
问题:为什么华为耳机pro是一款好耳机?
❞
这里假如模型给出的响应结果是:
❝ 因为音频体验超级棒。
❞
当遇到此类情况时,有多种方法可以对此响应进行评估,例如:案例对比、评分、A/B测试等,具体如下。
2.1 案例对比
评估人员将模型的输出结果与理想案例结果进行对比。拿上面的示例来说,理想的结果可能是:因为音频体验无与伦比。基于该结果标注人员对此做出判断。但这种方法需要事先构建基本事实。
鉴于没有两个用例完全相同,这意味着必须为每个提示和模型应用构建基本事实案例。 此外,基本事实的质量直接影响评估结果——如果构建不正确,可能会产生误导性的结果。
2.2 评分
评估人员对模型输出结果进行打分来评估结果的好坏(例如0到10之间的评级),由于该种情况没有基本事实案例参考,所以评估人员需要自行对输出质量做出判断。
评估分数可以是单个分数,也可以是一组分数,可以是宽泛的,也可以是细粒度的,具体情况具体分析。例如,创意写作任务可能需要对不同的输出特征进行更细粒度的评分,例如流畅性、趣味性和简洁性。
评估标准可以是按等级划分的分数,也可以是对标志的检查。例如,摘要任务可能需要检查输出的一致性,并且不会生成实际文档中不存在的内容。特定任务可能需要检查特定的规则,例如俳句中的音节数。
2.3 A/B测试
根据模型应用获得一对模型输出结果,并要求评估人员评估出最好的答案。这对于比较不同时间点、不同配置参数(prompt、超参数等)的模型质量非常有用。例如,让评估人员比较下面两个模型输出结果的最优答案:
❝ 1、因为音频体验超级棒。
2、因为麦克风品质特别好。
❞
对于我们来说,上面两个回答最好的应该是第一个(因为音频体验超级棒),因为它的回答最准确,第二个回答(因为麦克风品质特别好)主要讲述了麦克风的质量而不是耳机的音质。
「人类评估的局限性」 它无法有效地扩展。所需要的时间成本明显高于自动化方法。另一个局限性是人类评估是主观的——一个评估者的判断可能与另一个评估者的判断不同。上面的例子相对简单,但在更具挑战性的任务中,对于响应结果的好坏,会有更多的模糊性和解释空间。许多因素都会影响评估者的判断,例如专业知识、风格和偏见,从而影响评估结果。
三、利用LLM评估
替代人工评估的另外一种方法是利用LLM进行结果评估,即:通过Prompt来引导LLMs模拟人工评估过程。上面介绍的人工评估方法(案例对比、评分和A/B测试)都可以利用LLM来实现。
在下面示例中,使用大模型对相同的问答任务执行A/B测试评估。该模型的任务是在对问题的两个回答中选择最好的答案,输出结果显示回答1是最好的。
「LLM评估的优缺点」:消除了人工评估的时间成本限制,但它是否能在准确性和质量上超越人类评估尚无定论。它在一项任务上的有效性并不能保证它会推广到其他任务和领域,唯一解决方法是在特定应用程序上测试它。
「LLM评估的挑战」:LLM 生成的评估也面临着与人类评估相同的主观性挑战。许多因素都会影响模型的评估结果,例如模型的整体能力、是否经过专门训练来执行评估、是否存在可能引入偏差的训练数据等等。
四、单词级评估
另一种评估方法在单词/Token级别上比较参考案例和生成结果。目前有多种评估指标可用,例如 BLEU、ROUGE、Perplexity 和 BERTScore。
让我们看一个ROUGE的例子,它最初是为了评估摘要而创建的。它测量参考文本和生成文本之间匹配的“n-gram”的数量。N-gram是文本中“n”项的连续序列,其中“n”可以是 1、2 等。 为了简单起见,我们将使用“n=1”,也称为“一元语法”。 例如,在“我爱猫”这句话中,一元词是“I”、“love”和“cats”。
根据参考答案“因为音质是最好的”来计算问答任务的n元语法的精确度、召回率和 F1 分数,其中:
from collections import Counter
def rouge_1(reference, candidate):
# Turn into unigrams
reference_words = reference.split()
candidate_words = candidate.split()
# Compute the number of overlapping words
reference_count = Counter(reference_words)
candidate_count = Counter(candidate_words)
overlap = sum(min(candidate_count[w], reference_count[w]) for w in candidate_count)
# Compute precision, recall, and F1 score
recall = overlap / len(reference_words)
precision = overlap / len(candidate_words)
f1 = 2 * (recall * precision) / (recall + precision)
# Return resuls
return {"recall": recall, "precision": precision, "f1": f1}
for idx,gen_answer in enumerate(gen_answers):
result = rouge_1(ref_answer, gen_answer)
print(f"Answer #{idx+1}")
print(f"Precision: {result['precision']:.2f}")
print(f"Recall: {result['recall']:.2f}")
print(f"F1-Score: {result['f1']:.2f}")
print("\n")
输入结果为:
Answer #1
Precision: 0.50
Recall: 0.33
F1-Score: 0.40
Answer #2
Precision: 0.71
Recall: 0.56
F1-Score: 0.63
「单词级指标优缺点」 上面输出结果第二个生成的答案在准确率、召回率和F1分数方面的得分高于第一个答案,这并不是预期结果。这是因为它与参考答案有更多的一元组重叠,例如“best”和“quality”等词。这是一个单词级指标可能达不到要求的示例。它们很方便,因为它们易于解释,并且实现快速且廉价,但在比较两段文本时,它们可能无法捕获整体含义和准确性。
总结
本文探讨了评估LLM输出结果的一些技术,从人工评估到自动化评估。其中:一方面,自动化评估的时间成本效率更高,在某些情况下是非常实用的选择,例如在早期原型设计阶段。另一方面,人工评估仍然是获得模型应用准确性和实用性最强评估标准。每种评估方法都有其优点以及潜在缺陷,这个也要根据具体任务具体分析。