大模型评估

简介

综合转载于:

模型X到底好不好?

最近半年随着 ChatGPT / GPT-4 的火热,各个学校或者公司也纷纷推出了自己的开源/闭源大模型。模型的火热发布也带来了一个重要的问题 — 如何评估一个模型X到底是好或者不好。

在 ChatGPT 出现没多久时,这种评估往往是手动的:每个人都有若干个压箱底的刁钻问题,用来测试模型是否够“智能”。但显然这种测试只能带来一种“感觉”而非定量的衡量,如何客观公正的对一个模型进行充分的评估变成了一个迫切的需求。

好消息是随着模型的发展,最近半年我们也看到了越来越多评测方面的工作,试图从各个角度测试模型的表现。就在这篇博客快写完的时候,也看到已经出现了第一篇大模型评测的综述文章 — A Survey on Evaluation of Large Language Models。足以看出,卷的不只有大模型,甚至还有模型的评测。

本文试图从发展脉络的角度梳理不同的评测方法,试图理解为什么会发生这些变化,以及顺着这些脉络下一步会是什么。当然这样也不可避免的会混入大量个人观点,欢迎讨论。

用什么测试:从 NLP 任务到人类试题

传统做法:NLP 任务评测

对 NLP 有所了解的同学肯定熟悉常见评估一个模型的方式,那就是做什么任务就在对应的数据集上评测。比如做阅读理解的会选择 SQuAD,做情感分析的会选择 SST-2,做句子表示的就会选择 STS 等等。

SQuAD(Stanford Question Answering Dataset)是一个用于阅读理解任务的常用数据集,其评测方式主要基于人工标注和一些指标。以下是 SQuAD 数据集的评测方式的详细说明:

  1. 数据集结构: SQuAD 数据集包含一组文章段落,每个段落都伴随着一系列问题,每个问题都有一个正确的答案。参与者的任务是训练模型来阅读这些段落,并回答相关的问题。

  2. 指标: SQuAD 数据集的主要评测指标包括以下几项:

    • Exact Match (EM): EM 分数是一个精确匹配度量,它衡量模型生成的答案是否与人工标注的答案完全一致。计算方式是通过比较两个答案字符串是否相同。
    • F1 分数: F1 分数是一种权衡精确度和召回率的指标,计算方法涉及到预测答案和真实答案的共有词汇。F1 分数越高表示模型在生成答案时越准确。
  3. 评测过程: 在评测阶段,使用训练好的模型对测试集中的段落和问题进行预测,得到模型的回答。然后,通过计算每个问题的 EM 和 F1 分数来评估模型的性能。具体的计算过程如下:

    • 对于每个问题,将模型生成的答案与真实答案进行比较,计算 Exact Match 分数。
    • 计算模型生成的答案和真实答案之间的共有词汇,然后计算 F1 分数。
    • 将所有问题的分数取平均得到整体性能评估。
  4. 例子: 假设有一段落如下:

    1
    2
    makefileCopy code
    Passage: The quick brown fox jumps over the lazy dog.

    相应的问题是:

    1
    2
    vbnetCopy code
    Question: What does the quick brown fox do?

    真实答案是 “jumps over the lazy dog”。如果模型的预测答案也是这个完整的短语,那么该问题的 Exact Match 分数就是 1.0,F1 分数也是 1.0。如果模型的答案只包含部分正确的单词,那么 F1 分数将相应减小。

总体而言,SQuAD 数据集评测方式注重于模型对问题的准确回答,通过 Exact Match 和 F1 分数提供了对模型性能的全面评估。

SST-2(Stanford Sentiment Treebank 2)是一个用于情感分析的数据集。它的评测方式也涉及到一些指标,让我们来了解一下:

  1. 数据集结构: SST-2 包含了一组电影评论,每个评论都被标注为正面(positive)或负面(negative)情感。任务的目标是训练模型来对这些评论进行情感分类。

  2. 指标: 主要的评测指标通常包括准确率(Accuracy)和其他一些相关的二分类评价指标。

    • 准确率(Accuracy): 它是一个最基本的指标,表示模型正确分类的样本数量占总样本数量的比例。
    • 其他指标: 除了准确率,还可以考虑精确度(Precision)、召回率(Recall)和 F1 分数等,这些指标提供了对模型在正面和负面类别上性能的更详细评估。
  3. 评测过程: 在评测阶段,使用已经训练好的模型对测试集中的评论进行情感分类预测。然后,通过比较模型的预测标签与真实标签,计算准确率以及其他指标,从而评估模型在情感分析任务上的性能。

  4. 例子: 假设有一条评论如下:

    1
    2
    vbnetCopy code
    Review: This movie is amazing! I loved every moment of it.

    如果模型的预测是正面情感,那么这个样本在准确率计算中被认为是正确分类的。相反,如果模型将其预测为负面情感,那么这个样本被认为是错误分类的。

