llm-coding-eval
大模型写代码能力评测
目录说明
- backup/
- 最早版本的评测,测试例子来自真实的用户查询
- 评测体系来自基本的分类
- eval_set/
- 体系化设计的评测用例
- 从简单到复杂的编程粒度设计
- 代码补全能力评测集
- eval_set/humanval-x
- 体系化设计的评测用例
- llm_set/
- 大模型配置列表,配置每一种大模型的元数据
- src/
- 评测源代码
- mian.py 程序入口
同类评测项目
- 斯坦福大学的评测:AlpacaEval Logo Leaderboard https://tatsu-lab.github.io/alpaca_eval/
- https://github.com/the-crypt-keeper/can-ai-code
- https://github.com/THUDM/CodeGeeX/tree/main/codegeex/benchmark
- https://github.com/openai/human-eval
HumanEval-X
HumanEval-X中每个语言的样本,包含了声明、描述和解答,它们之间的组合可以支持不同的下游任务,包括生成、翻译、概括等。我们目前关注两个任务:代码生成与代码翻译。对于代码生成任务,模型将函数声明与文档字符串作为输入,输出函数实现;对于代码翻译任务,模型将两种语言的函数声明与源语言的实现作为输入,输出目标语言上的实现。我们在代码翻译任务中不将文档字符串输入模型,以避免模型直接通过描述生成答案。在两种任务下,我们都采用Codex所使用的无偏pass@k指标: pass@k:=𝔼[1−(n-ck)/(nk)], n=200, k∈(1,10,100)。
样本使用JSON列表格式存储在codegeex/benchmark/humaneval-x/[LANG]/data/humaneval_[LANG].jsonl.gz,每条样本包含6个部分:
task_id: 题目的目标语言与ID。语言为["Python", "Java", "JavaScript", "CPP", "Go"]中之一。
prompt: 函数声明与描述,用于代码生成。
declaration: 仅有函数声明,用于代码翻译。
canonical_solution: 手写的示例解答。
test: 隐藏测例,用于评测。
example_test: 提示中出现的公开测例,用于评测。
评测生成的代码需要使用多种语言编译、运行。我们使用的各编程语言依赖及所用包的版本如下:
依赖 | 版本 |
---|---|
Python | 3.8.12 |
JDK | 18.0.2.1 |
Node.js | 16.14.0 |
js-md5 | 0.7.3 |
C++ | 11 |
g++ | 7.5.0 |
Boost | 1.71.0 |
OpenSSL | 3.0.0 |
go | 1.18.4 |
我们的工作
1、基于清华的HumanEval-X,进行了集成,修改了代码生成任务的结构;
2、多模型配置,可以配置模型参数,以及是调取接口还是本地推理;
3、优化了代码块方法体抽取的逻辑;
4、目前适配了java、python、cpp、js和go等五种语言。
运行命令
下面是一个使用chatgpt来生成python语言测试数据的样例:
python main.py --task_type generate
--input_path eval_set/humaneval-x
--language_type python
--model_name chatgpt
--output_prefix output/humaneval
评估样例:
python main.py --task_type evaluate
--language_type python
--input_path output
--tmp_dir output/tmp/
--n_workers 1
--timeout 10.0
--problem_folder eval_set/humaneval-x/
--output_prefix output/
--model_name chatgpt
测试结果
受限于模型推理速度,目前只测试了pass@1指标。()里面是官方给出的准确率 由于测试是补全代码,在java语言自动化测试中不会给补全的代码补充正确的包,导致大量编译错误,所以效果不是十分准确
python | java | cpp | js | go | |
---|---|---|---|---|---|
chatgpt | 64.02%(67.0%) | 42.68% | 26.22% | 47.00% | 31.70% |
bbt-7B | 0.61% | 1.83% | 1.22% | 1.83% | 0.00% |
bbt-13B | 2.49% | 0.00% | 1.90% | 1.83% | 0.61% |
chatglm2-6B | 7.93% | 5.45% | 0.61% | 6.70% | 1.83% |
codegeex2-6B | 29.90%(35.9%) | 27.43% | 6.70% | 24.40% | 17.68% |
llama2-7B | 5.49%(12.8%) | 8.54% | 1.22% | 3.66% | 6.10% |
baichuan-7B | 7.93%(9.20%) | 1.83% | 0.00% | 6.71% | 6.71% |
chatgpt+codegeex2-6B | 64.02% | 43.90% | 30.49% | 50.66% | 44.51% |
iflycode | 46.95% | 29.87% | 32.91% | 43.29% | 21.34% |
spark | 68.90%(69%) | 36.58%(62%) | 36.58%(52%) | 49.39%(54%) | 41.46% |
skylark | 39.63% | 25.60% | 22.56% | 37.19% | 29.87% |
TODO
1、测试模型的pass@10和pass@100指标。
2、代码翻译类任务还没有适配,同时也需要构造相关的数据。