困惑度等内在评估指标能为语言模型在保留文本分布上的流畅性和预测能力提供有价值的理解,但它们通常无法充分说明模型对于特定应用有多么适用。一个模型可能获得很低的困惑度分数,表明它在根据训练数据中的模式预测序列中的下一个token方面表现出色,但当被要求执行准确总结文档或正确回答事实性问题等具体任务时,却可能表现糟糕。统计文本生成能力与实际效用之间的这种差距,使得外部评估成为必需。外部评估衡量模型在完成特定下游任务时的表现。我们不衡量模型单独预测文本的准确度,而是衡量它在执行以下任务时的表现:文本分类: 为文本分配类别(例如,情感分析、主题标注)。问答: 根据给定背景提供问题答案。摘要: 生成较长文本的简洁摘要。机器翻译: 将文本从一种语言翻译到另一种语言。命名实体识别: 识别文本中的实体,如名称、日期和地点。进行下游任务评估的主要原因是为了获得一个衡量实际关联度的指标。困惑度是一个抽象的衡量指标;而情感分析任务上的准确率、命名实体识别上的F1分数,或摘要任务的ROUGE分数,则直接量化了模型达到预期结果的能力。这些指标通常更易于理解,并与部署模型的目标直接相关。考虑两个模型,模型A和模型B,它们都经过大型文本语料库的预训练。import torch import torch.nn as nn from transformers import AutoModelForCausalLM # 模型加载的占位符 # 假设model_A和model_B是已加载的预训练LLM # model_A = AutoModelForCausalLM.from_pretrained("model_a_checkpoint") # model_B = AutoModelForCausalLM.from_pretrained("model_b_checkpoint") # --- 计算困惑度 --- # perplexity_A = calculate_perplexity(model_A, validation_data) # perplexity_B = calculate_perplexity(model_B, validation_data) # print(f"Model A Perplexity: {perplexity_A:.2f}") # 输出:模型A困惑度:15.23 # print(f"Model B Perplexity: {perplexity_B:.2f}") # 输出:模型B困惑度:15.89 # --- 在下游任务上评估:情感分析 --- # 添加分类头(简化示例) # classification_head = nn.Linear(model_A.config.hidden_size, num_labels) # 在情感数据上微调model_A和model_B... # accuracy_A = evaluate_sentiment(model_A_finetuned, sentiment_test_data) # accuracy_B = evaluate_sentiment(model_B_finetuned, sentiment_test_data) # print(f"Model A Sentiment Accuracy: {accuracy_A:.4f}") # 输出:模型A情感准确率:0.9150 # print(f"Model B Sentiment Accuracy: {accuracy_B:.4f}") # 输出:模型B情感准确率:0.8520在这个场景下,模型A和模型B的困惑度分数非常接近,这表明它们在一般意义上具有相似的语言建模能力。然而,当在特定情感分析任务上进行微调和评估时,模型A的表现显著优于模型B。这种下游表现的差异可能源于预训练期间所获取知识的微小差异、模型在微调期间的适应能力,或其对情感表达相关语言的理解。仅仅依靠困惑度会掩盖这种实际能力上的重要区别。{"data": [{"x": ["Model A", "Model B"], "y": [15.23, 15.89], "type": "bar", "name": "困惑度(越低越好)", "marker": {"color": "#4dabf7"}}, {"x": ["Model A", "Model B"], "y": [0.915, 0.852], "type": "bar", "name": "情感准确率(越高越好)", "yaxis": "y2", "marker": {"color": "#20c997"}}], "layout": {"title": {"text": "内在与外部指标比较"}, "yaxis": {"title": "困惑度"}, "yaxis2": {"title": "准确率", "overlaying": "y", "side": "right"}, "legend": {"x": 0.1, "y": -0.3}, "barmode": "group", "height": 350, "width": 500, "margin": {"l": 50, "r": 50, "t": 50, "b": 80}}}比较显示两个模型困惑度相似但在下游任务准确率上有所不同。此外,外部评估有助于发现具体的优点和不足。一个模型可能擅长需要广泛知识的任务(例如开放域问答),但在需要逻辑推理或创意生成的任务上可能表现不佳。对多种下游任务进行评估,能描绘出模型能力更全面的图景,这比任何单一的内在指标所能提供的更为全面。最后,在GLUE(通用语言理解评估)或SuperGLUE等标准化下游基准上进行评估,使得不同模型和研究成果之间能够进行客观比较。这些基准提供精心组织的数据集和既定指标,适用于一系列任务,它们作为衡量该方面进展的共同标准。总之,尽管内在指标对于监测训练过程和评估一般语言建模能力很有用,但在下游任务上的外部评估对于理解和量化模型的实际效用,有意义地比较不同模型,以及指导发展以构建更具能力和更有用的LLM是必不可少的。本章的后续部分将详细说明用于此目的的具体任务、基准和方法。