Nova 2.0 上的 CPT - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Nova 2.0 上的 CPT

Amazon Nova Lite 2.0 是一种在比 Nova Lite 1.0 更大、更多样化的数据集上训练的推理模型。尽管是更大的模型,但Nova Lite 2.0的推理速度比Nova Lite 1.0更快,同时还提供了增强的推理功能、更长的上下文长度和改进的多语言性能。

CPT on Nova 2.0 允许您使用特定领域的数据扩展这些高级功能,使模型能够在保持其卓越的推理和分析能力的同时,在专业领域积累深厚的专业知识。

在 2.0 上为 CPT 做数据准备

数据格式要求

训练和验证数据集必须是 JSONL 文件,格式如下所示,其中每行都包含一个 JSON 对象,表示与必填字段和结构的对话。示例如下:

{"text": "AWS stands for Amazon Web Services"} {"text": "Amazon SageMaker is a fully managed machine learning service"} {"text": "Amazon Bedrock is a fully managed service for foundation models"}

文本条目应包含代表目标域的自然流畅的高质量内容。

测试数据是否能够转换为箭头格式。使用下面的 python 脚本来帮助解决这个问题。确保至少使用该datasets==2.18.0版本:

from datasets import load_dataset, load_from_disk from pathlib import Path input_path = Path("<Your jsonl file>") output_path = Path("<Your output directory>") dataset = load_dataset("json", data_files=str(input_path), split="train") dataset.save_to_disk(str(output_path), max_shard_size="1GB") try: test_dataset = datasets.load_from_disk(output_dir) print(f"Dataset loaded successfully ✅! Contains {len(test_dataset)} samples") except Exception as e: print(e)

它打印的行数应与 JSONL 文件中的行数相同。

使用数据混合时,使用运行第一个作业。max_steps=2这将有助于在集群中创建用于数据访问的优化,并验证所有 datamix 是否都可用。

如何为 CPT 准备数据

训练数据是持续预训练成功的最关键决定因素。尽管CPT数据通常被描述为 “未贴标签”,但现实要细微差别得多。数据的结构、格式和呈现方式决定了模型能否获得业务用例所需的知识和技能。

为 CPT 准备结构化业务数据集

对于建立专门针对其领域的基础模型的公司和组织来说,这是一个常见的挑战。大多数企业都拥有丰富的结构化数据存储库:产品目录、用户资料、交易日志、表单提交、API 调用和运营元数据。乍一看,这与标准预训练中通常使用的非结构化网页文本有很大不同。

要有效地从结构化业务数据中学习,请仔细考虑下游任务并设计数据呈现形式,以迫使模型学习正确的预测关系。

要充分发挥持续预训练的潜力,请考虑:

  • 模型在推理时应执行哪些任务

  • 原始数据中存在哪些信息

  • 如何构造这些数据,以便模型学会正确提取和操作信息

仅仅将结构化数据转储到训练中并不能教会模型推理。积极塑造数据呈现方式,以指导模型学习内容。

在以下各节中,有文献综述证明了数据增强的重要性,并提供了结构化业务数据的示例增强策略,这些策略将为如何处理和组织CPT的业务数据集提供有用的想法。

文献中CPT的结构化数据

CPT 可以将领域事实打包到模型中,但通常无法在输入或任务转移时使这些事实可检索和操作。对照实验表明,如果在预训练期间没有不同的增强,模型会以脆弱的方式记住事实,即使在以后的指令调整之后也很难提取这些事实,他们建议在训练的早期注入指令,例如信号。对于半结构化数据,随机序列化和其他增强可以减少架构过度拟合,这就是为什么 CPT 应该与指令风格的任务交错排列,而不是先运行然后再运行 IFT 的原因。以财务为重点的研究进一步发现,与顺序配方相比,在批量时联合混合CPT和教学数据可以提高概括性并减少遗忘。Qwen 技术报告通过将高质量的教学数据整合到预训练本身中,从而促进情境学习,在获取新领域知识的同时保留教学跟进。

