Datawhale AI 夏令营——AI+逻辑推理——Task1

# Datawhale AI 夏令营

夏令营手册:从零入门 AI 逻辑推理

比赛:第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估

代码运行平台:魔搭社区

比赛任务

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

任务:构建一个能够完成推理任务的选择模型

  • 运用机器学习模型或者深度学习模型解决推理问题。或者利用训练集数据对开源大语言模型进行微调。

数据集介绍

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

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

数据集格式如下:

  • round1_train_data.jsonl : 每一行代表一条反应
{'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'}]
}

测试集 round1_test_data.jsonl 不包含answer字段。

跑通baseline

模型使用阿里云的大模型API,调用模型API来运行,运行环境使用魔搭社区,好处是可以无需在本地环境部署大模型和安装Python环境,不需要担心硬件等资源问题,可以进行快速开发
请添加图片描述

编写Prompt

这里定义了一个生成推理问题提示的模板,并使用标准化模式输出,方便后续处理和分析。

# 这里定义了prompt推理模版def get_prompt(problem, question, options):options = '\n'.join(f"{'ABCDEFG'[i]}. {o}" for i, o in enumerate(options))prompt = f"""你是一个逻辑推理专家,擅长解决逻辑推理问题。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请逐步分析问题并在最后一行输出答案,最后一行的格式为"答案是:A"。题目如下:### 题目:
{problem}### 问题:
{question}
{options}
"""# print(prompt)return prompt

数据处理

has_complete_answer 检查所有问题是否都有答案answer。

filter_problems是对问题进行去重和保证每个问题都有完整的答案。创建一个结果列表result和问题集合problem_set,遍历输入的数据,对每一条数据都检查其"problem"是否在problem_set内,当问题存在,在结果列表result中找到对应的问题,并通过has_complete_answer检查是否有完整答案,如果有则用当前的item替换已存在的item;当问题不存在,如果问题有完整答案,则将其添加到 result,而问题则添加到 problem_set,最终返回过滤后的结果列表result

def has_complete_answer(questions):# 这里假设完整答案的判断逻辑是:每个question都有一个'answer'键for question in questions:if 'answer' not in question:return Falsereturn Truedef filter_problems(data):result = []problem_set = set()for item in data:# print('处理的item' ,item)problem = item['problem']if problem in problem_set:# 找到已存在的字典for existing_item in result:if existing_item['problem'] == problem:# 如果当前字典有完整答案,替换已存在的字典if has_complete_answer(item['questions']):existing_item['questions'] = item['questions']existing_item['id'] = item['id']breakelse:# 如果当前字典有完整答案,添加到结果列表if has_complete_answer(item['questions']):result.append(item)problem_set.add(problem)return result

提交结果

初始提交的结果为0.6514,在研究代码后,通过更换其他模型,同为QWEN模型,结果得到了显著提高,说明模型的大小对于推理结果的好坏有至关重要的作用。

请添加图片描述

总结

模型开始使用baseline的 qwen2-7b-instruct 模型,后续更改使用 qwen-plus,在不更改baseline代码的情况下,仅仅依靠模型性能就能将模型的推理能力提升到一个较高的水平,但是这种提升只能说明模型能力的强弱,不能证明调优的好坏,后续计划使用RAG和Agent技术对模型进行推理能力的定向调优,提升模型的推理能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/876677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React Native 与 Flutter:你的应用该如何选择?

Flutter 和 React Native 都被认为是混合应用程序开发中的热门技术。然而,当谈到为你的项目使用框架时,你必须考虑哪一个是最好的:Flutter 还是 React Native? 本篇文章包含 Flutter 和 React Native 在各个方面的差异。因此&…

Windows 10 安装 WSL、安装 Go 以及配置环境变量的详细教程

安装 WSL 和 Ubuntu 启用 WSL 功能 以管理员身份打开 PowerShell。 运行以下命令以启用 WSL 功能: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart启用虚拟机平台 继续在管理员 PowerShell 中运行以下命令以启…

正则表达式与文本处理

目录 一、正则表达式 1、正则表达式定义 1.1正则表达式的概念及作用 1.2、正则表达式的工具 1.3、正则表达式的组成 2、基础正则表达式 3、扩展正则表达式 4、元字符操作 4.1、查找特定字符 4.2、利用中括号“[]”来查找集合字符 4.3、查找行首“^”与行尾字符“$”…

【Golang 面试 - 进阶题】每日 3 题(四)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

Lesson 52 What nationality are they? Where do they come from?

Lesson 52 What nationality are they? Where do they come from? 词汇部分 the U.S. 美国 全称:The United States of America    美利坚合众国 其他称呼:the States      the U.S.A.      Uncle Sam Brazil n. 巴西 Brazilian a. 巴…

LeetCode算法——滑动窗口矩阵篇

1、长度最小的子数组 题目描述&#xff1a; 解法&#xff1a; 设一个 for 循环来改变指向窗口末尾的指针&#xff0c;再不断抛弃当前窗口内的首元素 最终确定满足条件的最小长度 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int …

duilib中设置窗口透明度的接口CPaintManagerUI::SetTransparent有问题导致使用duilib窗口实现异形窗口无效的排查

目录 1、duilib框架中设置窗口透明度的代码说明 2、UpdateLayeredWindow调用失败,发现添加的WS_EX_LAYERED风格被删除了 3、窗口有WS_EX_LAYERED风格了,但UpdateLayeredWindow调用依旧失败 4、如何知道SetLayeredWindowAttributes函数调用之后再调用UpdateLayeredWindow…

netty构建http服务器

Netty 是一个高性能的异步事件驱动的网络应用框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。要使用 Netty 搭建一个支持 HTTP 方法&#xff08;GET, POST, PUT, DELETE&#xff09;的 HTTP 服务器&#xff0c;可以按照以下步骤进行操作。 准备工作 添加依赖…

苹果电脑暂存盘已满怎么清理 Mac系统如何清理磁盘空间 清理MacBook

Mac电脑用户在长时间使用电脑之后&#xff0c;时常会看到“暂存盘已满”的提示&#xff0c;这无疑会给后续的电脑使用带来烦恼&#xff0c;那么苹果电脑暂存盘已满怎么清理呢&#xff0c;下面将给大家带来一些干货帮你更好地解决这个问题。 首先我们要搞明白为什么暂存盘会满&…

c++ 智能指针shared_ptr与make_shared

shared_ptr是C11引入的一种智能指针&#xff0c;‌它允许多个shared_ptr实例共享同一个对象&#xff0c;‌通过引用计数来管理对象的生命周期。‌当最后一个持有对象的shared_ptr被销毁时&#xff0c;‌它会自动删除所指向的对象。‌这种智能指针主要用于解决资源管理问题&…

select count小坑

count(字段&#xff09;如果字段有NULL则不会统计进来&#xff0c;count(1)和count(*)则没有这个问题

警务平台app

智慧公安以大数据、云计算、人工智能、物联网和移动互联网技术为支撑&#xff0c;以“打、防、管、控”为目的&#xff0c;综合研判为核心&#xff0c;共享信息数据资源&#xff0c;融合业务功能&#xff0c;构建公安智慧大数据平台&#xff0c;实现公安信息数字化、网络化和智…

【运维自动化-配置平台】模型及模型关联最小化实践

蓝鲸智云配置平台&#xff0c;以下简称配置平台 我们知道主机是配置平台最常见的管控资源对象&#xff0c;在业务拓扑里可以通过划分模块来清晰的可视化管理&#xff1b;那其他资源如何通过配置平台来纳管呢&#xff0c;比如网络设备交换机。场景需求&#xff1a;如何把交换机…

C++ 指针各类型详细解析

文章目录 1. 内存地址 2. 指针 3. 使用指针 4. Null 指针 5. 指针的算术运算 递增一个指针 递减一个指针 指针的比较 6. 指针和数组 7. 指针数组 8. 指向指针的指针&#xff08;多级间接寻址&#xff09; 9. 传递指针给函数 1. 内存地址 通过指针&#xff0c;可以…

【前端 10】初探BOM

初探BOM&#xff1a;浏览器对象模型 在JavaScript的广阔世界中&#xff0c;BOM&#xff08;Browser Object Model&#xff0c;浏览器对象模型&#xff09;扮演着举足轻重的角色。它为我们提供了一套操作浏览器窗口及其组成部分的接口&#xff0c;让我们能够通过编写JavaScript…

QT--线程

一、线程QThread QThread 类提供不依赖平台的管理线程的方法&#xff0c;如果要设计多线程程序&#xff0c;一般是从 QThread继承定义一个线程类&#xff0c;在自定义线程类里进行任务处理。qt拥有一个GUI线程,该线程阻塞式监控窗体,来自任何用户的操作都会被gui捕获到,并处理…

Redisson中的RBlockingQueue的使用场景及例子

Redisson 的 RBlockingQueue 是一个实现了 Java BlockingQueue 接口的分布式队列&#xff0c;它可以用于在分布式系统中实现生产者-消费者模式。RBlockingQueue 提供了线程安全的阻塞队列操作&#xff0c;允许生产者在队列满时阻塞&#xff0c;消费者在队列空时阻塞&#xff0c…

【PyQt5】一文向您详细介绍 setPlaceholderText() 的作用

【PyQt5】一文向您详细介绍 setPlaceholderText() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通…

GraphRAG:< Not supported between instances of ‘NoneType‘ and ‘int‘

GraphRAG&#xff1a;< Not supported between instances of NoneType and int 0. 错误信息1. 解决方法 0. 错误信息 使用 GraphRAG 调用 vllm 的 openai api 时&#xff0c;报错&#xff1a; Not supported between instances of NoneType and int1. 解决方法 vi /root/…