总的来说,SST-2 数据集的评测方式注重于模型对文本情感的准确分类,而主要指标是准确率。其他指标则提供了更详细的性能评估,特别是当数据集中的正负样本分布不均匀时。

STS(Semantic Textual Similarity)是一个用于度量两个文本之间语义相似度的任务,而STS 数据集中的评测方式略有不同。STS 数据集通常包含一对文本,每对文本都有一个关于它们语义相似度的连续值标签。

以下是 STS 任务的评测方式:

  1. 数据集结构: STS 数据集包含了一系列文本对,每一对都有一个连续的语义相似度得分,通常在0到5或0到10的范围内。任务的目标是训练模型来预测文本对之间的语义相似度得分。

  2. 评测指标: 由于 STS 的任务是回归任务,评测指标主要涉及到度量模型的预测得分与真实得分之间的相关性。

    • 皮尔逊相关系数(Pearson Correlation Coefficient): 衡量模型的预测得分与真实得分之间的线性相关性。值越接近1表示两者之间的线性相关性越强。
    • 斯皮尔曼相关系数(Spearman Rank Correlation Coefficient): 考虑了预测得分和真实得分的等级关系而不是具体数值,因此对异常值不敏感。
  3. 评测过程: 在评测阶段,使用训练好的模型对测试集中的文本对进行语义相似度得分的预测。然后,通过计算预测得分与真实得分之间的相关系数,评估模型在 STS 任务上的性能。

  4. 例子: 假设有一对文本如下:

    1
    2
    vbnetCopy codeText A: The cat is sitting on the mat.
    Text B: The feline is perched on the rug.

    如果这对文本的真实语义相似度得分是4.5,而模型的预测得分也是4.5,那么模型在这个样本上的表现是良好的。

总体而言,STS 数据集的评测方式注重于模型对文本语义相似度的连续值预测,而评价指标主要是皮尔逊相关系数和斯皮尔曼相关系数。

最近几年随着预训练模型的发展(这里预训练模型指的是 BERT 时代下参数量在 1B 以下的模型,区别于参数量往往大于 10B 的“大模型”),单个的数据集已经逐渐不足以综合评估一个模型,那么我们就拿多个数据集组成一个测试基准 benchmark 来测量。一些比较常见的测试基准有:

  • GLUE 以及 SuperGLUE 算是最家喻户晓,也是被刷的最多的 NLP 基准了

GLUE(General Language Understanding Evaluation)是一个多任务学习基准,旨在评估自然语言处理(NLP)模型在多个任务上的性能。GLUE 将多个任务组合到一个整体评测中,以测试模型的泛化能力和整体性能。其中,SST-2、STS 和其他任务都是 GLUE 基准中的一部分。

评测 GLUE 时,通常使用下列任务:

  1. MNLI(MultiNLI): 自然语言推理任务,要求模型判断两个给定句子之间的关系(蕴涵、矛盾、中性)。
  2. QQP(Quora Question Pairs): 判断两个问题是否等价。
  3. QNLI(Question-answering Natural Language Inference): 阅读理解任务,要求模型判断一个问题是否可以从给定的文本段落中得到答案。
  4. RTE(Recognizing Textual Entailment): 判断给定的两个文本片段是否具有蕴涵关系。
  5. MRPC(Microsoft Research Paraphrase Corpus): 判断两个句子是否是语义上的同义。
  6. STS-B(Semantic Textual Similarity Benchmark): 与前面提到的 STS 相似,但在 GLUE 中作为子任务之一。
  7. CoLA(Corpus of Linguistic Acceptability): 判断给定的句子是否是语言上可接受的。
  8. WNLI(Winograd Schema Challenge): 自然语言推理任务,要求模型理解特定的语境和指代关系。

GLUE 使用一个总体的评测指标,即 GLUE 得分,该得分综合考虑了模型在不同任务上的性能。GLUE 得分越高,表示模型在多任务学习上的表现越好。

