今天是2023年12月24日,星期日,北京,天气晴。
我们来继续看看大模型评估的工作。
在前面的工作中,我们说到,ChatGPT可以用来评估两个模型输出的质量,不过ChatGPT一直在迭代升级,不同时间对同一个问题的回复可能会有所不同,评估结果存在无法复现的问题,比如最近一段时间,GPT4进行pointwise打分就出现了很明显的不稳定性。
此外,大模型评估也有几个显著的问题,例如:
位置偏差。位置偏差是指LLM法官更喜欢某个位置的答案,在交换答案位置时更倾向于第一个答案。
知识偏差。当预训练数据缺乏某些种子任务的知识或引入可能不需要的知识时,大模型就无法对开放式任务做出正确的判断。这个可以使用参考答案的方式来提高评估准确性,但是参考答案有时也并不为大模型所理解。
格式偏差。无论是否有参考,判断模型对微调格式都有特定的偏好,格式偏差的原因可能是判断模型与固定的微调模板格式过度拟合。
而最近,已经出现了多个具有代表性开源的大模型打分模型,包括PandaLM、JUDGELM以及CRITIQUELLM,对其实现方式,数据构造细节,以及相关性等评价指标是如何计算的进行了解,很有意义,此外该标注数据,也可以作为rewardmodel的训练数据。
分享出来,供大家一起参考。
一、PandaLM评分模型
《Panda LLM: Training Data and Evaluation for Open-Sourced Chinese Instruction-Following Large Language Models》(https://arxiv.org/abs/2306.05087)
对应的项目地址发布在:https://github.com/WeOpenML/PandaLM
1、训练数据
训练数据收集的目的是创建一个丰富的数据集,使模型能够评估给定上下文中的不同回复,并使用相同的上下文生成评估原因和参考回复。
如图3所示,每个训练数据实例由一个输入元组(指令、输入、回复1、回复2)和一个输出元组(评估结果、评估原因、参考回复)组成。
输入元组中的指令和输入是从Alpaca52K数据集中采样。
回复对由各种指令调整模型生成:LLaMA-7B、Bloom-7B、Cerebras-GPT-6.7B、OPT-7B和Pythia-6.9B,每个都使用Alpaca中相同的指令数据和超参数进行微调。
相应的输出元组包括评估结果、评估的简要说明和参考回复。
其中:
评估结果为“1”或“2”,表示回复1或回复2更好,“0”表示两个回复质量相似。
由于人工标注数百万个输出元组不切实际,并且鉴于GPT-3.5能够在某种程度上评估LLM,因此使用GPT-3.5生成输出元组(其实就是蒸馏GPT-3.5的评分能力)。
如图4所示,精心设计了提示来指导PandaLM训练数据的生成。目标是确保PandaLM不仅优先考虑客观回复的正确性,而且强调关键的主观方面,例如相对简洁、清晰、全面、正式和遵守指示。
具体来说,为了解决GPT-3.5中观察到的关于输入回复顺序的固有偏差,即使有精心设计的提示,如果交换输入回复顺序时评估结果发生冲突,训练数据集中的样本也会被删除,最终获得了包含300K样本的过滤数据集。
2、模型训练
PandaLM基于LLaMA7B参数进行训练,训练了2个epoch。
3、模型有效性评估
为了确保PandaLM-7B的可靠性,创建了一个由人类标记的测试数据集,旨在符合人类偏好。该测试数据集的每个实例都包含一条指令和输入,以及由不同指令调整的LLM生成的两个回复。
回复由LLaMA-7B、Bloom-7B、Cerebras-GPT-6.7B、OPT-7B和Pythia-6.9B提供,所有指令均使用遵循Alpaca的相同指令数据和超参数进行调整。
测试数据采样自self-instruct的多样性评估数据集,其中包括来自Grammarly、维基百科、国家地理和近百个应用程序或网站的数据。
输入和标签完全是人工生成的,由三个不同的人工独立地进行标签标注,过滤后的测试数据集包含1K个样本(原始未过滤的数据集包含2.5K个样本),根据Kappa相关性计算,三个注释器的最终IAA平均得分(一致性得分)分别为0.85、0.86和0.88,表明测试数据集具有相对较高的可靠性。
其中,为了评价对一个标注任务的定义,可以使用标注人员间标注一致性(Inter-Annotator Agreement,IAA)得分来显示标注人员之间的标注差异。
若IAA得分较高,说明任务定义得比较好,而且其他标注人员可以继续进行类似的标注工作。
通常使用称为Kappa统计(Kappa Statistic)的统计度量方法来定义这种标注差异。若在两个标注人员之间进行比较,则通常使用Cohen Kappa,当在多个标注人员间进行比较时,则一般使用Fleiss Kappa。
注意:kappa计算结果为-1~1,但通常kappa是落在0~1间,可分为五组来表示不同级别的一致性:0.0~0.20极低的一致性(slight)、0.21~0.40一般的一致性(fair)、0.41~0.60 中等的一致性(moderate)、0.61~0.80 高度的一致性(substantial)和0.81~1几乎完全一致(almost perfect)。
测试数据的分布包括105个平局实例、422个回复1获胜的实例以及472个回复2获胜的实例。
模型效果,如表2所示,其使用精确率、召回率以及F1值进行计算,与人工标注的一致性并不高。
3、模型的使用
模型可以直接从huggingface中进行加载使用
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained(“WeOpenML/PandaLM-7B-v1”,use_fast=False)
model = AutoModelForCausalLM.from_pretrained(“WeOpenML/PandaLM-7B-v1”)
二、JUDGELM评分模型
《JUDGELM: FINE-TUNED LARGE LANGUAGE MODELS ARE SCALABLE JUDGES》(https://arxiv.org/pdf/2310.17631.pdf)中介绍了大模型评分模型JUDGELM的一些实现细节。
对应的项目地址发布在https://github.com/baaivision/JudgeLM/。
1、训练数据
首先收集105K种子任务作为问题。然后从11个大模型中提取答案,并从答案集中随机抽取一对答案,最后将任务、样本答案对以及可选的参考答案输入到GPT-4,GPT-4会作为裁判生成分数和详细原因。
为了使用如图3所示的详细模板,用来评估无参考答案的例子。
为了让模型能够根据参考答案进行判断,如图4所示,采用包含参考的模板:
一个具体的实例如下:
整个的训练数据放在:https://huggingface.co/datasets/BAAI/JudgeLM-data-collection-v1.0/tree/main/JudgeLM,可以从中找到一些直观的感觉,其列出了对应的各项评估指标。
2、评估的有趣发现
可以从以下的结果中找到对应的实验必要性。
通过将答案与真实情况进行比较,传统指标无法准确判断答案,但LLM评委却能听懂问题和答案,并给出准确的评分和理由。
3、效果验证
为了更好地利用数据集来训练和评估判断模型,将其分为训练部分和验证部分,训练集包含100K个判断样本,而验证集包含5K个。为了进一步分析JudgeLM的扩展能力,用7B、13B和33B参数对JudgeLM进行微调。
对于裁决的结果,将其建模为“评分、判断、推理”。判断模型首先生成答案对的分数。随后,可以得到三种情况的判断结果:如果答案1的分数高于答案2,则“答案1胜”;如果答案2的分数较高,则“答案2胜”。
对于指标,采用客观指标和可靠性指标来综合评估判断模型。
对于客观指标,计算模型的判断结果与真实样本的判断结果之间的一致性(agreement就是acc)、精确度、召回率和F1分数。
至于可靠性指标,首先比较交换LLM答案之前和之后的结果,然后计算一致性(这里又叫作consitency)来衡量判断模型的可靠性。
同样的,可以在pandalm的测试集上进行对比,可以看到如下结果:
judge-lm7B取得了优于PandaLM-7B的效果。
4、模型使用
可以在地址http://218.91.113.230:9004中进行在线体验
另外,https://huggingface.co/BAAI/JudgeLM-13B-v1.0/tree/main等也公开了对应的评测模型。
三、CRITIQUELLM评分模型
《CRITIQUELLM: Scaling LLM-as-Critic for Effective and Explainable Evaluation of Large Language Model Generation》(https://arxiv.org/pdf/2311.18702.pdf),提出了一种名为CRITIQUELLM的评分模型,其中包括基于对话的高质量参考/无参考评估数据的提示方法。
对应的项目地址发布在https://github.com/thu-coai/CritiqueLLM中,但目前只有reeadme文件,模型并未开源。
1、评估思路
给定用户查询、LLM生成的文本和参考文本,其目标是获得包括评估分数s和评估解释e的批评以支持这一点分数。
其方法包括三个步骤。首先构建一个训练数据集,其中包含用户查询和具有不同生成能力级别的模型生成的回复。
为了自动收集高质量的参考和无参考评估注释,设计了一种基于对话的提示方法:
首先在第一轮中,提示GPT4旨在获得高质量的参考结果,其中包括将生成的文本与参考文本进行比较的详细标准。这些标准可以帮助GPT-4理解文本质量和特定分数范围之间的映射,从而产生相对平滑的分数分布。第二轮提示GPT-4修改引用的批评,删除提及引用的内容,并获得无引用的评估结果。
如对应的prompt如下:
然后,对自动构建的带有类似提示的评估数据进行监督微调,微调阶段将最大序列长度设置为 7,000,批量大小设置为64,训练epoch数为5。最佳checkpoint的选择标准是验证集上的 Pearson相关性。
最后在推理过程中,在有参考和无参考设置中生成高质量的评论(包括分数和解释)。
2、训练数据构建
首先是查询增强,为了构建用于批评生成的训练数据,必须首先获得涵盖不同任务类别的用户查询,采用AlignBench(https://github.com/THUDM/AlignBench,https://arxiv.org/pdf/2311.18743.pdf)的任务分类,包括八个主要任务,包括归纳为8个主要类别,分别是基本能力、中文理解、综合问答、写作能力、逻辑推理、数学能力、角色扮演和专业知识。
首先收集706个公开可用的用户查询,并手动将它们分类到这些预定义的组中,利用这组种子查询,使用ChatGPT获取大约260K的增强查询。
然后根据多样性和难度进行严格的过滤,例如:
为了提高这些数据的多样性,依次采用ROUGE-L(带有种子查询)和Self-BLEU以获得4,223个不同的增强查询。
为了进一步提高数据质量并控制难度方差,利用ChatGPT根据质量和难度对每个查询进行评分,并抽取了3,351个具有平衡难度的高质量查询,对应的prompt设置如下:
最后,平衡每个任务类型中的数据量并获取一组1,000个查询。
3、效果评估
采用AlignBench作为基准数据集,归纳为8个主要类别,分别是基本能力、中文理解、综合问答、写作能力、逻辑推理、数学能力、角色扮演和专业知识,一共是683条数据集。
数据集地址在:https://github.com/THUDM/AlignBench/blob/master/data/data_release.jsonl
在指标选择上,使用Pearson(r)、Spearman(ρ)和Kendall(τ)系数来计算。
其中:
Pearson相关系数(r)的计算公式为:r = cov(X, Y)/(σX * σY),其中cov(X, Y)表示X和Y的协方差,σX和σY表示X和Y的标准差。相关系数的取值范围在-1到1之间,当r>0时表示正相关,r<0时表示负相关,r=0时表示无相关关系。
Spearman斯皮尔曼相关系数被定义成等级变量之间的皮尔逊相关系数。对于样本容量为n的样本,n个原始数据被转换成等级数据。
原始数据依据其在总体数据中平均的降序位置,被分配了一个相应的等级。如下表所示:
Kendall(τ)系数,也就是肯德尔秩相关(Kendall Rank Correlation),这块,文章(https://www.6hu.cc/archives/128568.html)说的比较清楚,引用过来:
Kendall(肯德尔)系数的界说:n个同类的计算目标按特定特点排序,其他特点一般是乱序的。同序对(concordant pairs)和异序对(discordant pairs)之差与总对数(n(n-1)/2)的比值界说为Kendall(肯德尔)系数。*
与斯皮尔曼秩相关相似的是,肯德尔相关也是一种秩相联系数,是根据数据目标的秩(rank)来进行两个(随机变量)之间的相关联系(强弱和方向)的评价。所剖析的目标目标应该是一种有序的类别变量,比如名次、年龄段、肥壮等级(重度肥壮,中度肥壮、轻度肥壮、不肥壮)等。
不同的是,斯皮尔曼相关是根据秩差(比如说,小明在班级中的前史成果排名为10,英语成果排名为4,那么在这个班级的学生的前史成果和英语成果的斯皮尔曼相关剖析中,小明的成果的奉献便是(10-4=6) )来进行相关联系的评价;而肯德尔相关则是根据样本数据对之间的联系来进行相联系数的强弱的剖析,数据对可以分为共同对(Concordant)和分歧对(Discordant)。
结果如下:
其中的textlevel和system-level没有太看明白。
但是,不同的任务,应该会要有不同的指标,如下:
4、效果使用
该项目并未开源,只有readme文件,但是对于align-bench上,可以自动上传数据,然后得到CRITIQUELLM的得分。
可以在地址:https://llmbench.ai/align进行提交。
总结
本文主要介绍了PandaLM、JUDGELM以及CRITIQUELLM,对其实现方式,数据构造细节,以及相关性等评价指标是如何计算的,这块对于强化我们对评估的认知很有帮助。
感兴趣的可以去看源代码,会有更多收获。
参考文献
1、https://arxiv.org/pdf/2310.17631.pdf
2、https://arxiv.org/pdf/2311.18702.pdf
3、https://www.6hu.cc/archives/128568.html
4、https://arxiv.org/pdf/2311.18743.pdf
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。