/AlignBench

多维度中文对齐评测基准 | Benchmarking Chinese Alignment of LLMs

Primary LanguagePython

AlignBench: 多维度中文对齐评测基准

Read this in English

AlignBench 是第一个多维度全面评估中文大模型对齐水平的评测基准。此仓库包含了 AlignBench 的介绍信息、数据和代码。

🔥 近期更新

[2023.12.12] AlignBench 网站 已经正式上线,欢迎大家访问!可以通过网站中的 提交 功能使用 CritiqueLLM 在 AlignBench 上进行评测(5分钟左右即可拿到结果)

📍 基本信息

对于经过指令微调(instruction tuning)的大语言模型(LLMs),与人类意图的对齐程度已成为其实际应用的关键因素。然而,现有的评测基准已经不能准确反映模型在真实场景中的表现和与人类意图的对齐程度,如何对中文大语言模型的对齐水平进行有效评估已经成为了一个重大的挑战。在实际的应用场景中,我们需要采用多样化、开放式、具有挑战性且自动化的评估方法来专门评估模型的对齐水平。

因此,我们构建了 AlignBench,这是一个用于评估中文大语言模型对齐性能的全面、多维度的评测基准。AlignBench 构建了人类参与的数据构建流程,来保证评测数据的动态更新。AlignBench 采用多维度、规则校准的模型评价方法(LLM-as-Judge),并且结合思维链(Chain-of-Thought)生成对模型回复的多维度分析和最终的综合评分,增强了评测的高可靠性和可解释性。

此外,为了便于中文领域研究人员方便快捷地衡量模型的对齐程度,我们开发了一个专用的评测模型——CritiqueLLM,它能够恢复 GPT-4 95% 的评估能力,并在未来将通过易于访问的 API 向研究人员提供。

Overall

AlignBench 的整体框架如上图所示,包括数据构建流程、体系化的分类以及多维度、规则校准的 LLM-as-Judge 评估方法。

想了解 AlignBench 的更多详细信息,请参阅论文:AlignBench

想了解 CritiqueLLM 的更多详细信息,请参阅论文:CritiqueLLM


📦 数据集信息

为了进行系统化的评估,我们根据真实用户指令构建了一个全面的大语言模型(LLMs)能力分类体系。我们分析并总结了用户问题,将其归纳为 8 个主要类别,分别是基本能力、中文理解、综合问答、写作能力、逻辑推理、数学能力、角色扮演和专业知识。AlignBench 的分类体系和数据分布如下表所示。

Category 中文名 #Samples
Fundamental Language Ability 基本任务 68
Advanced Chinese Understanding 中文理解 58
Open-ended Questions 综合问答 38
Writing Ability 文本写作 75
Logical Reasoning 逻辑推理 92
Mathematics 数学计算 112
Task-oriented Role Play 角色扮演 116
Professional Knowledge 专业能力 124

为了反映模型在实际应用中的真实表现,AlignBench 中的数据主要来自 ChatGLM 在线服务中真实用户的问题(少部分为研究人员构造的挑战性问题)。AlignBench 总共包含 683 个高质量评测数据。AlignBench 中的每个样本都包含一个任务性的用户指令、一个高质量的参考答案,以及在我们的分类体系中对应的类别。数据保存在data/data_release.jsonl中,每一行都以json格式包含一个样本。

数据格式如下所示。

  • question_id (integer):问题的唯一标识符。
  • category (string):问题所属的主要类别。
  • subcategory (string):用于进一步分类的次要类别。
  • question (string):实际用户查询。
  • reference (string):这提供了对问题的参考或标准答案。

以下是数学能力类别的一个例子。

{
    "question_id": 1,
    "category": "数学计算",
    "subcategory": "初等数学",
    "question": "有一串彩珠,按“2红3绿4黄”的顺序依次排列。第600颗是什么颜色?",
    "reference": "一组\"2红3绿4黄\"共有9颗珠子。600除以9的商是66,余数是6。因此,第600颗珠子是在第67组的第6颗,即\"2红3绿4黄\"中的第6颗,也就是黄色。所以,第600颗珠子是黄色。"
}

⚙️ 多维度评价方法

为了有效评估响应的质量,AlignBench 目前采用 GPT-4-0613 来分析并随后对响应进行评分。在评估过程中,输入包括用户问题、模型的回复和高质量的参考答案,输出是对模型回复的多维度的分析和最终评分,评分范围从1到10。为了确保可靠性和可解释性,我们实施了以下方法。整个评价流程的示例图如下所示。