GLUE 得分的计算涉及多个任务,其中每个任务都有其特定的指标,然后通过一种综合的方式将这些任务的指标结合起来。具体计算 GLUE 得分的步骤如下:

  1. 任务评测: 对于 GLUE 中的每个任务,使用相应的评测指标计算模型在该任务上的性能。例如,对于 MNLI 任务,可能使用准确率(Accuracy)作为评测指标;对于 STS-B 任务,可能使用皮尔逊相关系数(Pearson Correlation Coefficient)和斯皮尔曼相关系数(Spearman Rank Correlation Coefficient)等。
  2. 标准化得分: 对于每个任务,将得到的评测指标进行标准化,使得它们在相同的尺度上。标准化的目的是确保各个任务的得分能够在计算 GLUE 得分时被平等对待。
  3. 合并任务: 将标准化后的任务得分合并到一个总体得分中。这可以通过简单的平均或加权平均来完成,具体取决于 GLUE 组织的具体方法。不同任务可能有不同的权重,以便更重要的任务对总体得分产生更大的影响。
  4. 得分计算: 将合并后的任务得分用于计算 GLUE 得分。通常,GLUE 得分的计算方法是对合并的任务得分进行平均或加权平均。
  5. 比较模型: GLUE 得分提供了一个标准化的方法,允许比较不同模型在多个任务上的性能。得分越高,表示模型在 GLUE 数据集的各个任务上表现越好。

需要注意的是,不同的任务在 GLUE 中可能有不同的重要性,因此在合并任务得分时,可能会考虑一些任务具有更高的权重。GLUE 的目标是提供一个全面的评测框架,帮助研究人员了解模型在多任务学习上的整体表现。

SuperGLUE(Super General Language Understanding Evaluation)是GLUE的扩展和改进版本,它提出了一系列更具挑战性的语言理解任务,旨在更全面地评估模型的性能。与GLUE类似,SuperGLUE将多个任务组合在一起,对模型进行综合评估。

SuperGLUE中包含的任务有:

  1. BoolQ(Boolean Questions): 判断给定的句子是否可以用”是”或”否”回答。
  2. CB(CommitmentBank): 评估模型对于句子中陈述的强度或承诺的程度。
  3. COPA(Choice of Plausible Alternatives): 给定一个因果关系问题,选择两个备选答案中更符合句子中的因果关系。
  4. MultiRC(Multi-Sentence Reading Comprehension): 阅读理解任务,要求对一篇包含多个句子的文章中的问题进行回答。
  5. RTE(Recognizing Textual Entailment): 与GLUE中的RTE任务相似,判断给定的两个文本片段是否具有蕴涵关系。
  6. WiC(Word in Context): 判断两个句子中的单词是否在不同的语境中具有相同的意义。
  7. WSC(Winograd Schema Challenge): 与GLUE中的WNLI任务相似,测试模型对于复杂的指代关系和语境的理解。

SuperGLUE得分的计算方式类似于GLUE,它综合考虑了模型在不同任务上的性能。通过引入更具挑战性的任务,SuperGLUE旨在更全面地评估模型的通用语言理解能力。评估过程涉及到在所有任务上对模型进行训练和测试,并使用综合得分来比较模型性能。

CLUE(Chinese Language Understanding Evaluation)是一个旨在推动中文自然语言处理研究的评测基准,类似于英文领域的GLUE和SuperGLUE。

CLUE基准包含多个中文NLP任务,涵盖了文本分类、情感分析、文本相似度、阅读理解等多个方面。一些常见的CLUE任务包括:

  1. AFQMC(Ant Financial Question Matching): 问题匹配任务,要求判断两个问题是否相似。
  2. TNEWS(Toutiao News Classification): 头条新闻分类任务,要求将新闻文本分类到不同的类别中。
  3. CMNLI(Chinese Multi-Genre NLI): 中文自然语言推理任务,要求判断两个句子之间的关系(蕴涵、矛盾、中性)。
  4. WSC(Word-Character Matching): 词字符匹配任务,要求判断一个句子中的某个词在另一个句子中的位置。
  5. IFLYTEK(iFLYTEK Dialogue Natural Language Inference): 讯飞提供的对话自然语言推理任务。
  6. CLUENER(Chinese Named Entity Recognition): 中文命名实体识别任务,要求识别文本中的命名实体。

评价一个模型在CLUE基准上的性能通常涉及在每个任务上计算相应的性能指标,然后可能使用综合得分来评估整体性能。这有助于研究人员了解模型在多个中文NLP任务上的表现,并促进中文自然语言处理领域的进展。

XTREME 是由Google Research提出的,它汇集了来自多个任务和多个语言的数据集,旨在推动多语言自然语言处理(NLP)研究。

