趋近智
评估大型语言模型(LLM)在实际任务中的表现,外部评估至关重要。在预训练 (pre-training)期间常用的一些指标,例如困惑度,虽然能提供有价值的指示,但无法保证LLM能有效地分类情感、回答问题或判断两句话是否为释义。为了衡量这些应用能力,研究界开发了包含多种自然语言处理(NLP)任务的基准测试集。影响力较大的包括GLUE及其后续版本SuperGLUE。
这些基准测试作为比较不同模型的共同标准。研究人员无需在分散、可能特殊化的任务上进行评估,而可以使用这些已有测试集来衡量在一般语言理解方面的进展。GLUE和SuperGLUE都汇总了多个数据集上的表现,旨在提供一个单一、全面的分数,以反映模型的通用性。
GLUE基准测试于2018年推出,是迈向标准化NLP评估的重要一步。它捆绑了九项不同的英语语言理解任务,旨在涵盖多种语言现象。其目的是鼓励开发能学习通用表示、可跨不同任务迁移的模型,而不是只针对单一能力进行特殊化训练的模型。
GLUE中的任务大致可以分为以下几类:
单句任务: 评估对单个句子内部属性的理解。
相似性和释义任务: 评估判断句子对之间语义关系的能力。
自然语言推理 (inference)(NLI)任务: 评估模型推理前提和假设句之间关系的能力。
GLUE基准测试中任务的大致分类。
模型通常会在每个任务的训练数据上分别进行微调 (fine-tuning)。性能使用任务专用指标衡量(例如,分类的准确率、F1分数、CoLA的马修斯相关系数、STS-B的皮尔逊/斯皮尔曼相关系数)。最终的GLUE分数是各个任务分数的未加权平均值。尽管影响力很大,但GLUE分数在许多任务上很快达到了接近人类的表现,这表明该基准测试可能不足以有效区分最先进的模型。
为解决GLUE出现的饱和问题并进一步拓展语言理解的边界,SuperGLUE于2019年推出。它遵循相似的结构,但包含更困难的任务,这些任务需要更复杂的推理 (inference)、常识知识和处理歧义的能力。它还包括更多样的任务格式,并更注重有挑战性的示例。
SuperGLUE包含一套新任务,尽管有些与GLUE任务重叠或相关:
SuperGLUE也使用了适合每个任务的多种指标,最终分数是平均值。它为模型设定了更高的标准,与GLUE相比,在SuperGLUE上的进展通常被认为是模型具有更强高级语言理解能力的指标。
SuperGLUE被设计为GLUE的更具挑战性的后续版本。
在这些基准上评估预训练 (pre-training)的LLM通常涉及每个任务的标准化微调 (fine-tuning)过程:
[CLS]标记 (token)的表示),并将其映射到任务的输出空间(例如,类别的logits,单一回归值)。Hugging Face的transformers等库极大地简化了这个过程。它们提供了对基准数据集的便捷访问以及用于微调各种预训练模型的标准化脚本。
以下是一个PyTorch代码片段,展示了如何向预训练模型添加一个简单的分类头部,以在类似SST-2(情感分类)的任务上进行微调:
import torch
import torch.nn as nn
from transformers import AutoModel
# 使用Hugging Face transformers的示例
# 加载预训练基础模型
base_model_name = "bert-base-uncased" # 或任何其他兼容的模型
base_model = AutoModel.from_pretrained(base_model_name)
# 定义一个简单的分类头部
class SentimentClassifierHead(nn.Module):
def __init__(self, hidden_size, num_labels):
super().__init__()
# 用于正则化的Dropout层
self.dropout = nn.Dropout(0.1)
# 将池化输出映射到
# 类别数量的线性层
self.classifier = nn.Linear(hidden_size, num_labels)
def forward(self, sequence_output):
# 通常,使用对应[CLS]标记的输出
# sequence_output形状:(batch_size,
# sequence_length, hidden_size)
# 我们取第一个标记([CLS])的输出
pooled_output = sequence_output[:, 0]
pooled_output = self.dropout(pooled_output)
logits = self.classifier(pooled_output)
return logits
# 组合基础模型和头部
class FullSentimentClassifier(nn.Module):
def __init__(self, base_model, head):
super().__init__()
self.base_model = base_model
self.head = head
def forward(self, input_ids, attention_mask):
outputs = self.base_model(
input_ids=input_ids,
attention_mask=attention_mask
)
# 获取最后的隐藏状态
last_hidden_state = outputs.last_hidden_state
# 将其通过分类头部
logits = self.head(last_hidden_state)
return logits
# 实例化完整模型
# 假设是SST-2(二元分类),类别数量为2
config = base_model.config # 从基础模型获取配置
classification_head = SentimentClassifierHead(
config.hidden_size,
num_labels=2
)
model = FullSentimentClassifier(base_model, classification_head)
# 现在,'model'可以在SST-2数据集上进行微调
# 示例输入(需要先进行分词)
# input_ids = ... # 经过分词的输入句子
# attention_mask = ... # 对应的注意力掩码
# logits = model(input_ids, attention_mask)
# 使用logits和标签计算损失,
# 然后进行反向传播
PyTorch代码展示了如何向预训练的Transformer模型添加分类头部,以在类似GLUE的任务上进行微调。
GLUE和SuperGLUE分数提供了一种有价值的标准化衡量标准,用于评估模型的通用语言能力。更高的分数通常表明模型学习了更具迁移性的表示。然而,解释这些分数需要谨慎:
尽管有这些局限性,GLUE和SuperGLUE仍然是重要的工具。它们提供了一个共同的衡量标准,用于比较不同团队开发的模型,并追踪此方面的进展。它们迫使模型展现应对多种语言挑战的能力。
尽管有用,但仅依赖GLUE/SuperGLUE存在不足:
因此,尽管GLUE和SuperGLUE是外部评估的非常重要组成部分,但它们应辅以对与您的特定目标直接相关的任务进行评估,以及在适当时潜在地使用更新、更具动态性的基准测试或人工评估。它们提供了对通用能力的基线理解,但通常需要特定方面或特定任务的评估才能获得完整的情况。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造