Datawhale AI 夏令营 第三期逻辑推理学习笔记

Datawhale AI 夏令营 第三期逻辑推理学习笔记
本期此项目手册:
https://datawhaler.feishu.cn/wiki/NOVDw5OtLiKJhlkbmoXc8nCinMf

赛题介绍

本次比赛提供基于自然语言的逻辑推理问题,涉及多样的场景,包括关系预测、数值计算、谜题等,期待选手通过分析推理数据,利用机器学习、深度学习算法或者大语言模型,建立预测模型。

初赛数据集为逻辑推理数据,其中训练集中包含500条训练数据,测试集中包含500条测试数据。每个问题包括若干子问题,每个子问题为单项选择题,选项不定(最多5个)。目标是为每个子问题选择一个正确答案。推理答案基于闭世界假设(closed-world assumption),即未观测事实或者无法推断的事实为假。

具体的,每条训练数据包含 content, questions字段,其中content是题干,questions为具体的子问题。questions是一个子问题列表,每个子问题包括optionsanswer字段,其中options是一个列表,包含具体的选项,按照ABCDE顺序排列,answer是标准答案。
数据集格式如下:

{
   
   'id': 'round_train_data_001',
 'problem': '有一个计算阶乘的递归程序。该程序根据给定的数值计算其阶乘。以下是其工作原理:\n\n当数字是0时,阶乘是1。\n对于任何大于0的数字,其阶乘是该数字乘以其前一个数字的阶乘。\n根据上述规则,回答以下选择题:',
 'questions': [
 			   {
   
   'question': '选择题 1:\n3的阶乘是多少?\n',
                 'options': ('3', '6', '9', '12'),
                 'answer': 'B'},
               {
   
   'question': '选择题 2:\n8的阶乘是多少?\n',
                 'options': ('5040', '40320', '362880', '100000'),
                 'answer': 'B'},
               {
   
   'question': '选择题 3:\n4的阶乘是多少?\n',
                 'options': ('16', '20', '24', '28'),
                 'answer': 'C'},
               {
   
   'question': '选择题 4:\n3的阶乘是9吗?\n',
                 'options': ('是', '否'),
                 'answer': 'B'}
              ]
}

测试集中不带answer字段,待推理阶段输出测试结果为提交文件。

本次评估指标为所有子问题的回答准确率,每个子问题权重相同。满分为1。

学习计划
在这里插入图片描述

Task1——跑通baseline

调用大模型api,推理输出结果文件提交评分
Task1用的baseline代码讲解见task2。——数据处理、多线程调用api等。
采用qwen1.5-1.8b-chat。灵积平台有其他限时免费开放的模型,如qwen2-1.5b-instruct。

  • 申领大模型key:https://dashscope.console.aliyun.com/apiKey
    (开通 DashScope(阿里云灵积平台) 可以获赠一些其他模型的限时免费使用额度,大部分有效期为30天。)
  • 算力平台使用魔搭notebook。选择CPU环境,此task是调用大模型的api进行访问,利用多线程提高效率。

结果

不做修改直接运行baseline,由于网络或其他原因,部分题目丢失,其子问题都默认选A。分值只有0.3494。
听群内说72B大模型能到0.8+,而7B加微调也能到0.8。


Task2——baseline代码解析

对task1的baseline代码进行讲解https://datawhaler.feishu.cn/wiki/CvNRwdXDHimxJskZaArcvYqDnIc

整体代码介绍
整体代码主要包括答案生成纠错与结果文件生成两个大模块。
答案生成部分包括大模型的处理函数、大模型返回结果抽取、多线程处理及答案生成的启动。
这里代码核心是大模型部分,动手能力强的小伙伴可以从这里入手开始自己的上分之路~为了保证整体代码性能使用多线程处理请求。
纠错与结果生成部分存在的目的是由于目前使用了api调用在线开源大模型,因为网络、模型能力等原因会导致有一些结果会出现缺失。(比如大模型回答时,没有明确给出ABCD的结果,而返回的空值。也有时因为网络retry模块机会使用结束后,依然没有提取到结果会跳过某个问题。)
在这里插入图片描述

部分核心代码

注意以下为ipynb的内容,按顺序执行,启动函数后,才逐步执行去重、纠错、补错、存储结果文件(略)。
——注意官方代码与后台评分机制契合,无需过多在意数据构成和保存方式。可自己加入一些策略上分,最后保存内容符合后台评分所需即可。
环境

!pip install scipy openai tiktoken retry dashscope loguru

# 注意:这里需要填入阿里云灵积平台申请的key。
dashscope.api_key="sk-"

import包略……

api调用大模型

def call_qwen_api(MODEL_NAME, query):
    # 这里采用dashscope的api调用模型推理,通过http传输的json封装返回结果
    messages = [
        {
   
   'role': 'user', 'content': query}]
    response = dashscope.Generation.call(
        MODEL_NAME,
        messages=messages,
        result_format='message',  # set the result is message format.
    )
    if response.status_code == HTTPStatus.OK:
        print(response)
        return response['output']['choices'][0]['message']['content']
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))
        raise Exception()

api_retry 这个函数是当大模型调用api时可能会导致出错中断的问题,为了保证每个问题都被大模型处理过,我们需要设置一个反复尝试的函数。# 最大尝试次数5次 # 再次尝试等待时间 60秒。如果出现错误我们存储到日志文件。

def api_retry(MODEL_NAME, query):
    # 最大尝试次数
    max_retries = 5
    # 再次尝试等待时间
    retry_delay = 60  # in seconds
    attempts = 0
    while attempts < m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值