XTREME 包含了以下多语言任务:

  1. PAWS-X(PArallel Wiki Simplification - Cross-lingual): 一个平行语料库,用于衡量句子级别的相似度。
  2. XNLI(Cross-lingual Natural Language Inference): 跨语言自然语言推理任务,是NLI任务的一个扩展,包含多语言的数据集。
  3. MLQA(MultiLingual Question Answering): 多语言的问答任务,要求模型理解和回答关于文章的问题。
  4. Tatoeba: 一个包含多语言平行语料库的数据集,用于评估模型的跨语言泛化性能。
  5. TyDiQA-GoldP: 用于评估跨语言阅读理解的数据集。
  6. UDPOS(Universal Dependencies Part-of-Speech): 一个包含跨语言部分词性标注的数据集。
  7. WikiANN: 一个包含跨语言实体链接的数据集。
  8. WMT: 用于机器翻译评估的数据集。

XTREME 的评价方法涉及在每个任务上进行模型训练和测试,然后使用任务特定的评价指标。然后,通过综合多个任务上的性能,计算得到一个综合分数,用于评估模型在多语言理解上的表现。

  • sentence embedding 的综合评估基准 MTEB

“MTEB” 是指 “Machine Translation Evaluation Benchmark,是 Hugging Face 团队提出的一个机器翻译评估基准:

  1. 目标: MTEB 旨在提供一个更全面和准确的机器翻译评估基准,超越传统的 BLEU、TER 等自动评价指标,以更好地反映翻译系统的性能。
  2. 数据集: MTEB 使用了包括WMT、CCMT、IWSLT等多个数据集的子集,涵盖多个语言对和翻译方向。
  3. 评估指标: MTEB 使用多个评估指标,包括自动指标(如BLEU、TER、METEOR)以及人工评估。此外,还引入了一种基于探索性分析的模型检查(Model Check)方法,用于更深入地理解模型在特定问题上的性能。
  4. 多样性评价: MTEB 强调了多样性的重要性,特别是对于涉及不同语言和翻译方向的评估。通过引入多样性评价,可以更全面地了解模型的表现。
  5. 模型检查: MTEB 提出了一种新颖的模型检查方法,旨在深入研究模型在特定翻译问题上的行为。这可以帮助研究人员更好地理解模型的优势和局限性。

总体而言,MTEB 旨在提高机器翻译评估的水平,通过引入更多的多样性和深入的模型检查方法,从而更好地指导和评价翻译系统的性能。如果你对具体的 MTEB 指标和方法感兴趣,我建议详细查阅链接中提供的信息。

这些 NLP 任务往往代表着模型在解决某类特定问题上的表现,所以在 ChatGP / GPT-4 公开后,也仍然有许多论文来测试他们解决各类传统 NLP 任务的能力:

  • 既有相对来说综合测试的,例如:

    • A Multitask, Multilingual, Multimodal Evaluation of ChatGPT on Reasoning, Hallucination, and Interactivity
    • Can ChatGPT Understand Too? A Comparative Study on ChatGPT and Fine-tuned BERT
    • Is ChatGPT a General-Purpose Natural Language Processing Task Solver?
  • 也有聚焦在各个具体角度的,例如:

    • 翻译:Is ChatGPT A Good Translator? A Preliminary Study
    • 信息抽取:Zero-Shot Information Extraction via Chatting with ChatGPT
    • 情感分析:Sentiment Analysis in the Era of Large Language Models: A Reality Check

本文的角度是如何测试LLM,而不是已有LLM在特定NLP任务上表现如何,所以这里不再展开。前面提到的综述文章中的第一节详细讨论并总结了LLM在各个 NLP 任务上的表现,感兴趣的同学可以详细阅读。

范式转换:从NLP任务到人类试题

然而从现状来看,例如各个新发布模型证明各自的优越性的时候,大家都可以明显感觉到,用 NLP 任务来评测大模型并不是默认做法了。在我看来主要有三个原因:

  1. NLP 任务不够难了:许多简单 NLP 任务,例如文本分类任务,预训练模型就可以逼近甚至超过人类表现,使得在他们上面即使取得高的结果,也没那么有吸引力了。
  2. NLP 数据集存在严重的数据污染问题:很多 NLP 任务数据集都是在互联网上轻易可以获取,从而容易混入大模型的预训练语料里,导致其上的结果没有那么有说服力。
  3. GPT-4 也不在上面测试了:不得不承认 OpenAI 的引领能力非常强,他们在测试上的倾向性自然会导致跟随者的变化,我们接下来详细讨论 GPT-4 的测试部分。

GPT-4的(开发过程中的)测试细节我们不得而知,但是从其官方介绍中我们就能看出重点:

We’ve created GPT-4, …, exhibits human-level performance on various professional and academic benchmarks.

也即,利用人类考题来进行测试。

具体来说,从其官方博客以及论文中,我们可以看到两个主要测试角度:

  • simulating exams that were originally designed for humans 人类考试
  • “traditional benchmarks” for ML models 传统测试基准例如 MMLU

