Datawhale AI夏令营 逻辑推理

#AI夏令营 #Datawhale #夏令营 #大模型 #微调

实践步骤:

一、跑通baseline

二、尝试个人idea

三、尝试进阶baseline

比赛链接:上海科学智能研究院

一、baseline介绍

baseline代码由官方提供,无需修改

食用指南:Datawhale

baseline收获

官方提供的baseline可以做到一键运行,只要按照指南中的流程就可以提交结果

不同的模型基座影响很大,打算后续在本地微调Qwen2-7B并进行测试,具体来说,

  • 使用qwen1.5-1.8b,得分0.3494

  • 使用qwen2-7b-instruct,得分0.6830

  • 使用qwen2-72b-instruct,得分0.8261

使用微调后的qwen2-7b-instruct,得分0.7462

二、Prompt&微调

推荐阅读:从零入门 AI 逻辑推理

baseline改进想法

作为给大家练手的baseline,本身已经十分完善

具体比赛过程中,提升大模型表现能力的基本手段就是提示词工程和微调

提示词可以选择经典的GPT咒语,但若想进一步优化提示词或者微调,最好还是本地部署一个自己的大模型。这样方便使用Lora之类的微调技术在4090上微调7B大小左右的模型,也方便进行进行提示词工程优化结果。

三、进阶提分

Prompt改进:你是一个逻辑推理专家,我会提供一些逻辑思维题目或场景,请一步一步思考其中的逻辑链,组织思维并跟踪推理的每个环节,在回答中展示清晰的逻辑链条,以便更好地解释每个步骤如何导致最终的结论。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请逐步分析问题并在最后一行输出答案,最后一行的格式为"答案是:A"。

指令微调:

  • 训练格式:

[

{

"input": "假设您需要构建一个二叉搜索树,其中每个节点或者是一个空的节点(称为\"空节点\"),或者是一个包含一个整数值和两个子树的节点(称为\"数值节点\")。以下是构建这棵树的规则:\n\n1. 树中不存在重复的元素。\n2. 对于每个数值节点,其左子树的所有值都小于该节点的值,其右子树的所有值都大于该节点的值。\n3. 插入一个新值到一个\"空节点\"时,该\"空节点\"会被一个包含新值的新的数值节点取代。\n4. 插入一个已存在的数值将不会改变树。\n\n请基于以上规则,回答以下选择题:\n\n### 问题:\n选择题 1:\n给定一个空的二叉搜索树,插入下列数字: [5, 9, 2, 10, 11, 3],下面哪个选项正确描述了结果树的结构?\nA. tree(5, tree(2, tree(3, nil, nil), nil), tree(9, tree(10, nil, nil), tree(11, nil, nil)))\nB. tree(5, tree(2, nil, tree(3, nil, nil)), tree(9, nil, tree(10, nil, tree(11, nil, nil))))\nC. tree(5, tree(3, tree(2, nil, nil), nil), tree(9, nil, tree(10, tree(11, nil, nil), nil)))\nD. tree(5, nil, tree(2, nil, tree(3, nil, nil)), tree(9, tree(11, nil, nil), tree(10, nil, nil)))\n",

"instruction": "你是一个逻辑推理专家,我会提供一些逻辑思维题目或场景,请一步一步思考其中的逻辑链,组织思维并跟踪推理的每个环节,在回答中展示清晰的逻辑链条,以便更好地解释每个步骤如何导致最终的结论。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请逐步分析问题并在最后一行输出答案,最后一行的格式为\"答案是:A\"。",

"output": "根据题目中的规则,我们依次插入数字 [5, 9, 2, 10, 11, 3] 来构建二叉搜索树。\n\n首先插入数字 5,树为:\n```\ntree(5, nil, nil)\n```\n\n然后插入数字 9,由于 9 > 5,因此插入到右子树:\n```\ntree(5, nil, tree(9, nil, nil))\n```\n\n接下来插入数字 2,由于 2 < 5,因此插入到左子树:\n```\ntree(5, tree(2, nil, nil), tree(9, nil, nil))\n```\n\n再插入数字 10,由于 10 > 5 并且 10 > 9,所以插入到 9 的右子树:\n```\ntree(5, tree(2, nil, nil), tree(9, nil, tree(10, nil, nil)))\n```\n\n继续插入数字 11,由于 11 > 5 并且 11 > 9 和 11 > 10,所以插入到 10 的右子树:\n```\ntree(5, tree(2, nil, nil), tree(9, nil, tree(10, nil, tree(11, nil, nil))))\n```\n\n最后插入数字 3,由于 3 < 5 但是 3 > 2,所以插入到 2 的右子树:\n```\ntree(5, tree(2, nil, tree(3, nil, nil)), tree(9, nil, tree(10, nil, tree(11, nil, nil))))\n```\n\n比较这个最终结果与给定的选项,可以看到选项 B 正确地描述了结果树的结构。\n\n答案是:B"

},

]

  • 微调指令:

llamafactory-cli train \

--stage sft \

--do_train True \

--model_name_or_path /mnt/liumuDisk/llm-models/Qwen2-7B-Instruct \

--preprocessing_num_workers 16 \

--finetuning_type lora \

--quantization_method bitsandbytes \

--template default \

--flash_attn auto \

--dataset_dir data \

--dataset logical \

--cutoff_len 1024 \

--learning_rate 5e-05 \

--num_train_epochs 50.0 \

--max_samples 100000 \

--per_device_train_batch_size 2 \

--gradient_accumulation_steps 8 \

--lr_scheduler_type cosine \

--max_grad_norm 1.0 \

--logging_steps 5 \

--save_steps 100 \

--warmup_steps 0 \

--optim adamw_torch \

--packing False \

--report_to none \

--output_dir saves/Qwen2-7B/lora/train_2024-07-30-17-00-59 \

--bf16 True \

--plot_loss True \

--ddp_timeout 180000000 \

--include_num_input_tokens_seen True \

--adapter_name_or_path saves/Qwen2-7B/lora/train_2024-07-30-17-00-59 \

--lora_rank 8 \

--lora_alpha 16 \

--lora_dropout 0 \

--lora_target all

这个夏令营不简单 #AI夏令营 #Datawhale #夏令营

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值