Case

  • 单点打分: 对于每个模型的回答,评估方法将给出一个从 1 到 10 的最终评分。

  • 思维链(Chain-of-Thought): 由于评分任务涉及到复杂的推理过程,我们采用了思维链方法来增强评价的可靠性和可解释性。具体来说,我们会引导评价模型在给出最终评分之前,从多个维度生成对模型回答的分析解释。

  • 规则校准: 对于每个问题,我们提供一个高质量的参考答案。为了指导评价模型将模型回答与参考答案进行比较,并生成更加可控的分数,我们提供了详细的评分规则,阐述了分数区间(目前将 1 - 10 五等分)与模型回答的质量之间的关系。这些规则包含在 prompt 中。
  • 多维度分析: 由于不同的任务具有不同的性质和特征,对所有任务应用相同的评估流程是不合理的。因此,我们采用多维度的评分方法来全面评估模型回答。具体来说,我们根据不同的问题类型设置了不同的评估维度,并指导评价模型从指定的多个维度分析模型答案并提供单个维度的分数。这些维度及其定义记录在config中。

🚀 如何在 AlignBench 上评测模型

整个评估过程包含三个步骤:获取待评测模型的生成结果、调用评价模型获取分析和打分,最终计算结果。相应的脚本保存在scripts中,可以修改其中参数之后调用。

  1. 步骤一 获取待评测模型的生成结果

    首先,您需要获得待评测模型的 API 来生成结果,如果是开源模型,您需要自己部署成可以调用获得回复的 API。(此部分不包含在此仓库中)。

    其次,在inference/api_models中实现您自己的 API 调用类,do_nothing类可以作为一个示例。(此类主要用于调用 API,注意 API 类名应与文件名相同)

    第三,修改参数并运行以下脚本以获得待评测模型的生成结果。

    MODEL=do_nothing # TODO 修改模型名称(与您的API调用类相同)
    
    python get_answers.py \
        --model do_nothing \
        --workers 2 \
        --question-file data/data_release.jsonl \
        --save-dir data/model_answer

    待评测模型的回复将被保存在data/model_answer中,以备下一步的评测。

  2. 步骤二 调用评价模型获取分析和打分

    目前我们使用 gpt-4-0613 作为评测模型,之后为了方便中文社区,我们计划以 API 的形式开放 CritiqueLLM 作为 gpt-4 的替代评测模型给研究人员使用。

    首先,在config/multi-dimension.json中填写您的 GPT-4 API 密钥。

    然后,修改并运行以下脚本以获得评价模型的评测结果。

    MODEL=do_nothing # TODO 修改模型名称(与您的API调用类相同)
    
    python judge.py \
        --config-path config/multi-dimension.json \
        --model-name $MODEL \
        --parallel 2 \

    评测结果将保存在data/judgment

  3. 步骤三 最终计算结果

    运行以下脚本以获取保存在data/judgment中的所有模型的最终结果。

    python show_result.py \
        --input-dir data/judgment \
        --ques-file data/data_release.jsonl \
        --save-file data/results/results.xlsx

    计算结果打印出来,同时将以xlsx格式存储在data/results中。


📂 排行榜

我们在 AlignBench 上分别使用gpt-4-0613CritiqueLLM 作为打分模型对 17 个支持汉语的大语言模型(LLMs)进行了系统评测,结果显示和CritiqueLLMgpt-4-0613 具有很高的一致性。

gpt-4-0613 的评测结果:

model Overall Reasoning 中文推理 Language 中文语言
Avg. Math. Logi. Avg. Fund. Chi. Open. Writ. Role. Pro.
模型 总分 推理
总分
数学
计算
逻辑
推理
语言
总分
基本
任务
中文
理解
综合
问答
文本
写作
角色
扮演
专业
能力
gpt-4-1106-preview 8.01 7.73 7.8 7.66 8.29 7.99 7.33 8.61 8.67 8.47 8.65
gpt-4-0613 7.53 7.47 7.56 7.37 7.59 7.81 6.93 7.42 7.93 7.51 7.94
chatglm-turbo(智谱清言) 6.24 5 4.74 5.26 7.49 6.82 7.17 8.16 7.77 7.76 7.24
erniebot-3.0(文心一言) 6.14 5.15 5.03 5.27 7.13 6.62 7.6 7.26 7.56 6.83 6.9
gpt-3.5-turbo-0613 6.08 5.35 5.68 5.02 6.82 6.71 5.81 7.29 7.03 7.28 6.77
chatglm-pro(智谱清言) 5.83 4.65 4.54 4.75 7.01 6.51 6.76 7.47 7.07 7.34 6.89
spark_desk_v2(讯飞星火) 5.74 4.73 4.71 4.74 6.76 5.84 6.97 7.29 7.18 6.92 6.34
qwen-14b-chat 5.72 4.81 4.91 4.71 6.63 6.9 6.36 6.74 6.64 6.59 6.56
baichuan2-13b-chat 5.25 3.92 3.76 4.07 6.59 6.22 6.05 7.11 6.97 6.75 6.43
chatglm3-6b 4.97 3.85 3.55 4.14 6.1 5.75 5.29 6.71 6.83 6.28 5.73
baichuan2-7b-chat 4.97 3.66 3.56 3.75 6.28 5.81 5.5 7.13 6.84 6.53 5.84
internlm-20b 4.96 3.66 3.39 3.92 6.26 5.96 5.5 7.18 6.19 6.49 6.22
qwen-7b-chat 4.91 3.73 3.62 3.83 6.09 6.4 5.74 6.26 6.31 6.19 5.66
chatglm2-6b 4.48 3.39 3.16 3.61 5.58 4.91 4.52 6.66 6.25 6.08 5.08
internlm-chat-7b 3.65 2.56 2.45 2.66 4.75 4.34 4.09 5.82 4.89 5.32 4.06
Chinese-llama-2-7b-chat 3.57 2.68 2.29 3.07 4.46 4.31 4.26 4.5 4.63 4.91 4.13
llama-2-13b-Chinese-chat 3.35 2.47 2.21 2.73 4.23 4.13 3.31 4.79 3.93 4.53 4.71