如果进一步查看 MMLU 的细节,可以注意到它其实也是一个包含多个科目的人类试题组成的测试集,足以见出用人类试题来检验大语言模型被认为是一个重要角度了。

GPT-4的(开发过程中的)测试细节我们不得而知,但是从其官方介绍中我们就能看出重点:

We’ve created GPT-4, …, exhibits human-level performance on various professional and academic benchmarks.

也即,利用人类考题来进行测试。

具体来说,从其官方博客以及论文中,我们可以看到两个主要测试角度:

  • simulating exams that were originally designed for humans 人类考试
  • “traditional benchmarks” for ML models 传统测试基准例如 MMLU

如果进一步查看 MMLU 的细节,可以注意到它其实也是一个包含多个科目的人类试题组成的测试集,足以见出用人类试题来检验大语言模型被认为是一个重要角度了。

新范式:利用人类考题来测试

MMLU 无论在什么测试基准里都被当作是一个核心的数据集,值得进一步讨论其细节。它最早是在 Measuring Massive Multitask Language Understanding 这篇 ICLR 2021 的文章中被提出。从题目也可以看到,重要的点在于 multitask,也即模型在非常多的任务下的表现如何。

具体来说他收集了涵盖 57 个任务(也可以说是科目)的人类试题,包含例如数学、历史、计算机科学、法律等等学科,将其组成一个测试基准。可以想到,如果模型要有比较好的效果,需要同时具备世界知识(world knowledge),以及解题能力(problem solving)。现在看来似乎这个想法非常自然且合理,但回头看在当时算是非常有前瞻性了。

在我看来,这类人类试题主要有以下几个好处:

整体来看,这种试题是测试人类智能的一个很好的载体,无论在哪个国家,试卷考试的方式来判断一个学生的智力水平发展到了什么阶段都是主要做法。所以在AGI比较火热的时候,用来测试模型/机器智能也是十分自然。

从类型来看,不同科目的试题带来了不同纬度的测量,正如 MMLU 强调的,可以测试多任务的能力,拆解来说:

  • 语言 / 社会科学类题目,可以测量世界知识(world knowledge)— 想想一个模型需要对中文语境的知识了解到什么程度才可以回答 “明朝的第二个皇帝是谁” 这种问题
  • 数学 / 自然科学类题目,可以测量推理能力(reasoning ability)— 模型不仅需要理解题意,还需要根据所有信息进行推理甚至计算再答题
  • 当然还有很多其他的能力,但是上面两个 世界知识推理能力,往往是大模型擅长(相较于小模型),或者说希望能够增强的方面。

希望上述论证能说服你相信“人类试题是测试大模型的一个很好载体”这一观点。沿着 MMLU 的思路,后续有了一系列相关工作:

英文测试

对于英文而言,仿照 MMLU 有许多以人类试题为载体的测试,但大部分并不是以新数据集/测试当作重点(毕竟已经有了MMLU),而是检验在特定类型题目上,LLM的表现:

  • How Does ChatGPT Perform on the United States Medical Licensing Examination? The Implications of Large Language Models for Medical Education and Knowledge Assessment
  • Can ChatGPT pass high school exams on English Language Comprehension?
  • Automatically Answering and Generating Machine Learning Final Exams

值得注意的是,此类 paper 由于测试的设定千差万别,特别是些不规范/错误的做法也容易引起很大的争议,例如:爆火的「GPT-4 MIT本科数学满分」论文作弊,数据集本身有问题。所以对于此类paper,特别是标题/结论比较吸引眼球的,可能要多留意一下。

中文测试

对中文来说,最近几个月涌现了好几个测试基准,我们按发布时间排序:

  • [AGIEval] AGIEval: A Human-Centric Benchmark for Evaluating Foundation Models

    • 选用标准化考试的问题,中文和英文总共 8062 道题目
    • 其中中文题目来自于三类:高考题、律师资格考试、公务员考试。
  • [C-Eval] C-Eval: A Multi-Level Multi-Discipline Chinese Evaluation Suite for Foundation Models

    • 总共有 13948 个问题,均为单选题
    • 包含52个不同领域,分成了四个大的类别:STEM / Social science / Humanity / Other
    • 把数理类题目挑出来单独构造了 C-Eval Hard,用于着重测试模型的推理能力
  • [GAOKAO-bench] Evaluating the Performance of Large Language Models on GAOKAO Benchmark

    • 收集了2010-2022年全国高考卷的题目,其中包括1781道客观题和1030道主观题
    • 客观题可以自动评测,主观题依赖于专家打分
  • [M3Exam] M3Exam: A Multilingual, Multimodal, Multilevel Benchmark for Examining Large Language Models

    • 多语言数据集,包含1164道中文试题,涵盖三个教育阶段:小升初、初升高、高升大(高考),可以用来测试模型发展达到什么阶段。
    • 中文部分也公开了图片类试题,可以测试中文多模态模型。
  • [XIEZHI] Xiezhi: An Ever-Updating Benchmark for Holistic Domain Knowledge Evaluation

    • 涵盖了来自516个领域的总共249587道多选题,所以可以用来测试模型在不同领域上的优势和劣势
  • [CMMLU] CMMLU: Measuring massive multitask language understanding in Chinese

    • 涵盖 11528 个多选题,横跨 67 个科目
    • 涉及一些不是常见标准化考试类型的题目,例如食物,中国驾驶规范等

