Datawhale AI夏令营 从零入门 AI 逻辑推理 心得第四弹

一、前言

好了,经过了前三次任务的学习,终于到了激动人心的“见真章”的时候了!在本次任务中,我们需要独立完成大赛的所有要求,这无疑是难度最大的一次挑战!

二、比赛限制回顾

我们这次比赛主要限制的无非就三大点:

①提交docker内存限制50G(因此建议把参数选择在20B以内)

②推理与评测时间限制为3个小时,所提供的显卡为单卡V100(32G显存)

③容器中无可用网络(即无法通过API调用闭源模型)

解决策略

所以,为了尽可能在限制范围之内达到云电脑推理的最佳结果,我们需要选择一个合适的模型来进行我们的推理过程。

这个链接包含了诸多开源大模型的各项参数:
https://huggingface.co/spaces/open-llm-leaderboard/open_llm_leaderboard

在表格中有这5个参数:

IFEval、BBH MATH Lvl 5、GPQA、MUSR、MMLU-PRO

其中,与对大模型的逻辑推理能力相关性较大的参数为BBH MATH Lvl 5与MMLU-PRO。在寻找榜单的过程中,我们最终发现‘MaziyarPanahi/Qwen2-7B-Instruct-v0.1’模型在这两项参数上要比我们之前使用的‘Qwen/Qwen2-7B-Instruct’模型要好,但是其他参数的比较上前者却不如后者,因此在均分上处于劣势。

两模型的主要参数比较

但考虑到我们使用的模型只有7B的参数,在显存上似乎还有多余的空间。

我在这里有个疑问:能不能同时运行两个模型呀。这样的话我们显存空余的空间也能得到充分利用。我的思路就是:一个模型和我们原来的思路一样,进行逻辑推理;另一个模型对前者推理的思路进行检验(相当于审核,类似于“结对编程”的原理),但我不知道该如何用具体的代码来实现这样的功能。

(不知道有没有大佬在评论区教我) 

三、上分方法:prompt工程

一个好的prompt是大语言模型给出好的回答的关键,因此,改善prompt可以提升大语言模型的准确性。

Datawhale有一份学习prompt以及相关内容的课程,链接如下:
https://github.com/datawhalechina/llm-cookbook/tree/main/content/%E5%BF%85%E4%BF%AE%E4%B8%80-Prompt%20Engineering%20For%20Developers

由于测试集的逻辑推理题可以分为多个种类,因此,我们可以采用聚类分析的方法将测试集中的题目分别标记为:①数学题;②计算机理论题;③物物关系题(包含了人际关系与人物关系)。因此,我们可以对这三类题目分别用不同的prompt,这样可以得到更高的分数。

原本的prompt是:

你是一个逻辑推理专家,擅长解决逻辑推理问题。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。最后一行的格式为"答案是:A"。题目如下:

我们可以进行如下修改,例如:

你是一个逻辑推理专家,擅长解决逻辑推理问题,尤其是理论数学的相关知识。以下是一个与数学高度相关的逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请根据问题给出7步以内的思考思路,并给出可能的结果。最后一行的格式为"答案是:A"。题目如下:

这样的话,大语言模型可以更加精准地得到正确的结果。

四、上分方法:agent设计

agent设计分为两部分:

agent1_分析器:对题目进行分析,给出可能的结果。

agent2_评分器:对答案的合理性排序,最后给出可能性最大的答案。

例如:

你是一个逻辑推理专家,擅长解决逻辑推理问题。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请根据问题给出5步以内的思考思路。并给出可能的结果:

### 题目:
以下是一个关于温度转换的问题,其中有一个函数用来将摄氏温度转换成华氏温度,并评估该温度是"太高"、"高"、"寒冷"还是"宜人"。

该函数的工作原理如下:
- 把摄氏度(C)乘以9/5,然后加上32,得到华氏度(F)。
- 然后根据华氏度的数值评估温度状态:
  - 如果华氏度大于150,则输出"温度太高"。
  - 如果华氏度介于90到150之间,则输出"温度高"。
  - 如果华氏度低于30,则输出"温度寒冷"。
  - 否则输出"温度宜人"。

根据以上信息回答以下选择题:

### 问题:
选择题 1:
当摄氏度为5度时,对应的华氏度是多少?
A. 23.0
B. 36.0
C. 41.0
D. 54.0
你是一个逻辑推理专家,擅长解决逻辑推理问题。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。根据思考思路,将每个答案带入问题,你可以参考参考结果,如果觉得不正确可以更正结果,给出最可能的答案,最后一行的格式为"答案是:A"。

### 题目:
以下是一个关于温度转换的问题,其中有一个函数用来将摄氏温度转换成华氏温度,并评估该温度是"太高"、"高"、"寒冷"还是"宜人"。

该函数的工作原理如下:
- 把摄氏度(C)乘以9/5,然后加上32,得到华氏度(F)。
- 然后根据华氏度的数值评估温度状态:
  - 如果华氏度大于150,则输出"温度太高"。
  - 如果华氏度介于90到150之间,则输出"温度高"。
  - 如果华氏度低于30,则输出"温度寒冷"。
  - 否则输出"温度宜人"。

根据以上信息回答以下选择题:

### 问题:
选择题 1:
当摄氏度为5度时,对应的华氏度是多少?
A. 23.0
B. 36.0
C. 41.0
D. 54.0

### 思考思路:

1. **理解转换公式**:摄氏度(C)转换成华氏度(F)的公式是 \( F = C \times \frac{9}{5} + 32 \)。
2. **代入具体数值**:将摄氏度 \( C = 5 \) 代入公式中。
3. **计算**:计算 \( 5 \times \frac{9}{5} + 32 \)。
4. **简化计算**:首先计算 \( 5 \times \frac{9}{5} = 9 \),然后加上32,得到 \( 9 + 32 = 41 \)。
5. **选择正确答案**:根据计算结果,选择正确的选项。

### 可能的结果:
根据以上计算,当摄氏度为5度时,对应的华氏度是41.0。因此,正确答案是C。

当然了,这只是Datawhale提供的agent设计思路(不过,我没自己的思路),如果有更好的agent设计的话欢迎交流,其实最好的方案莫过于微调与agent结合。

五、上分方法:数据集扩充

方法一:附加子问题

我们可以先分析一遍测试集给出的几道子问题,然后在提出的子问题之外再生成一些问题,让大语言模型自己解决自己的问题,这也就相当于给了大语言模型多一轮的学习机会。

方法二:相似题生成

我们可以先分析一遍测试集给出的问题,然后对原问题的数值,人际、人物或是物物关系亦或是人名进行修改,让大语言模型根据相似的思路,自己解决自己的问题。

方法三:使用开源数据集

六、总结

在经过了一次次的训练之后,我们终于可以提交出一份完美的答卷了!

再一次点开比赛的官网,上传数据集,漂亮!0.7274拿下!(这个0.8479是我用gpt-4o的API跑出来的数据,算作弊了哈)

也算是圆满地结束了本次夏令营。感谢Datawhale团队一路以来的辛苦付出!开源是世界上最伟大的思想!让我们这些小白才有了接触这些知识的机会! 

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值