任务
- 输入: 候选角色列表 + 上下文(含目标对话)
- 输出:
{"best_candidate": "角色名", "uncertain": true/false}
- 测试集: 30 条
示例
输入:
候选: 林秋、苏晚、陈遥
上下文:
[1] "你今天又迟到了。"苏晚把笔放下。
[2] 我把书包丢到桌上,没接话。
[3] 陈遥坐在后排憋笑。
[4] "路上堵车。" 【目标对话】
输出:
{"best_candidate": "林秋", "uncertain": true}
← 第2句"我把书包丢到桌上"暗示"我"说了[4],陈遥在憋笑排除,苏晚说了[1];证据不足,不确定
加载
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-attribution-assist-lora"
)
训练
基座: Qwen3-8B-Novel-Base-SFT (Stage1 全参 SFT, 72K 小说续写数据)
方法: LoRA (r=64, α=128, dropout=0.05)
数据: 495 条 (465 train / 30 val / 30 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, LR, JSON解析, 最佳候选准确率, 说明| 版本 | 数据量 | epochs | LR | JSON解析 | 最佳候选准确率 | 说明 |
|---|
| 零基座 | — | — | — | 0% | 0% | Qwen3-8B 原始完全不会 |
| +Stage1 | — | — | — | 3.3% | 0% | 读完 669 本也不会 |
| v1 | 66 | 3 | 2e-4 | 100% | 14.3% | 端到端(排序+打分) |
| v2 | 240 |
v3.1验证集指标如下

结论
- 零基座 / +Stage1 全 0%:不做 Agent SFT 就不会角色归因 ✅
- v3.2 大幅跃升:acc 43.3%→86.7%(+43.4pp)
- 扩标效果显著:240→465 条后准确率翻倍,说明该任务对数据量敏感
- v1→v2 +19pp, v2→v3.1 +10pp, v3.1→v3.2 +43.4pp