多语言测试

多语言方面,目前仅有一个数据集 M3Exam,其他的工作也都是类似英文的在某特定语言上的特定类型考试做测试。

  • [M3Exam] M3Exam: A Multilingual, Multimodal, Multilevel Benchmark for Examining Large Language Models

    • 包含 12317 个问题,涵盖从高资源语种例如中文英文,到低资源语种例如斯瓦希里语及爪哇语等9个语言。
    • 一个特点是所有问题均来源是当地的真实人类试题,所以包含了特定的文化背景,要求模型不仅是能理解语言,还需要对背景知识(真-世界知识)有所掌握
  • Evaluating GPT-4 and ChatGPT on Japanese Medical Licensing Examinations

  • Evaluating GPT-3.5 and GPT-4 Models on Brazilian University Admission Exams

  • Investigating the effectiveness of ChatGPT in mathematical reasoning and problem solving: Evidence from the Vietnamese national high school graduation examination.

人类试题是否是个理想的测试载体?

前面列举了中文、英文、多语言方向上一些新的数据集的出现。虽然是最近两三个月的工作,但他们迅速变成了较为公认的测量基准,例如最近一个月发布的一些新模型,包括 baichuan-7BInternLM (书生·浦语) 等都采用了其中一些数据集作为主要的测试指标。

虽然上文似乎都是在试图论证“人类试题作为测量基准”的优越性,但如果我们停下来再考虑下,人类试题是不是真的是个完全理想的测试载体?答案似乎也不是100%成立:

  • 最大的问题还是数据污染问题,许多试题,例如中国的高考题可能传播面很广,很容易被(不小心)混入到模型的训练语料里,造成模型的效果被高估。

  • 其次,目前许多模型为“中模型”(10B左右),前面讨论采用人类试题的动机时提到过,他们能体现或者凸显的是:世界知识+推理能力,10B尺寸的模型是否可以获得这些能力本身也是个有待商榷的问题。所以:

    • 许多模型在这些试题上取得近乎随机的结果 — 并不证明他们真的很差,这个级别的模型期待他们有其他角度的能力或许更为现实
    • 有些中等模型在上面取得比较好的结果 — 并不证明他们真的很好,可能训练数据朝向此类数据做了倾斜

小结:用什么任务来测试模型

这节中主要讨论的是用什么来测试,也即从传统NLP任务到人类试题这种范式的转移。

值得注意的是他们也往往不是非此即彼的关系,从形式上来看,单选题类型的人类试题完全也可以被当作是QA任务里的 MCQ (multiple-choice question),所以有些测试基准会直接把他们混在一起。例如 Huggingface 的 Open LLM Leaderboard 中包含四个数据集,既有 MMLU 和 AI2 Reasoning Challenge(自然科学类型的问题),也有“传统的”NLP数据集例如 HellaSwagTruthfulQA

怎么测试:Evaluator 与榜单

解决了用什么来做测试,这节我们主要讨论如何测试。具体来说涉及两个方面:1. 谁来打分(X-as-Evaluator)以及 2. 在什么上面打分(刷什么榜单)

如何给模型输出打分:自动评测 / 人工评测 / GPT-4评测

上文介绍的任务,无论是传统的NLP任务,或者多选题形式的人类考题,都有相对明确的打分标准,例如准确率 accuracy,或者专门的衡量指标例如 ROUGE 或者 BLEU。然而对于更丰富一些的任务,例如对话或者人类试题中的主观题,自动评估往往是不够的。

早期碰到此类情况的时候,默认选择就是用人类打分,然而随着 LLM 的发展,特别是 GPT-4 这种极为强悍的模型,用模型来给模型打分也逐渐流行起来。甚至可以看到最近的一些模型的宣传方法就是“GPT-4认为我们达到了 ChatGPT XX% 效果”这种画风。

