ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Open Assistant 中的 LogicInference 逻辑推理数据集:从论文复现到指令微调格式改造实战

Open Assistant 中的 LogicInference 逻辑推理数据集:从论文复现到指令微调格式改造实战 Open Assistant 中的 LogicInference 逻辑推理数据集从论文复现到指令微调格式改造实战【免费下载链接】Open-AssistantOpenAssistant is a chat-based assistant that understands tasks, can interact with third-party systems, and retrieve information dynamically to do so.项目地址: https://gitcode.com/gh_mirrors/op/Open-Assistant本篇技术指南围绕 Open Assistant 仓库中 logicreference_OA 数据集目录展开完整讲解如何将 Google Research 的 LogicInference 逻辑推理数据集复现为 Open Assistant 所需的指令微调Instruction Tuning格式覆盖数据集设计目标、与原始论文的三大差异、关键生成参数的含义与调优思路以及 generate_dataset.py 的源码级实现细节。读完本文你将掌握逻辑推理类指令数据集的生成原理、如何按 Open Assistant 的INSTRUCTION / RESPONSE / SOURCE三列规范产出数据以及该数据集在 Open Assistant 训练管线中的接入位置。一、LogicInference 数据集是什么LogicInference 是一个用于评估与训练模型逻辑推理能力的数据集其核心用途在 README 中有明确表述它专注于命题逻辑propositional logic以及一阶逻辑first-order logic的一个小子集上的推理任务并且同时以两种形式呈现半形式化的逻辑符号表示semi-formal logical notation自然语言表示natural language。原论文标题为《LogicInference: A New Dataset for Teaching Logical Inference to seq2seq Models》发表于 ICLR 2022 workshop on Objects, Structure and Causality作者为 Santiago Ontañón、Joshua Ainslie、Vaclav Cvicek、Zachary Fisher。该数据集面向 seq2seq 模型设计数据组织为「推理问题inference problem 答案」的形式。该数据集有两个长期目标评测能力评估模型执行逻辑推理的能力以及推理链是真实推导还是幻觉hallucinated——即模型是否真的在逐步推理还是只是看起来像在推理检验迁移评估在抽象领域学习逻辑推理能力例如在该数据集上取得更好表现能否迁移到其他真实世界任务上。本目录正是为了给 Open Assistant 项目补充逻辑推理类数据而做的复现最终产出的数据集以LogicInference_OA为名注册在 Hugging Face 上。二、复现动机让逻辑推理数据适配 Open Assistant原 README 明确指出本目录是原 LogicInference 数据集的重新产出re-produce目的是为 Open Assistant 项目提供更多训练数据。为此产出格式遵循 Open Assistant 指令数据集的统一规范。根据 data/datasets/README.md 中定义的**指令数据集Instruction dataset**格式要求每条样本必须包含以下列列名类型说明INSTRUCTIONstring指令文本RESPONSEstring期望的模型回复SOURCEstring原始数据来源的短名称如 wikipediaMETADATAJSON string可选其他有用信息如{nsfw: true}本目录产出的数据严格对齐该规范README 明确说明数据集包含三列INSTRUCTION、RESPONSE、SOURCE。从 generate_dataset.py 的generate_t5_split函数可以直观看到每一行的写入格式with open(os.path.join(path, file_name), w) as f: for example in examples: f.write(fINSTRUCTION: {example.inputs}\n) f.write(fRESPONSE: {example.targets}\n) f.write(SOURCE: LogicInference Dataset e\n\n)即每个样本由三行文本构成INSTRUCTION:前缀对应推理问题RESPONSE:前缀对应推理过程与答案SOURCE:固定标记为LogicInference Dataset e末尾的e对应 answer at the end 的变体详见下文。三、与原始论文的三个关键差异复现版并不是原封不动的拷贝README 逐条列出了与原论文描述之间的三个差异理解这些差异有助于把握复现者的设计取舍。差异一只使用 IID 分割弃用 OOD 与 Length原始论文设计了三种数据分割方式IID训练集与测试集同分布independent and identically distributedOODout-of-distribution测试分布与训练分布不同Length按推理链长度划分测试更长推理链的泛化能力。复现版只使用 IID。原 README 给出的理由是在原论文的实验结果中似乎使用 IID 方式生成的数据能让模型获得更好的表现。这一点在 generate_dataset.py 中也得到了印证——OOD 与 Length 两段的生成代码被整体注释掉main函数只调用splits.generate_training_and_test_sets_iid(...)生成 IID 数据。差异二采用 LOGICINFERENCE_e 变体答案放在推理之后原始论文中响应有两种形式LOGICINFERENCE_b把答案放在最前面answer at the beginningLOGICINFERENCE_e把答案放在最后answer at the end。复现版统一使用LOGICINFERENCE_e意味着对每个问题模型先执行逻辑推理推理完成后在末尾给出最终答案。这一选择更贴近先思考、后作答的合理交互顺序也更容易让模型形成推理链 结论的完整输出习惯。对应地脚本中的开关参数为ANSWER_AT_THE_END True见 generate_dataset.py并且输出目录名会带上_e后缀suffix if ANSWER_AT_THE_END: suffix _e folder_iid_name logic_inference_iid suffix差异三重设生成参数优先保证推理问题的多样性原始论文的generate_dataset.py使用如下参数N_INFERENCE_PROBLEMS 5000 # 推理问题数量 N_VARIATIONS 25 # 每个问题的变体数 N_EXAMPLES 200000 # 目标样本总量 TRAIN_RATIO 0.9 # 训练集占比 LENGTH_SPLIT_THRESHOLD 4 # 长度分割阈值 RANDOM_SEED 0 # 随机种子复现者选择了新的参数组合N_INFERENCE_PROBLEMS 10000 # 推理问题数量翻倍 N_VARIATIONS 25 # 每个问题的变体数不变 N_EXAMPLES 55000 # 目标样本总量大幅缩减 TRAIN_RATIO 1 # 全部用于训练 LENGTH_SPLIT_THRESHOLD 4 # 阈值不变 RANDOM_SEED 1111 # 更换随机种子参数调整背后的权衡值得关注推理问题数量翻倍N_INFERENCE_PROBLEMS从 5000 提升到 10000对应 generate_dataset.py 中的N_INFERENCE_PROBLEMS 10000样本总量大幅缩减N_EXAMPLES从 200000 降到 55000因为复现者认为对 Open Assistant 来说不同推理问题的数量比重复变体更重要——堆砌大量相似的 Instruction-Response 对只会增加训练时间收益有限训练比例改为 1TRAIN_RATIO 1表示全部数据都作为训练数据使用更换随机种子RANDOM_SEED 1111保证生成结果与原始数据集不同。四、源码级解读generate_dataset.py 的完整工作流程generate_dataset.py 是整个目录唯一的生成脚本同时保留 requirements.txt其顶部文件头标注版权归属为 Google Research Authors并采用 Apache License 2.0 许可与原始项目保持一致。4.1 依赖与模块脚本导入rules、splits两个自定义模块以及tensorflow、absl。README 特别注明运行本脚本除了本目录文件外还需要原始 LogicInference 项目中的其他文件即rules.py、splits.py等本目录中的generate_dataset.py是原始同名脚本的即插即用替换版drop-in replacement功能差异在于输出 Open Assistant 指令格式的数据。requirements.txt 中声明了两个关键依赖absl_py0.13.0 tensorflow2.6.0其中absl提供命令行入口absl.app.run与日志能力tensorflow用于构造 TF 记录特性虽然实际输出是文本格式但数据组织仍沿用原始项目的 TF 风格结构。安装方式即标准的pip install -r requirements.txt。4.2 可调参数一览脚本 generate_dataset.py 顶部的生成参数如下参数值作用TARGET_FOLDER./e_txt/输出目录默认在脚本所在目录下生成e_txt文件夹原始版本中为占位路径/path/to/generate/dataset/ANSWER_AT_THE_ENDTrue是否把答案放在推理链之后对应 LOGICINFERENCE_eLENGTH_DISTRIBUTION[0.425, 0.3, 0.2, 0.05, 0.025]推理链长度的概率分布链长从短到长N_INFERENCE_PROBLEMS10000生成的推理问题总数N_VARIATIONS25每个推理问题的文本变体数N_EXAMPLES55000期望生成的样本总数TRAIN_RATIO1训练/测试划分比例LENGTH_SPLIT_THRESHOLD4长度分割阈值本复现中因只做 IID 而未实际使用RANDOM_SEED1111随机种子用于复现4.3 执行流程main函数的流程可以概括为四个步骤预计算规则调用rules.precompute_rules()预先计算推理规则表设置随机种子random.seed(RANDOM_SEED)固定随机性生成 IID 数据集调用splits.generate_training_and_test_sets_iid(N_INFERENCE_PROBLEMS, N_VARIATIONS, N_EXAMPLES, TRAIN_RATIO, length_distributionLENGTH_DISTRIBUTION, answer_at_the_endANSWER_AT_THE_END)返回(train_examples, test_examples)写出文件通过generate_t5_split分别写出训练与测试两个文本文件。输出文件命名沿用了原始项目的 T5 风格例如logic_inference_iid_e-train_tf_examples-00000-of-00001 logic_inference_iid_e-test_tf_examples-00000-of-00001因ANSWER_AT_THE_END True目录名为logic_inference_iid_e。4.4 数据规模对比复现者给出了最终的实际产出统计原始脚本生成了4814 个不同的推理问题扩展为约20 万个 Q-A 对而复现版设置生成了5491 个不同的推理问题扩展为约54,607 个 Instruction-Response 对。也就是说在推理问题多样性提升了约 14% 的前提下样本总量压缩了约 73%这正是前文所述问题多样性优先策略的直接体现。4.5 关于代码风格README 说明目录中只保留了generate_dataset.py一个文件原因是原始项目的编码风格不符合 Open Assistant 的flake8规范因此复现者只重写了该脚本的代码格式。这也解释了为什么脚本中保留了 T5 风格的命名与结构但整体代码已符合 PEP 8 风格。五、产出数据如何进入 Open Assistant 训练管线生成的指令数据最终通过 Open Assistant 的数据集注册机制进入训练流程数据集注册data/datasets/init.py 的INSTRUCTION_DATASETS字典中注册了LogicInference_OA: KK04/LogicInference_OA指向 Hugging Face 上的托管数据集加载与解析模型训练侧的指令数据集加载器 instruction.py 中的InstructionDataset类默认以INSTRUCTION与RESPONSE为列名读取数据与 LogicInference_OA 的列设计完全吻合加载时还会对空值进行过滤、并按给定seed打乱顺序格式要求根据 data/datasets/README.md所有数据集必须为 UTF-8 编码并以 parquetrow_group_size100、indexFalse或 jsonl / jsonl.gz 形式存储便于训练管线直接消费。六、如何复现与使用由于本目录依赖原始 LogicInference 项目的rules.py、splits.py等模块完整的复现步骤如下将原始 LogicInference 项目的文件与本目录的generate_dataset.py放在同一目录下本脚本是原始generate_dataset.py的即插即用替换版安装依赖pip install -r requirements.txtabsl_py0.13.0、tensorflow2.6.0按需修改 generate_dataset.py 中的TARGET_FOLDER与各生成参数运行python generate_dataset.py脚本会在TARGET_FOLDER下生成logic_inference_iid_e目录内含训练与测试两个文本文件将文本文件整理为 Open Assistant 指令数据集要求的存储格式UTF-8 编码的 parquet / jsonl并参考 data/datasets/README.md 的贡献流程推送到数据集托管平台。七、引用方式若在研究中引用该数据集README 给出了建议的 BibTeX 条目inproceedings{ontanon2022logicinference, author {Onta\~{n}\{o}n, Santiago and Ainslie, Joshua and Cvicek, Vaclav and Fisher, Zachary}, title {{LogicInference}: A New Dataset for Teaching Logical Inference to seq2seq Models}, booktitle{Proceedings of ICLR 2022 workshop on Objects, Structure and Causality}, year{2022} }结语LogicInference 为 seq2seq / 对话式助手模型提供了一条评估与训练逻辑推理能力的清晰路径。通过 logicreference_OA 目录的复现工作我们可以看到一条从学术论文数据集到生产级指令数据集的完整改造链路保留论文中的核心推理生成逻辑IID 分割、答案置尾针对 Open Assistant 的实际需求调整参数以提升问题多样性、压缩重复样本并最终输出符合INSTRUCTION / RESPONSE / SOURCE规范的指令数据。对希望为自身模型补充逻辑推理能力的开发者而言本目录的 generate_dataset.py 是一个结构清晰、参数透明、可直接改造复用的生成模板。【免费下载链接】Open-AssistantOpenAssistant is a chat-based assistant that understands tasks, can interact with third-party systems, and retrieve information dynamically to do so.项目地址: https://gitcode.com/gh_mirrors/op/Open-Assistant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表