CritiqueLLM 的评测结果:

model Overall Reasoning 中文推理 Language 中文语言
Avg. Math. Logi. Avg. Fund. Chi. Open. Writ. Role. Pro.
模型 总分 推理
总分
数学
计算
逻辑
推理
语言
总分
基本
任务
中文
理解
综合
问答
文本
写作
角色
扮演
专业
能力
gpt-4-1106-preview 7.58 7.11 7.39 6.83 8.05 7.69 7.07 8.66 8.23 8.08 8.55
gpt-4-0613 6.83 6.41 6.49 6.33 7.26 7.16 6.76 7.26 7.31 7.48 7.56
chatglm-turbo(智谱清言) 6.36 4.99 4.88 5.09 7.73 7.5 7.03 8.45 8.05 7.67 7.7
erniebot-3.0(文心一言) 5.91 4.75 4.34 5.15 7.07 6.46 7.21 7.29 7.73 7.03 6.72
chatglm-pro(智谱清言) 5.73 4.49 4.55 4.43 6.96 6.47 6.81 7.26 7.25 7.29 6.7
gpt-3.5-turbo-0613 5.68 4.85 4.90 4.79 6.52 6.01 5.6 6.97 7.27 6.98 6.29
spark_desk_v2(讯飞星火) 5.51 4.58 4.53 4.62 6.44 5.76 6.29 6.37 7.25 7.03 5.96
qwen-14b-chat 5.41 4.52 4.54 4.50 6.31 6.46 5.84 6.71 6.47 6.38 5.98
baichuan2-13b-chat 5.26 3.96 3.83 4.08 6.56 5.74 6.19 7.03 7.21 6.72 6.49
baichuan2-7b-chat 5.05 3.68 3.23 4.13 6.42 5.72 5.71 7.08 7.41 6.86 5.73
chatglm3-6b 5.01 3.70 3.44 3.95 6.33 6.13 5.72 6.92 7.11 6.31 5.77
internlm-20b 4.97 3.67 3.46 3.87 6.27 5.65 5.52 6.71 6.77 6.35 6.61
qwen-7b-chat 4.74 3.66 3.51 3.80 5.83 6.01 5.52 5.89 6.28 6.16 5.12
chatglm2-6b 4.57 3.32 3.28 3.35 5.83 5.24 5.12 6.68 6.83 5.95 5.15
Chinese-llama-2-7b-chat 3.44 2.42 2.13 2.70 4.46 4.59 4.29 4.39 4.64 4.91 3.94
internlm-chat-7b 3.24 2.10 2.34 1.85 4.39 3.43 3.76 5.37 4.63 5.01 4.15
llama-2-13b-Chinese-chat 3.14 2.35 2.12 2.58 3.93 4.31 2.9 4.34 3.52 4.04 4.47

👏 引用

@misc{liu2023alignbench,
      title={AlignBench: Benchmarking Chinese Alignment of Large Language Models}, 
      author={Xiao Liu and Xuanyu Lei and Shengyuan Wang and Yue Huang and Zhuoer Feng and Bosi Wen and Jiale Cheng and Pei Ke and Yifan Xu and Weng Lam Tam and Xiaohan Zhang and Lichao Sun and Hongning Wang and Jing Zhang and Minlie Huang and Yuxiao Dong and Jie Tang},
      year={2023},
      eprint={2311.18743},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}