具体来说对于不同模型的输出,用一个(相对来说比较强的)模型,例如 GPT-4 来对这些输出进行比较和打分:

  • Benchmarking Foundation Models with Language-Model-as-an-Examiner.
  • PandaLM: An Automatic Evaluation Benchmark for LLM Instruction Tuning Optimization
  • Large Language Models are not Fair Evaluators

相较于 reference-based metric 例如 BERTScore 而言,这类 reference-free 的方法往往更加方便,因为只需要给模型的输出即可。但是值得注意的是,最近的一些工作(比如上面的最后一篇)也发现模型做自动评估往往还是存在一些系统性的偏见,即使简单地把不同答案顺序做调换喂给模型,也会影响到最终结果。所以用模型来打分仍然算是一个“研究角度”,而不能被100%信任。

刷榜:永恒的课题

对于NLP或者ML模型来说,刷榜都是永恒的课题。上节中介绍的各个数据集本身就可以组建起对应的榜单,例如 C-Eval 对应的 leaderboard,再次就不重复列举。

此外还有些榜单是汇聚多个数据集组成一个更综合的榜单,这里列举一些关注度比较高的综合榜单:

  • HELM: Holistic Evaluation of Language Models

    • 比较早推出的相对全面的衡量,包含非常多的任务/数据集。
  • Huggingface 的 [ Open LLM Leaderboard](https://link.zhihu.com/?target=https%3A//huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard)

  • BIG-bench: Beyond the Imitation Game: Quantifying and extrapolating the capabilities of language models

    • 包括200多个任务,涵盖方方面面
  • Chatbot Arenaleaderboard

    • 侧重于对话角度:”features anonymous, randomized battles in a crowdsourced manner”
    • 逻辑是同时跟两个(匿名)模型对话,然后投票选出最好的那个
    • 作者会每隔一段时间对leaderboard进行一次讨论和分析,可以在网站上看到。
    • 最近他们也放出了一个新的 benchmark:MT-Bench,侧重于多轮问答的测试
  • AlpacaEval: An Automatic Evaluator for Instruction-following Language Models

    • 用模型例如 GPT-4 或者 Claude 来对(要测试的)模型进行打分
    • 当然为了说明这种方法的可靠性,他们用2w条左右的人工标注进行验证,通过高相关性说明这个榜单是可靠的
  • OpenCompass

    • 进一步集成了多个数据集/任务,试图得到更全面的评测方案

值得一提的是,在调研过程中也发现一个有意思的现象,越全的榜单更新频率或者用的反而不一定多,毕竟完整测试一次开销太大;然而太小的榜单可能又难以让人信服,所以类似于 Open LLM Leaderboard 这种“适中”体量的榜单更受欢迎。

支线剧情:LLM还有很多其他重要角度

以上的各种测试基准或者榜单重点在于衡量模型的*通用问题解决能力*,特别是知识与推理能力,有些额外考虑了对话类型模型的对话问答能力。然而目前来看LLM的应用潜力远不止于此,所以最近也出现了些工作从不同角度来进行衡量,这里列举一些:

  • 从领域的角度,例如常见的 医疗 medical、法律 legal、教育 education 等等

    • CARE-MI: Chinese Benchmark for Misinformation Evaluation in Maternity and Infant Care
  • 工具使用能力,即 tool learning 的角度:

    • API-Bank: A Benchmark for Tool-Augmented LLMs
    • On the Tool Manipulation Capability of Open-source Large Language Models
  • 模型的鲁棒性

    • PromptBench: Towards Evaluating the Robustness of Large Language Models on Adversarial Prompts
  • 模型的可靠性

    • TRUSTGPT: A Benchmark for Trustworthy and Responsible Large Language Models
    • CARE-MI: Chinese Benchmark for Misinformation Evaluation in Maternity and Infant Care
  • 多模态能力

    • MME: A Comprehensive Evaluation Benchmark for Multimodal Large Language Models

总结与(不一定准确的)展望

这篇文章顺着发展的脉络梳理了下主流(以及非主流)的各式各样 LLM 评测方法,我们可以稍微总结一下以及讨论下顺着这些脉络,还有哪些有价值/有趣的问题值得探索:

百花齐放还是五花八门

总的来说,可以看到各式评测百花齐放,无论你做什么模型,似乎都能找个榜单刷上一刷。然而这背后也蕴含着种种问题,各个评测基准你套我我套你,一个基准里套着另一个基准里的数据集。最终展现出来的只是一个 number,但这个 number 的可靠性到底多少可能要画上一个问号。

比如前段时间闹出争议的 Falcon 在 huggingface 榜单上好过 LLama,最后官方给出的解释是用到的 prompt 和算分数的方式与原版稍有差异,具体可看以下两篇文章:

但注意,此时大家已经用了 相同模型 + 相同数据集,即使这样都能有如此大的差异,更别说其他情况下,评测的结果可靠性如何。

所以如果你只是关注评测/榜单上的结果作为模型比较与选择的参考,那么请注意:

  • 首先所有的评测都是biased,没有一个榜单是绝对可靠,他们往往只能从一个纬度来揭示模型的特点。
  • 其次由于上述的特点,很多榜单是可以被刷榜的,特别是在(巨大?)利益的驱动下,可能各种trick都会被用上,所以更不要盲目信赖榜单上的结果。

当然话永远可以从两面说,当你了解了上述风险以后,知道不同角度的场景的榜单对于快速了解某个方向比较好的模型是哪些仍然是有用的。此外,大部分人对于 LLM 的需求都是强应用相关的,那么基于自己的需求,构造一个专属的 test set(真-private set)要可靠的多。

LLM Evaluation 是个有趣/有用的研究方向

如何公平、有效的评估一个模型不仅仅是个数据工程,也是个值得深究的学术问题。光从上面的讨论,我们就已经提到了各种评估方法的种种问题,那么如何解决这些问题从而可以更好的展现出 LLM 的能力或者对不同 LLM 进行比较就显得非常重要了。

那么还有哪些可以继续挖掘的方向,可以考虑从目前评测的几个显著弱点着手,例如:

  • 榜单可能被刻意刷榜,从而模糊了模型的真实效果
  • 数据泄漏/污染问题
  • LLM 的应用场景过于多元,单一维度的衡量可能难以展示起完整性能

特别是后面两点,这是 LLM 不同于之前普通 ML 模型的特性,所以更值得被关注。

测试到底应该扮演着什么角色

最后我想用 GPT-4 报告里关于分工的部分来结束本文,可以看到评测与分析这一部分有多少的人力投入:

回到现实,即使各家公司都在积极发展自己的模型,评测这一部分恐怕都被严重的忽视,或者沦为 PR 的一种工具(“我的模型X可以在我的榜单Y上表现的非常好”)。

呼应下 C-Eval 博客 里提到的观点,测试应该用于辅助模型开发,而不是打榜。建立起一个优质高效的评测可以极大的辅助模型的开发过程。我想 GPT-4 的目标也不是为了成功解决各种人类考题,而是因为达到了一定的知识与推理水平,所以可以成功解决人类考题,大家共勉。

有趣的链接

之所以不叫参考文献是因为都已经放在上文了,这里放一些我在调研过程中发现的有趣/有用的文章,他们可能无法和本文形成直接联系,但都值得一看:

其他:prompt engineering

我们知道如今这些大模型对prompt很是敏感,同一个问题回答错了,可能换种问法比如加个“一步步推理”引导语他就又能回答对了,又比如通过few-shot这种形式先给它几个例子然后再问类似的问题,就能很好的回答。

每个模型对prompt的敏感度又不一样,对于同一个问题,同一个模型得到的结论可能都是不一样的,那怎么办呢?

这里笔者的建议是不要本末倒置,我们现在做的事情是测评,尤其是在做多个模型之间的对比,那么prompt就应该是符合人提问习惯的指令形式,对于某个问题人类怎么喜欢问就怎么来,如果模型不能get到,那就是你的指令对齐或者泛化做的不好,而不是说要花很大力气去写prompt迎合各个模型。

那么返回头来说,如果现在的工作是在测当前这个模型到底有没有这个知识,举个不太恰当的例子,假设你正在研发一个大模型,发现问“中国的capital是哪里?”他居然回答是苹果,那这个时候需要定位这个问题,你就可以先用中文问问“中国的首都是哪里?”看看能不能回答对,又或者先举几个类似的例子告诉模型,然后再问它,如果能够回答说吗模型本身是有“北京是中国的首都”这个通用知识的,可能是英文或者双语能力不行,所以这里通常的做法是,会用few-shot的指令形式去测底座模型,先看看底座模型是否有这个能力,如果没有,那后面训练什么的都是很难。又比如你是一个运营工作人员,现在也只能用A这个模型来完成某一件事,那就可以花点时间来做prompt engineering,来使得输出最大化的满足你的需求。

所以作为测评,指令设计不应该特意过多的去迎合模型(除非有如上的特殊目的等等),甚至应该像上一节说的,要多样性,才能更好的探究到模型的理解能力。

还有一篇综述可以看看:A Survey on Evaluation of Large Language Models

一分一毛,也是心意。