半结构化语料库的数据增强是一个关键杠杆。合成图感知CPT将小域集扩展为实体关联的语料库,这些语料库在推理时通过检索明确地教授关系和化合物。在金融领域,联合CPT加指令混合的表现优于顺序管道,平衡领域与一般数据可以降低一般技能的退化。超大规模域CPT还可以保留广泛的能力,甚至允许通过模型合并进行权衡,但仍然认为指令调整是必不可少的下一步,这增强了在CPT期间引入指令信号的价值。

通过随机化和洗牌注入多样性

有助于从结构化和半结构化数据集中有效地教授模型的一种通用策略是调整数据集中字段的顺序,甚至随机删除一些密钥。

对字段进行洗牌会迫使模型读取每个值的含义而不是其显示位置,并了解所有字段之间的关系。例如,对于在亚马逊商店上发布的电子游戏,当 “标题”、“平台”、“价格”、“状况” 和 “版本” 以不同的排列方式出现时,模型不能依赖 “第三个位置是平台”;它必须将标签与值绑定并学习属性之间的双边关系:标题平台、平台、价格、条件价格。因此,例如,它可以从游戏名称和观察到的价格中推断出可能的平台,或者在给定游戏和平台的情况下估计合理的价格区间。

序列化期间随机丢失密钥的行为就像特征丢失一样:它可以防止在任何一个字段上进行协同适应,并迫使模型从剩余的证据中恢复缺失的信息。如果 “平台” 不存在,则模型必须从标题字符串或兼容性文本中提取它;如果隐藏 “价格”,则必须从平台、版本和状况进行三角分析。这会建立对称性(A→B和B→A),对混乱的现实世界列表的稳健性,以及字段缺失、重命名或重新排序时的架构不变性。

一个购物风格的例子使它变得具体。以多种方式序列化同一件物品—— “标题:'Elden Ring' | 平台: PlayStation 5 | 状况:二手—类似全新 | 价格:34.99 美元 | 价格:34.99 美元 | 标题:'Elden Ring' | 状况:二手—类似全新 | 平台:5”,在某些通行证中会掉落 “平台”,同时在描述中保留 “兼容”。 PlayStation PS5训练互补的目标,例如从 {标题,价格} 预测平台和从 {title,platform} 中预测价格区间。由于密钥的顺序甚至存在各不相同,因此唯一稳定的策略是学习属性之间的真实关系,而不是记住模板。

数据的呈现方式很重要

LLMs 通过从他们已经看到的情况中预测下一个代币来学习。因此,训练期间显示的字段和事件的顺序决定了模型可以学习什么。如果训练形式与实际任务相匹配,则损失将落在确切的决策令牌上。如果在没有结构的情况下将字段拼凑在一起,则模型会学习快捷方式或记住受欢迎程度,然后在被要求在选项中进行选择时失败。

首先显示情况,然后显示选项,然后显示决定。如果模型还应该了解结果或解释,请将其放在决策之后。

CPT 的包装样品

什么是包装?

它只是意味着用多个完整示例填充训练数据中的每个序列窗口,这样窗口就会充满真实的标记,而不是填充。

为什么这非常重要

在训练期间,设置了最大上下文长度,例如 8,192 个标记。批次的形状为 [批次大小 × 上下文长度]。如果训练示例短于上下文长度,则会填充其余位置。即使损失被掩盖,填充仍然会穿过注意力和 MLP 内核,因此计算是为没有学习信号的代币支付的。

怎么打包?

要打包多个样本,请将多个训练样本与中间的 [DOC] 分隔符连接起来(注意 [DOC] 前后的空格),这样样本的整个长度都在所需的上下文长度之下。

打包文档的示例如下所示:

{"text": "training sample 1 [DOC] training sample 2 [DOC] training sample 3"}