任务
- 输入: 编号叙事单元
[1] "..." [2] "..." ...
- 输出:
{"labels": [{"unit_id": "N", "type": "dialogue|narration|thought|action|scene_description"}]}
- 测试集: 39 条
五种类型
Table with columns: 类型, 含义| 类型 | 含义 |
|---|
dialogue | 对话 |
narration | 叙述 |
thought | 心理 |
action | 动作 |
scene_description | 场景描写 |
示例
输入:
[1] "你怎么来了?"
[2] 她愣了一下。
[3] 其实我也不知道自己为什么会来。
输出:
{"labels": [
{"unit_id": "1", "type": "dialogue"},
{"unit_id": "2", "type": "action"},
{"unit_id": "3", "type": "thought"}
]}
加载
from transformers import AutoModelForCausalLM
from peft import PeftModel
base = AutoModelForCausalLM.from_pretrained(
"mikuhhn1239/qwen3-8b-novel-base-sft",
torch_dtype="auto", device_map="auto",
)
model = PeftModel.from_pretrained(
base, "mikuhhn1239/qwen3-8b-narrative-parsing-lora"
)
训练
基座: Qwen3-8B-Novel-Base-SFT (Stage1 全参 SFT, 72K 小说续写数据)
方法: LoRA (r=64, α=128, dropout=0.05)
数据: 616 条 (577 train / 39 val / 39 test)
框架: transformers Trainer + PEFT
优化器: AdamW (adamw_torch_fused), cosine schedule, warmup=5%
epoch: 5 | LR: 1e-4 | batch: 1×16(accum) | bf16 | max_length: 4096
版本历史
Table with columns: 版本, 数据量, epochs, 硬件, JSON解析, 类型准确率, 说明| 版本 | 数据量 | epochs | 硬件 | JSON解析 | 类型准确率 | 说明 |
|---|
| 零基座 | — | — | — | 0% | 0% | Qwen3-8B 原始完全不会 |
| +Stage1 | — | — | — | 0% | 0% | 读完 669 本也不会 |
v4 各类型准确率
Table with columns: 类型, v3.2, v4, 变化| 类型 | v3.2 | v4 | 变化 |
|---|
| narration | — | 82% | 最强 |
| dialogue | — | 70% | |
| thought | — | 62% | |
| action | — | 58% | |
| scene_description |
v3.1验证集指标如下

结论
- 零基座 / +Stage1 全 0%:不做 Agent SFT 就不会叙事分类 ✅
- v3.2→v4 +3.3pp:8 卡 DDP 重训,1,526 个 unit 测试,凭更大 batch/更多通信推高上限
- 关键修复: 输入引号
""→「」 + max_new_tokens 256→1024