本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Nova 2.0 上的 RFT
RFT 训练数据遵循 OpenAI 对话格式。每个训练示例都是一个 JSON 对象,其中包含消息、参考答案和可选工具定义。本节提供有关在 Nova 2.0 上为 RFT 准备有效训练数据的指导。
数据格式和结构
每个训练示例都是一个 JSON 对象,其中包含以下内容:
-
消息:使用系统、用户和可选的助手角色进行一系列对话回合
-
reference_ans wer:奖励计算的预期产出或评估标准
-
t@@ ools(可选):模型可用的函数定义数组
-
id(可选):用于跟踪和重复数据删除的唯一标识符
每个示例都应在 JSONL 文件中的一行上,每行一个 JSON 对象。
以下示例显示了一个化学问题,其参考答案包含基本真值:
{ "id": "chem-001", "messages": [ { "role": "system", "content": "You are a helpful chemistry assistant" }, { "role": "user", "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C" } ], "reference_answer": { "donor_bond_counts": 2, "acceptor_bond_counts": 4, "explanation": "Calculated using Lipinski's rule of five: N-H groups (2 donors), N and O atoms with lone pairs (4 acceptors)" } }
注意
reference_answer 包含使用特定领域的规则计算得出的基本真值值。您的奖励函数将模型的预测值与这些参考值进行比较,以计算奖励分数。
以下示例显示了一个带有求解步骤的数学问题:
{ "id": "math-001", "messages": [ { "role": "system", "content": "You are a math tutor" }, { "role": "user", "content": "Solve: 2x + 5 = 13" } ], "reference_answer": { "solution": "x = 4", "steps": ["2x = 13 - 5", "2x = 8", "x = 4"] } }
以下示例显示了具有预期行为的工具使用情况:
{ "id": "tool-001", "messages": [ { "role": "system", "content": "You are a helpful game master assistant" }, { "role": "user", "content": "Generate a strength stat for a warrior character. Apply a +2 racial bonus modifier." } ], "tools": [ { "type": "function", "function": { "name": "StatRollAPI", "description": "Generates character stats by rolling 4d6, dropping the lowest die result, and applying a modifier.", "parameters": { "type": "object", "properties": { "modifier": { "description": "An integer representing the modifier to apply to the total of the stat roll.", "type": "integer" } }, "required": ["modifier"] } } } ], "reference_answer": { "tool_called": "StatRollAPI", "tool_parameters": { "modifier": 2 }, "expected_behavior": "Call StatRollAPI with modifier=2 and return the calculated stat value" } }
字段描述
字段 |
说明 |
附加说明 |
必需 |
|---|---|---|---|
id |
此 RFT 示例的唯一标识符 |
字符串(例如,“sample-001”)。对于跟踪和重复数据删除很有用。 |
否 |
消息 |
定义提示和上下文的聊天消息的有序列表 |
对象数组。模特按顺序看见它们。通常以系统消息开头,然后是用户。 |
是 |
消息 [] .role |
谁在留言中说话 |
常用值:“系统”、“用户”(有时在其他上下文中为 “助手”) |
否 |
消息 [] .content |
消息的文字内容 |
纯字符串。对于系统来说,这是指令,对于用户来说,这是任务或输入。 |
否 |
工具 |
在本示例中,模型可用的刀具规格 |
阵列。每个项目都定义了工具的界面和元数据。类型可能包括 “函数” 或 “内部”。 |
是 |
参考答案 |
本示例的预期模型输出 |
字符串或对象,具体取决于任务。用作评估或培训的目标。 |
否 |
注意
任何其他自定义字段(例如 task_id、难度等级、context_data)均未经过验证,将作为元数据传递给您的奖励函数。
其它属性
“additionalProperties”:true 设置允许您包含超出核心架构要求的自定义字段,从而可以灵活地添加奖励函数进行适当评估所需的任何数据。
常见的附加字段
您可以包括以下类型的附加字段:
元数据:
-
task_id:用于跟踪的唯一标识符
-
难度等级:问题复杂度指标
-
域:主题领域或类别
-
expected_reasoning_steps:解决方案中的步骤数
评估标准:
-
评估标准:具体的评分标准
-
custom_scoring_weights:不同方面的相对重要性
-
context_data:问题的背景信息
-
external_references:相关文档或资源的链接
带有其他属性的示例
以下示例包括自定义元数据字段:
{ "id": "algebra_001", "messages": [ { "role": "system", "content": "You are a math tutor" }, { "role": "user", "content": "Solve: 2x + 5 = 13" } ], "reference_answer": { "solution": "x = 4", "steps": ["2x = 13 - 5", "2x = 8", "x = 4"] }, "task_id": "algebra_001", "difficulty_level": "easy", "domain": "algebra", "expected_reasoning_steps": 3 }
数据集大小建议
起点
从以下最小数据集大小开始:
-
至少 100 个训练示例
-
至少 100 个评估示例
优先考虑高质量的输入数据和可靠的奖励功能,该功能可在模型响应上始终如一地执行。
评价为先的方法
在投资大规模 RFT 训练之前,请评估模型的基线性能:
-
高性能(奖励大于 95%):可能没必要 RFT ——你的模型已经表现不错了
-
表现非常差(奖励为0%):首先切换到SFT以建立基本能力
-
性能适中:RFT 可能是合适的
这种评估优先的方法可确保您的奖励功能没有错误,并确定 RFT 是否是适合您的用例的方法。从小处着手可以让您熟悉 RFT 工作流程,尽早发现并修复问题,在扩大规模之前验证您的方法,并测试奖励功能的可靠性。经过验证后,您可以扩展到更大的数据集以进一步提高性能。
有效训练数据的特征
清晰度和一致性
好的RFT示例需要清晰、明确的输入数据,以便能够对不同的模型输出进行准确的奖励计算。避免数据中的噪音,包括:
-
格式不一致
-
相互矛盾的标签或说明
-
提示含糊不清
-
相互矛盾的参考答案
任何歧义都会误导训练过程并导致模型学习意外行为。
多元化
您的数据集应捕获各种各样的生产用例,以确保强大的现实世界性能。Include:
-
各种问题类型和难度级别
-
不同的输入格式和边缘情况
-
所有预期场景的代表性样本
这种多样性有助于防止过度拟合,并确保模型优雅地处理不熟悉的输入。
奖励功能注意事项
设计奖励功能以实现高效训练:
-
在几秒钟内执行(不是几分钟)
-
使用 Lambda 进行有效的并行化
-
返回一致、可靠的分数
-
优雅地处理不同类型的模型输出
快速、可扩展的奖励功能可实现快速迭代和具有成本效益的大规模实验。