让我们用大模型们继续做题看他们能做对多少

对于小白来说,面对“如何让大语言模型做题”这一话题,脑海中呈现出的便是用户自己一题一题地输入给LLMs。然而,对于程序员来说,该如何让它自动地读取题库、进而测评呢?谭亲怡同学借这篇稿子具体介绍了如何将LLMs、Azure OpenAI服务和GaoKao-Bench项目配合使用,以测评不同大语言模型针对不同学科的做题能力。这里的题是指高考题,高考题啊,评测结果说老实话让我大吃一惊!

以下为评测方式的说明:

调用Azure OpenAI服务

完整流程可至Tutorial.pdf中查看

  1. 我们需要使用以下命令安装 OpenAI Python 客户端库

pip install openai
  1. 注册Azure AI Studio账号,转到Azure AI Studio中的资源和密钥,检索api key以及endpoint(两个必要参数),使得后续能成功调用Azure OpenAI

代码修改

以下将逐步展示本项目修改原代码的部分,完整流程可至Tutorial.pdf中查看

  1. 在vscode中打开GaoKao-Bench项目(确保以及克隆其仓库),在openai_gpt4.py中更改引用包的函数为AzureOpenAI

from openai import AzureOpenAI

更改base_url

def __init__(self, api_key_list:List[str], base_url: str="your_base_url", organization: str=None, model_name:str="your_model_name", temperature:float=0.3, max_tokens: int=4096):
  1. 加入endpoint以及api key这两个参数

azure_endpoint="your_azure_endpoint",
                    api_key="your_api_key",
                    api_version="your_api_version"
  1. 在objective_bench.py中将字符编码改为utf-8,确保能成功编码

with open("Obj_Prompt.json", "r",encoding='utf-8') as f:
  1. 在bench_function.py中修改原字段的错误(将standard_answer改为answer),使得可以读取answer的json格式

standard_answer = data[i]['answer']
  1. 在bench_function.py中修改写入文件的方式为每循环一次写一次,使得程序员可以同步做题情况,代替了原代码写完所有的题再输出的形式,避免了因为一个卡顿而无法获得输出的情况(以下所示为修改后的字段)

def choice_test_changed(**kwargs):
    """

    Get answers of the Choice Questions

    """

    model_api = kwargs['model_api']
    model_name = kwargs['model_name']
    start_num = kwargs['start_num']
    end_num = kwargs['end_num']
    data = kwargs['data']['example']
    keyword = kwargs['keyword']
    prompt = kwargs['prompt']
    question_type = kwargs['question_type']
    save_directory = kwargs['save_directory']

    file_name = model_name + "_seperate_" + keyword + f"_{start_num}-{end_num - 1}.json"
    file_path = os.path.join(save_directory, file_name)

    for i in tqdm(range(start_num, end_num)):

        index = data[i]['index']
        question = data[i]['question'].strip() + '\n'
        year = data[i]['year']
        category = data[i]['category']
        score = data[i]['score']
        standard_answer = data[i]['answer']
        answer_lenth = len(standard_answer)
        analysis = data[i]['analysis']
        # 调用模型
        model_output = model_api(prompt, question)
        # 提取 model_answer
        model_answer = extract_choice_answer(model_output, question_type, answer_lenth)
        # TODO: which content of temp we expect

        dict = {
            'index': index,
            'year': year,
            'category': category,
            'score': score,
            'question': question,
            'standard_answer': standard_answer,
            'analysis': analysis,
            'model_answer': model_answer,
            'model_output': model_output
        }

        with open(file_path, 'a', encoding='utf-8') as f:
            if f.tell() == 0:
                # If it's the first entry, write the opening brace and the keyword
                f.write('{\n"keyword": "' + keyword + '",\n"example": [\n')
            json.dump(dict, f, ensure_ascii=False, indent=4)
            if i < end_num - 1:
                f.write(',\n')  # Add a comma after each entry except the last one
            else:
                f.write('\n]}\n')

        time.sleep(5)
  1. 在objective_bench.py中写入需要测试的LLM(可以任意选择Azure AI Studio中的基本模型),以gpt-4o为例

model_name = "gpt-4o"
  1. 缩小数据集为数学(单选20题)、生物(单选10题)、政治(单选10题)、物理(多选10题)、化学(单选10题)、英语(单选10题+七选五50题)、语文(单选10题)、地理(单选14题),以及历史(单选2题)(这里可见)

修改完成,可对比不同大语言模型的做题能力

测评结果

(本项目测评的题目均为客观题)

获得不同大语言模型做不同学科的题目的正确率为 892e30b60a3a3891469690f698031295.png

将学科分类为文理科后,获得数据 7e5077de111744aa8afac3cf558c471b.png

总结

1. 学科比较

① 数学、地理、生物、英语:这四个学科中,gpt-4o-mini的正确率都高于gpt-35-turbo。特别是在数学和地理学科上,它的正确率超过85%,而gpt-35-turbo的正确率只有约60%

② 物理、化学:这两个学科中,两个模型都表现不佳,而gpt-35-turbo的表现最弱(两个学科都只有20%)

③ 政治、语文:这两个学科两个模型表现都不太理想,然而gpt-4o-mini的表现仍然优于gpt-35-turbo

2. 模型比较

① gpt-4o-mini

·理科:正确率76%,表现相对较好,具有较高正确性

·文科:正确率略低于理科,为62.5%,但也相对稳定

② gpt-35-turbo

·理科与文科的表现都较差,正确率不高于50%,但相比较而言文科正确率略高

③ gpt-4o

·理科:正确率高达94%,是所有模型中在理科题目上表现最好的,非常突出

·文科:虽然没有得到文科数据,但从理科的表现来看,可以推测它在文科的表现上不会太差

3. 总体趋势

①gpt-4o-mini在所有学科的表现上均优于gpt-35-turbo,但与自己相比,在个别学科(如政治和化学)中表现也有短板

②gpt-4o-mini在理科题目上的表现优于文科,且均优于gpt-35-turbo

③总体来看,gpt-4o在理科方面表现最佳,gpt-4o-mini次之,最后是gpt-35-turbo

致谢

非常感谢GaoKao-Bench项目开源者@Zong Yi@piglaker@chunyang Li

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值