R² 架构流程图

论文: R²: A LLM Based Novel-to-Screenplay Generation Framework with Causal Plot Graphs 作者: Zefeng Lin et al. (USTC, 安徽建筑大学, 安徽大学) 会议: ICLR 2025

Obsidian 显示提示: 如果 Mermaid 图在编辑/阅读模式下过大无法概览,安装社区插件 Mermaid Tools(by dartungar),它提供全屏模式和缩放工具栏。或者直接点击 Mermaid 图(阅读模式),Obsidian 原生支持弹出放大视图。


一、完整 Reader-Rewriter 流水线

flowchart TB
    NOVEL["📚 原始小说文本<br/>Novel Text"]

    subgraph READER["📖 Reader 阅读模块"]
        direction TB
        SW["🪟 滑动窗口<br/>Sliding Window<br/>分段处理长文本"]
        EE["📋 事件提取<br/>Event Extraction<br/>时间/地点/背景/描述"]
        CA["🔗 因果分析<br/>Causal Analysis<br/>LLM 推断事件间因果关系"]
    end

    subgraph CPC["🧬 CPC 因果情节图构建"]
        direction TB
        GRAPH["📊 因果图 G=⟨E,D,W⟩<br/>E:事件节点 · D:因果边 · W:强度⚡H/🔵M/⬜L"]
        CB["⚙️ 贪心去环算法<br/>Greedy Cycle-Breaking<br/>Prim 变体 · 按W排序 · 避免成环"]
    end

    subgraph REWRITER["✍️ Rewriter 改写模块"]
        direction TB
        SO["🎬 场景大纲<br/>Scene Outlines<br/>因果图→场景序列分镜"]
        SG["📝 剧本生成<br/>Screenplay Generation<br/>场景描述+对白+舞台指导"]
    end

    OUTPUT["🎭 完整剧本输出<br/>Final Screenplay<br/>场景号 · 对白 · 舞台指导 · 情感基调"]

    NOVEL --> SW
    SW --> EE
    EE --> CA
    CA --> GRAPH
    GRAPH --> CB
    CB --> SO
    SO --> SG
    SG --> OUTPUT

    style NOVEL fill:#881337,stroke:#e11d48,color:#fda4af
    style OUTPUT fill:#064e3b,stroke:#059669,color:#34d399

二、HAR 幻觉感知精炼循环

flowchart TB
    subgraph HAR["🔄 HAR 幻觉感知精炼 Hallucination-Aware Refinement"]
        direction LR
        DETECT["🔍 ① 检测 Detect<br/>LLM 自检输出一致性<br/>发现幻觉矛盾/因果断裂"]
        REFINE["🔧 ② 精炼 Refine<br/>修正输出内容<br/>重新推理·修正因果边·补全情节"]
        VERIFY["✅ ③ 验证 Verify<br/>一致性交叉检查<br/>通过→输出 / 未通过→返回精炼"]
    end

    R_OUT["📖 Reader 输出<br/>因果图/事件序列"]
    W_OUT["✍️ Rewriter 输出<br/>场景大纲/剧本片段"]
    FINAL["🎭 最终输出<br/>经验证的完整剧本"]

    R_OUT --> DETECT
    W_OUT --> DETECT
    DETECT -->|"发现问题"| REFINE
    DETECT -->|"无问题"| VERIFY
    REFINE --> VERIFY
    VERIFY -->|"✅ 通过"| FINAL
    VERIFY -.->|"❌ 未通过,返回精炼"| REFINE

    style DETECT fill:#164e63,stroke:#0891b2,color:#22d3ee
    style REFINE fill:#164e63,stroke:#0891b2,color:#22d3ee
    style VERIFY fill:#164e63,stroke:#0891b2,color:#22d3ee
    style FINAL fill:#064e3b,stroke:#059669,color:#34d399

三、CPC 因果情节图结构

graph TD
    subgraph 事件节点["📊 事件节点 Events(E)"]
        E1["e₁ 🌅<br/>时间: 黄昏<br/>地点: 小镇酒馆<br/>描述: 主角收到密信"]
        E2["e₂ ⚔️<br/>时间: 次日清晨<br/>地点: 城外树林<br/>描述: 遭遇伏击"]
        E3["e₃ 🏰<br/>时间: 第三日<br/>地点: 皇宫大殿<br/>描述: 面见国王"]
        E4["e₄ 🌊<br/>时间: 一周后<br/>地点: 港口<br/>描述: 乘船逃离"]
    end

    subgraph 因果边["🔗 因果有向边 D(Directed Causal Edges)"]
        D1["e₁ → e₂<br/>⚡ 高强度 High<br/>密信导致主角前往树林"]
        D2["e₂ → e₃<br/>🔵 中强度 Medium<br/>伏击后寻求国王庇护"]
        D3["e₁ → e₃<br/>🔵 中强度 Medium<br/>密信内容与皇宫相关"]
        D4["e₃ → e₄<br/>⚡ 高强度 High<br/>国王下令追杀"]
    end

    subgraph 去环["⚙️ 贪心去环 Cycle-Breaking"]
        CB1["排序因果边<br/>High → Medium → Low"]
        CB2["度数和断平局<br/>优先保留低度数端点"]
        CB3["逐边检查<br/>若终点已可达起点 → 跳过"]
        CB4["输出无环因果图 F<br/>保证情节线单向推进"]
    end

    E1 --> D1
    E2 --> D1
    E2 --> D2
    E3 --> D2
    E1 --> D3
    E3 --> D3
    E3 --> D4
    E4 --> D4

    D1 --> CB1
    D2 --> CB1
    D3 --> CB1
    D4 --> CB1
    CB1 --> CB2
    CB2 --> CB3
    CB3 --> CB4

    style E1 fill:#0f172a,stroke:#a78bfa,color:#c4b5fd
    style E2 fill:#0f172a,stroke:#a78bfa,color:#c4b5fd
    style E3 fill:#0f172a,stroke:#a78bfa,color:#c4b5fd
    style E4 fill:#0f172a,stroke:#a78bfa,color:#c4b5fd
    style D1 fill:#451a03,stroke:#f59e0b,color:#fbbf24
    style D2 fill:#1e3a5f,stroke:#3b82f6,color:#60a5fa
    style D3 fill:#1e3a5f,stroke:#3b82f6,color:#60a5fa
    style D4 fill:#451a03,stroke:#f59e0b,color:#fbbf24
    style CB4 fill:#064e3b,stroke:#059669,color:#34d399

符号对照表

符号含义
G = ⟨E, D, W⟩因果情节图:事件集合、因果边集合、强度权重集合
E事件节点:包含时间地点、背景、描述
D有向因果边:eᵢ → eⱼ 表示 eᵢ 导致 eⱼ
W ∈ {H, M, L}边强度:High(直接显著)、Medium(部分间接)、Low(微弱)
F去环后的无环因果边集合(最终保留的因果结构)
HAR幻觉感知精炼:Detect → Refine → Verify 迭代循环
CPC因果情节图构建:Causal Plot-Graph Construction