目录
Datawhale AI 夏令营 第三期逻辑推理学习笔记
本期此项目手册:
https://datawhaler.feishu.cn/wiki/NOVDw5OtLiKJhlkbmoXc8nCinMf
赛题介绍
本次比赛提供基于自然语言的逻辑推理问题,涉及多样的场景,包括关系预测、数值计算、谜题等,期待选手通过分析推理数据,利用机器学习、深度学习算法或者大语言模型,建立预测模型。
初赛数据集为逻辑推理数据,其中训练集中包含500条训练数据,测试集中包含500条测试数据。每个问题包括若干子问题,每个子问题为单项选择题,选项不定(最多5个)。目标是为每个子问题选择一个正确答案。推理答案基于闭世界假设(closed-world assumption),即未观测事实或者无法推断的事实为假。
具体的,每条训练数据包含 content, questions字段,其中content是题干,questions为具体的子问题。questions是一个子问题列表,每个子问题包括options和answer字段,其中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

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



