github:github.com/WeOpenML/Pa…
1 技术背景
上图所示是使用instruction-tuing方法训练LLM时的整体流程。每次迭代都需要对模型进行优化且评价。目前,进行大模型性能评估主要有两种方式:
- 基于LLM的评估方法:通过合适的prompt design使开源LLM具有评估模型的能力;
- 基于人工评价的方法:通过人工的方式来对模型进行评估,具体为多人评估同一条数据取平均。
但当我们考虑下面的场景时,这两种方法均不能很好地满足需求:
这里我摘抄了PandaLM知乎文章的内容:
- “赵老师,我们用不同基座和参数训练了「几版」大模型,看了一些样例效果都还行,最后上线哪个呀?”
- “周师兄,怎么今天问ChatGPT的答案跟一个月前「不一样」?OpenAI更新了模型吗?评估实验怎么办?”
- “李哥,标注员太贵了,要30块钱才能请三个不同的标注员标一条评估数据,我们的「经费」快烧不起啦!”
- “小唐,这批数据是公司的「机密数据」,你可不能发给第三方公司去获得评测结果,保密红线可别忘了!”
- ……
可以看到,在实际训练和上线LLM之前,有几个问题需要考虑:
- 可靠性:如何对模型进行高效的评估,如何有效确定多个训练版本的优劣;
- 基于LLM的评估方法:只能调用相应API,访问受限;
- 基于人工评价的方法:主观性强且耗时长。
- 可复现性:如何保证用于评估方法的稳定性,即相同的输入总是产生相同的输出;
- 基于LLM的评估方法:模型版本无法人为控制随时可能升级,且内部评价算法不透明,可能存在不可控的随机种子等;
- 基于人工评价的方法:不同人对不同输出的评价不同,带有强烈的主观色彩。
-
评价费用:如何降低评估模型所需费用,显然两种方式均需高昂的费用;
-
隐私数据保密:如何防止公司隐私数据泄露,显然两种方法均会泄露。
基于以上考虑,作者提出了PandaLM模型,用于对大模型进行有效评估。
2 整体流程
如上图所示,给定输入(instruction,input,response1,response2),PandaLM输出(result,evalutation,reference response),即:
- 比较结果:即response1和2质量相似,response1更好或response2更好,这里作者使用0,1,2进行编码;
- 评价理由:即为什么给出上面的结果;
- 参考回答:即PandaLM期望得到怎样的回答。
3 训练细节
具体训练细节等待论文发布
4 训练测试数据生成
训练数据采用self-instruct方式生成,self-instruct简单来说分为以下几步:
-
进行良好的prompt design使LLM能够生成所需要的数据;
-
对重复度高的数据进行清理(这里不会对人类所认为的低质量数据进行过滤);
-
使用过滤后的数据训练模型直到产生的数据符合要求为止。
下图是训练数据实例:
其中instructions和inputs是从Alpaca 52K data上采样得到的,两个response是作者微调得到的LLaMA-7B, Bloom-7B, Cerebras-GPT-6.7B, OPT-7B and Pythia-6.9模型提供的。之后的outputs应该是作者通过self-instruct得到的。具体的细节需要等论文发布。
测试数据是从self-instruct中的人工评价数据中进行采样,这些数据是人工进行标注的(3人),覆盖了多个领域。作者删除了其中IAA(Inter Annotator Agreement)小于0.85的数据来确保评价结果的单一性。
5 方法评价
优势:PandaLM模型代码及权重开源可在本地部署且无需人工参与,
-
可控性强:由于代码开源,因此可以自行控制随机种子及模型版本来保证结果的可复现性;
-
成本低廉:无需线上API及额外的人工费用;
-
防止隐私数据泄露:模型本地部署,无需上传数据;
-
评估水平良好:下表显示了PandaLM对比chatgpt的结果
局限性:
以我的角度来看,PandaLM需要输出对应的reference response,是否可以认为PandaLM的性能在所评测的领域必须强于其所评测的模型。否则相当于水平较差的学生来评估水平较好的老师,我认为无法保证评估结果的可靠性。
但当开源的PandaLM性能更强时,为何要采用这些需要评测的模型而不直接使用更好的PandaLM呢。chatgpt不是开源的可以理解,但PandaLM这种模型已经开源,为什么不直接采用它呢。这一点值得思考…
参考资料
PandaLM: 评估大模型的大模型, 保护隐私、可靠、可复现,三行代码即可调用 (zhihu.com)