ChatGLM-6B 双任务微调:从数据构造到训练评估

一个生成式模型可以用统一的“指令—输入—回答”格式学习多个任务。这里以信息抽取和文本分类为例:前者要求输出结构化三元组,后者要求输出类别。两种样本共用模型和训练循环,通过指令区分任务。ChatGLM-6B 是这一案例使用的旧一代基座模型,运行环境与依赖版本须按其官方仓库及模型许可核对。

1. 先统一样本格式

每条 JSONL 样本包含 context 和 target。context 由任务指令、输入文本和回答起始标记组成;target 是预期输出。信息抽取的目标可为 JSON 数组,分类的目标可为类别数组。训练数据中,这两类样本混合出现;本案例文件有 902 条训练样本、122 条验证样本。

例如,同一句文本可以用不同指令要求输出不同结构:

Instruction: 从句子中抽取“作品—作者”关系,输出 JSON 数组。
Input: 《示例作品》的作者是甲。
Answer:

目标输出可以是 [{"作品":"示例作品","作者":"甲"}]。这只是数据格式示例;真正训练前,需要统一字段、转义、空结果表示和非法标注处理。若目标希望机器直接解析 JSON,就不宜在训练标签中混入 Markdown 代码围栏。

2. 预处理:只对回答计算损失

预处理分别编码 context 与 target,限制二者长度,再由 ChatGLM 分词器拼成模型要求的输入序列。标签把提示部分和补齐位置设为 -100,让交叉熵忽略这些位置;答案部分保留 token ID。这使优化目标集中在回答,而非重复预测输入提示。

这里有三个必须检查的边界:第一,截断后目标结构是否仍合法;第二,特殊标记与标签位移是否符合所用 ChatGLM 版本;第三,训练和验证是否使用相同模板。代码中的 drop_last=True 会丢掉每轮最后不足一个批次的样本,验证集也如此;如果要覆盖全部验证样本,应调整验证 DataLoader 并复核指标计算。

3. 模型路径:LoRA 与前缀训练分别配置

该训练配置默认选择 LoRA:use_lora=True、use_ptuning=False、秩为 8。LoRA 在基座线性层旁训练低秩分支,而基座权重保持冻结;它不是全量微调。另一条路径会设置前缀长度及 prefix_projection,需要使用与基座模型实现匹配的前缀编码器。prefix_projection 只控制该实现的前缀投影,不能直接用 True/False 定义 P-Tuning v1 或 v2。ChatGLM-6B P-Tuning 说明、PEFT LoRA 文档

训练循环每批执行前向计算、清梯度、反向传播、优化器更新和学习率调度器更新。这里没有梯度累积:配置的批量大小为 4,代码每批调用一次 optimizer.step()。学习率为 3e-5,训练 2 轮,使用线性预热及衰减。实际可训练参数和目标模块应以运行时打印结果为准,不应从方法名称推断。

4. 混合精度与保存要核对

代码先将基座模型转换为 FP16,LoRA 分支在 CUDA 自动混合精度上下文中计算;这不是“自动保证数值稳定”。FP16 训练要关注梯度溢出、损失 NaN 和梯度缩放策略;较新的 PyTorch 推荐按设备使用 torch.amp API。PyTorch AMP 示例

每轮结束后,代码以验证损失选择最优模型。LoRA 路径会先复制模型、合并适配器,再保存合并后的权重;这一过程可能增加峰值内存。也可以保留独立适配器,但推理时必须同时加载匹配的基座权重。两种保存方式要和推理加载方式配套。PEFT 保存与加载说明

5. 验证“会生成”和“任务完成”

验证损失下降只说明模型更好地拟合了验证标签,不能证明三元组抽取或分类已达到可用水平。信息抽取至少应检查 JSON 可解析率、字段完整率以及实体与关系的精确率和召回率;文本分类应检查每类样本数、混淆矩阵和宏平均 F1。还应把训练集、验证集分开,避免同源重复样本造成乐观结果。

推理时按训练模板构造输入,限制新生成 token 数,并对结果做结构校验。仅靠按字符串 Answer: 切分输出不够稳健:模型可能重复该标记,或输出额外说明。更可靠的做法是只解码新生成的 token,再解析 JSON;解析失败则返回明确错误,不把任意文本当成合法三元组。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