数据集:

wellesley-easel/StudentEval

语言:

en

大小:

1K<n<10K

预印本库:

arxiv:2306.04556

许可:

openrail
英文

学生评估:代码大语言模型的学生编写提示基准

介绍

StudentEval是一个由80名学生编写的48个问题的1,749个提示的数据集,这些学生仅完成了一个学期的Python编程课程。据我们所知,这是第一个每个问题和参与者都有多个提示的数据集。我们为每个问题-参与者对标识了四个关键的不相交的子集:

  • 第一次成功:第一次尝试生成了正确的代码。
  • 第一次失败:第一次尝试失败,参与者继续下一个问题。
  • 最后一次成功:最后一次尝试生成了正确的代码。
  • 最后一次失败:最后一次尝试失败,参与者继续下一个问题。

在实验过程中,我们为每次尝试生成了一个完成。然而,我们可以将这些提示作为一个基准,通过重复抽样完成来计算每个子集的通过率@k。

示例项

对于total_bill问题,我们向学生显示了以下签名和输入/输出示例:

def total_bill(grocery_list, sales_tax):
Input Output
[['apples', 6, 0.99],['milk', 1, 1.49],['bread', 2, 3.50]], 0.07 15.44
[['apples', 6, 0.99],['milk', 1, 1.49],['bread', 2, 3.50]], 0.0 14.43
[['bread', 2, 3.50]], 0.5 10.5

以下是StudentEval中一些成功的提示示例:

  • 函数接受多个列表,每个列表由一个字符串、一个整数和一个数字组成,以及一个额外的数字“sales tax”。函数将每个列表中的整数和数字相乘,并将它们累加到所有列表中,得到“total”。然后将“total”乘以“sales tax”,并将该值添加到“total”,截断为两位小数输出。
  • 将索引1和2中存储的值的乘积相加,并四舍五入到最接近的小数点后两位。
  • 你将有两个输入,一个是列表的列表,另一个是税率。对于列表中的每个列表,将第一个和第二项的整数相乘并加起来,然后将其乘以税率加1。如果结果小数位数超过两位,则将其缩短为两位小数。
  • 以下是一些不成功的提示示例:

  • 该函数接受一个购买的物品列表、购买的物品数目、每个物品的价格和总销售税额。将购买的数量与每个物品的价格相乘,得到总金额。然后将销售税乘以总金额的结果,将乘法的结果添加到总价格上。然后将总价格作为输出返回。
  • 接受一个杂货列表和一个销售税的值。杂货列表包含一个列表,每个物品的名称、数量和价格,顺序如下。返回一个浮点数,即销售税乘以所有商品数量*价格的总和
  • 输入一个列表,其中第0个索引是一个包含列表的列表,第1个索引是一个整数。对于列表中的每个列表,对于每个列表将列表中的第一个和第二个索引的整数相乘。添加每个列表的乘积。然后,乘以输入列表中第一个索引的整数加1。
  • 如何使用StudentEval评估LLM

    运行StudentEval的代码基于 BigCode Evaluation Harness

  • 下载我们BigCode Evaluation Harness的分支:
  • git clone https://github.com/arjunguha/bigcode-evaluation-harness/
    
  • 安装其依赖项(请参阅README文件)。
  • 运行studenteval任务。以下命令评估SantaCoder:
  • python3 main.py --model bigcode/gpt_bigcode-santacoder --tasks studenteval --max_length_generation 512 --n_samples 20 --batch_size 20 --precision bf16 --allow_code_execution
    

    并将产生类似以下的输出:

    Selected Tasks: ['studenteval']
    Loading tokenizer and model (in bf16)
    100%|_______________________________________________________________________________________________________________________________________________________________________________| 1/1 [00:00<00:00, 519.93it/s]
    100%|_______________________________________________________________________________________________________________________________________________________________________________| 1/1 [00:00<00:00, 680.12it/s]
    number of problems for this task is 1027
    100%|__________________________________________________________________________________________________________________________________________________________________________| 1027/1027 [32:51<00:00,  1.92s/it]
    generations were saved at generations.json
    Evaluating generations...
    100%|_______________________________________________________________________________________________________________________________________________________________________| 20540/20540 [01:21<00:00, 252.84it/s]
    {
      "studenteval": [
        {
          "group": "First Failure",
          "pass1": 0.022333333333333334
        },
        {
          "group": "First Success",
          "pass1": 0.3195187165775401
        },
        {
          "group": "Last Failure",
          "pass1": 0.02195121951219512
        },
        {
          "group": "Last Success",
          "pass1": 0.21405405405405406
        }
      ],
      "config": {
        "model": "bigcode/gpt_bigcode-santacoder",
        "temperature": 0.2,
        "n_samples": 20
      }
    }
    

    此命令在Ampere系列GPU上使用了5GB VRAM,生成完成大约需要30分钟,使用8个核心执行完成需要大约10分钟。

    • --precision bf_16需要Ampere或更新的GPU。如果需要,可以去掉它,但会需要一点更多的内存。
    • 我们在论文中使用--n_samples 200,但--n_samples 20速度更快,结果非常接近我们报告的结果。

    论文和引用

    论文: https://arxiv.org/abs/2306.04556

    @misc{studenteval,
          title={StudentEval: A Benchmark of Student-Written Prompts for Large Language Models of Code}, 
          author={Hannah McLean Babe and Sydney Nguyen and Yangtian Zi and Arjun Guha and Molly Q Feldman and Carolyn Jane Anderson},
          year={2023},
    }