CoolFace
Modelpublic

mikuhhn1239/qwen3-8b-scene-segmentation-lora

sourceHugging Faceapache-2.0updated 3mo agoView on Hugging Face
2likes13downloads
Model Card

Qwen3-8B Scene Boundary Detection LoRA

All Novel Can Be Galgame — Agent 2: 场景边界检测

判断段落序列中哪些位置应切换 scene。三 Agent 中最难任务。当前默认 main = v4-590(DeepSeek 重标注, F1 30.5%)。 ChatGPT Image 2026年7月5日 17_25_54

基座: Qwen3-8B-Novel-Base-SFT | 方法: LoRA r=64 α=128 | 硬件: A800 80GB

训练代码仓库:https://github.com/lin1753/novel-agent

项目地址;https://github.com/lin1753/novel2galgame


任务

  • —输入: 编号段落 [P1]...[P2]...
  • —输出: {"boundaries": [N]} — N 为切分位置
  • —测试集: 49 条 (v4 标准)

示例

输入:
  [P1] 下课铃响,教室里热闹起来。
  [P2] 她低头收拾书包。
  [P3] 我犹豫了一下,还是叫住了她。
  [P4] 十分钟后,我们并肩走在校门外的街道上。

输出:
  {"boundaries": [3]}   ← P3后切scene(教室→校门外)

加载

python
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-scene-segmentation-lora"
)

训练配置

基座: Qwen3-8B-Novel-Base-SFT (Stage1 全参 SFT, 72K)
方法: LoRA (r=64, α=128, dropout=0.05)
框架: transformers Trainer + PEFT
优化器: AdamW (adamw_torch_fused), cosine schedule, warmup=5%
epoch: 5 | LR: 1e-4 | batch: 1×16(accum) | bf16 | max_length: 4096

分支映射

分支版本F1说明
mainv4-59030.5%DeepSeek 重标注,当前最佳
v4v4-59030.5%同 main
v3.1v3.128.6%人类 Clean 标注最佳(旧默认)
v3v319.6%3ep 欠拟合
testingv3.220.0%reasons + 扩标,反退步
test-bestv253.3%史上最高但标注标准不同

完整版本历史

v1–v2:早期探索

版本train格式PRF1说明
v165端到端 + reasons33.333.333.3%句子级粒度过细,不可比
v2280纯边界 + reasons57.150.053.3%test-best 分支,标注标准不同

v3 系列:人类 Clean 标注

版本trainprompt格式F1说明
v328095 字纯边界19.6%3ep 欠拟合
v3.128095 字纯边界28.6%5ep,v3 标注最佳
v3.2384735 字reasons20.0%长 prompt + reasons 退步
v3.638495 字纯边界28.2%追平 v3.1,验证短 prompt 是关键

三次格式实验(均失败)

版本方法F1eval_loss退化策略
v3.2只列正样本20.0%↗猜位置 1,10,14
v3.3每对都判断15.4%→全 false + 1 true
v3.4独立 pairwise12.0%↗↗全 false
v3.5Best-of-N21.4%—FP 未抑制

v4 系列:DeepSeek 重标注 — 唯一突破

版本train标注eval_lossF1亮点
v4-296296DeepSeek 初版1.85→1.79 ↓26.7%首次 eval_loss 下降
v4-590 ⭐⭐590DeepSeek 重标注1.92→1.51 ↓30.5%最稳健,跨密度泛化最好
v4.1-18041804DeepSeek 扩标1.74→1.32 ↓29.9%三倍数据未超 v4-590,低质量标注稀释信号
v4.1-582582DeepSeek 精炼—30.2%≥2 边界占 76%,高密度泛化差(低密度仅 25.9%)

v4.1 扩标实验详情

v4.1-1804:快速扩标到 1804 条。边界比 8.5%(太保守),31% 零边界。eval_loss 创全系列新低(1.74→1.32),但 F1=29.9% 未超 v4-590。大量低质量标注稀释了信号。

v4.1-582 精炼:筛选 ≥2 边界 + 非 P1 起切 + 8-18 段。边界比 15.6%,零边界仅 8%,≥2 边界占 76%。F1=30.2%(接近 v4-590),但依赖训练密度 — 在低密度测试集上仅 25.9%。

结论:数据密度影响泛化。模型学会训练集的边界密度,密度不匹配时 F1 崩盘。扩标+精炼均未超越 v4-590 的 30.5%。

全系列最终排名

版本trainprompt标注F1亮点
v228095 字人类(v2标准)53.3%标注标准不同
v4-590 ⭐⭐59095 字DeepSeek30.5%最稳健,跨密度泛化最好
v4.1-58258295 字DeepSeek 精炼30.2%高密度特化
v4.1-1804180495 字DeepSeek 扩标29.9%eval_loss 最低但未转化 F1
v3.131095 字人类(v3Clean)28.6%
v3.638495 字人类(v3Clean)28.2%

v3.1验证集指标如下

570d3a273788c14c489e0b29bacda843

v4与4.1指标对比

scene_boundary_final_viz


关键结论

三大根因

  1. 1.LM loss ≠ F1 最大化:边界仅占 ~10% 样本,"全 false" 即最低 loss
  2. 2.全局篇章理解需求:不同于 narrative-type / attribution 的局部判断,scene-boundary 需要 10-20 段落的全局结构 — 8B 容量可能不够
  3. 3.数据不平衡:训练/验证集边界密度不匹配,模型学会训练密度后泛化差

经验

  1. 1.短 prompt 是必要条件(95 字 vs 735 字 → +8pp)
  2. 2.标注质量 > 数据量 > 训练技巧:DeepSeek 重标注是唯一突破 30% 的路径
  3. 3.FP 是最终瓶颈:所有版本精度 27-29%,模型始终预测 2-3× 太多边界
  4. 4.8B + SFT 天花板 ≈ 30% F1:格式改进、数据扩标、精炼过滤均未突破
  5. 5.简单 = 好:不加 reasons、不加推理链、不加复杂格式

继续突破方向

  • —GRPO/DPO 用 F1 做 reward 信号
  • —换 32B/72B 基座
  • —增大训练集正样本比例(当前 ~10%)

其他 Agent

Agent模型指标
Agent 1: 叙事分类narrative-parsing-loraacc 72.8% (v4)
Agent 3: 角色归因attribution-assist-loraacc 86.7% (v3.2)