中二节奏 AI 写谱

2026-07-31 · 19 min read · 6.5k words

Table Of Contents

  1. 1. BARGen-C2S:节拍坐标与形式语法约束下的音频条件游戏谱面生成
    1. 1.1. 摘要
    2. 1.2. 引言
    3. 1.3. 相关工作
      1. 1.3.1. 符号音乐生成
      2. 1.3.2. 音频到谱面生成
      3. 1.3.3. 受约束序列解码
      4. 1.3.4. 可控生成与条件失效
    4. 1.4. 任务定义
      1. 1.4.1. 谱面事件
      2. 1.4.2. 控制条件
      3. 1.4.3. 条件生成目标
    5. 1.5. 数据构建
      1. 1.5.1. 元数据与谱面解析
      2. 1.5.2. Song-disjoint 划分
      3. 1.5.3. 分段与上下文
    6. 1.6. 节拍坐标化音频表示
      1. 1.6.1. Piecewise-affine tempo map
      2. 1.6.2. 音频特征
    7. 1.7. BARGen-C2S
      1. 1.7.1. 架构总览
      2. 1.7.2. 层级条件嵌入
      3. 1.7.3. 小节规划器
      4. 1.7.4. 事件生成器
      5. 1.7.5. C2S tokenization
    8. 1.8. 形式语法约束
      1. 1.8.1. 自动机定义
      2. 1.8.2. Masked decoding
      3. 1.8.3. Tempo-aware timing mask
    9. 1.9. 优化目标
      1. 1.9.1. 加权负对数似然
      2. 1.9.2. Timing 与 opcode 辅助目标
      3. 1.9.3. 规划损失
      4. 1.9.4. 难度单调性
      5. 1.9.5. 音频对比目标
    10. 1.10. 训练策略
      1. 1.10.1. 谱面语言预训练
      2. 1.10.2. 音频条件拟合
    11. 1.11. 实验协议
      1. 1.11.1. 模型配置
      2. 1.11.2. 基线
      3. 1.11.3. 评价指标
    12. 1.12. 初步结果
      1. 1.12.1. 预训练
      2. 1.12.2. 音频拟合
      3. 1.12.3. 音频损失
    13. 1.13. 音频依赖的反事实检验
    14. 1.14. 消融实验设计
    15. 1.15. 失败模式
      1. 1.15.1. 语言先验压过音频
      2. 1.15.2. 稀有 opcode 欠拟合或过补偿
      3. 1.15.3. 合法但不可玩
      4. 1.15.4. 分段边界不连续
    16. 1.16. 局限性与有效性威胁
    17. 1.17. 结论

声明本文内容大部分由 AI 辅助整理和撰写实验设计数据和结论需自行甄别


BARGen-C2S节拍坐标与形式语法约束下的音频条件游戏谱面生成

AI 写的特大 ULT

摘要

音频条件谱面生成要同时搞定四件事理解音乐结构控制难度组织长程的操作序列保证输出格式合法这个任务和普通的符号音乐生成不太一样——符号音乐生成的输出本身就是"音乐"但谱面不是音频的逐帧转写同一首歌可以对应好几个难度好几个版本甚至不同设计者写出风格完全不同但都合理的谱面所以这里没把它当成音频事件检测来做而是当成一个目标本身就不唯一的条件结构预测问题

这次做的方法叫 BARGen-C2S核心思路是节拍对齐加层级生成先在显式的 tempo map 上把音乐表征onset能量和拍内相位统一对齐到小节坐标然后用一个小节规划器预测每小节的密度和音符家族分布再由一个因果事件生成器逐步输出时间增量opcode轨道宽度和关联参数版本难度LevelDecimalgimmick 这些控制条件通过逐层的条件调制注入整个网络为了避免模型吐出解析不了的东西这里把 C2S 谱面格式定义成了一个确定性有限状态语法解码时直接把不合法的 token 概率置零而不是等生成完了再用规则修

在按歌曲 ID 隔离的验证集上small 配置训练到第 13 epoch 时全 token accuracy 到了 82.97%timing accuracy 84.65%opcode accuracy 78.79%验证损失从 3.00 降到 1.82但同时也发现了个问题音频对比损失在 0.09 左右就提前进入平台期了这说明光看 teacher-forcing accuracy 高并不能证明模型真的在"听音频写谱"基于这个观察又做了一版反事实音频替换测试——分别用正确音频跨歌曲错配的音频和打乱时间顺序的音频喂给模型比较条件似然的差异想把"会写谱面语言"和"真的会听音乐写谱"这两件事区分开目前的结果能说明节拍坐标分项监督和语法约束这几个设计是有效的但音频到底有没有被真正用上还得靠基线对比消融实验和人工盲测才能下结论

关键词 自动写谱音乐信息检索条件生成Transformer形式语言节拍对齐C2S

引言

节奏游戏谱面将音乐组织为一系列可操作事件一个事件不仅包含发生时间还可能包含轨道宽度持续时间方向父子关系和视觉修饰参数谱面设计者需要在音乐对应性与可玩性之间取舍落点应反映节奏音色和段落结构但不能把全部声学瞬态机械地映射为音符高难度需要更高的信息密度和操作复杂度但不能退化为随机加密

设音频为 $x$tempo map 为 $M$控制条件为 $c$谱面为 $Y$目标分布为

$$p(Y\mid x,M,c). $$

该分布通常是多峰的对于相同的 $(x,M,c)$多个谱面都可能具有合理的节奏对应和可玩性因此以逐事件完全还原为唯一目标会产生两个问题第一验证准确率惩罚与参考谱不同但仍合理的设计第二模型可能通过记忆常见谱面语言获得较高准确率而没有真正利用音频

这次把整个任务拆成了三层来做

  1. 音乐坐标层 在变 BPM 与变拍号条件下将音频帧映射到统一 bar/tick 坐标
  2. 结构规划层 根据音频和难度条件预测各小节的事件密度与音符家族分布
  3. 语法生成层 在历史谱面音频 memory 和形式语法约束下生成完整 C2S 事件

这次做的东西大概包括下面几块

  • 设计了一套保留完整 tempo map 的 C2S 规范化表示用相对时间 token 表达事件同时保留可逆的 96 tick/拍坐标
  • 搭了个规划器—生成器的层级架构把宏观的难度控制和微观的事件生成拆开每层都注入版本难度LevelDecimal 和 gimmick 条件
  • 把 C2S 的字段约束写成了确定性有限状态自动机让非法轨道缺字段无根 Slide非法关联这些情况在采样阶段就直接概率为零
  • 把 tokentimingopcode accuracy 分开看另外加了反事实音频替换指标避免拿总体 teacher-forcing accuracy 当成模型真的依赖音频的证据

相关工作

符号音乐生成

基于 Transformer 的符号音乐模型已经能够生成具有中长程结构的 MIDI 或事件序列Music Transformer 使用相对注意力改善音乐重复结构建模Pop Music Transformer 以拍点为中心组织复合事件Compound Word Transformer 将同一时间位置的多字段属性组合建模这些工作证明了离散事件语言适合自回归生成但其输出通常描述音乐本身而非依赖音频难度和可玩性共同决定的操作谱面

音频到谱面生成

早期音频到谱面方法多将问题分解为 onset 检测与规则映射神经方法进一步使用卷积网络或序列模型预测离散落点但只预测二值 onset 表达不了轨道几何长条关系和复杂 opcode也没法保证输出满足形式语法这里的做法不把谱面当成 onset 标签序列而是当成带类型和参数的程序化事件语言来处理

受约束序列解码

在程序生成语义解析和结构化预测中grammar-constrained decoding 常用于保证输出满足上下文无关语法或类型系统C2S 的大部分局部合法性可以由确定性状态机描述轨道宽度和关联关系还需要少量动态状态相比生成后修复在线约束不会把概率质量浪费在必然被丢弃的候选上

可控生成与条件失效

条件生成模型可能忽略弱条件尤其当自回归前文已经能够解释大部分目标时游戏谱面具有强语言先验常见节奏事件字段顺序和局部动作模式均可由历史 token 推断所以哪怕模型接了音频 cross-attention也不能就此断言它真的用上了音频这里用错配音频和时间扰动音频构造反事实输入来测量条件依赖到底有多强

任务定义

谱面事件

一张谱面由按绝对 tick 排序的事件组成

$$Y=(e_1,e_2,\ldots,e_N), $$
$$e_i=(t_i,o_i,l_i,w_i,\mathbf a_i,r_i). $$

$t_i\in\mathbb N$ 为时间$o_i$ 为 opcode$l_i$ 为起始轨道$w_i$ 为宽度$\mathbf a_i$ 为持续时间方向等参数$r_i$ 表示可选的关联标识普通轨道满足

$$0\le l_i<16,\qquad 1\le w_i\le16-l_i. $$

SlideHold 和 AIR-ACTION 等事件还受到父子关系持续时间和目标轨道约束

控制条件

控制向量为

$$c=(v_f,v,d,r,q,g), $$

其中 $v_f$ 为版本族$v$ 为具体版本$d$ 为难度$r$ 为整数 Level$q\in\{0,10,\ldots,90\}$ 为 Decimal$g$ 为 gimmick 标志$r$$q$ 分开建模可以在保持整数等级序关系的同时表达 13.013.9 的差异

条件生成目标

将事件序列编码为 token 序列 $\mathbf y=(y_1,\ldots,y_L)$模型学习

$$p_\theta(\mathbf y\mid x,M,c) =\prod_{j=1}^{L} p_\theta(y_j\mid y_{<j},x,M,c). $$

训练采用 teacher forcing推理时模型以自身输出作为历史两者之间的分布偏移意味着 token accuracy 只能衡量条件似然拟合不能直接等价为自由生成质量

数据构建

元数据与谱面解析

数据构建从 Music.xml 读取歌曲 IDreleaseTagName难度Level 和 Decimal并将其与 C2S 和音频关联解析器完整读取 timing opcode音符 opcode轨道几何持续时间和事件关联歌曲 ID谱师名和游戏统计字段不作为生成目标

在当前数据快照中共有 7,999 张可索引谱面容量审计会隔离单小节 token 数超过所选模型上限的谱面WORLD'S END 默认单独划分不参与普通难度课程训练所有训练目标必须通过同一解析器进行 encode—decode 回环

Song-disjoint 划分

划分单位为歌曲而不是谱面文件记歌曲集合为 $\mathcal S$

$$\mathcal S_{\mathrm{train}} \cap\mathcal S_{\mathrm{valid}}=\varnothing, \qquad \mathcal S_{\mathrm{train}} \cap\mathcal S_{\mathrm{test}}=\varnothing. $$

同一歌曲的 BASICADVANCEDEXPERTMASTER 和 ULTIMA 不得跨集合该设计阻止模型在训练时见到同一音频的其他难度从而避免验证泄漏

分段与上下文

目标窗口包含 8 个小节另取此前 2 小节作为只读上下文$k$ 个样本为

$$(Y_{C_k},X_{C_k\cup B_k},Y_{B_k}), $$

其中 $C_k$ 为历史区间$B_k$ 为目标区间上下文不包含未来事件窗口按 epoch 旋转使训练在固定计算预算下逐步覆盖长谱面的不同位置

节拍坐标化音频表示

Piecewise-affine tempo map

tempo map 由变速点

$$M=\{(u_j,b_j,m_j)\}_{j=1}^{J} $$

组成其中 $u_j$ 是起始 tick$b_j$ 是 BPM$m_j$ 是拍号每拍使用 $R=96$ tick$t\in[u_j,u_{j+1})$则 tick 到秒的映射为

$$s(t)=s(u_j)+\frac{60}{Rb_j}(t-u_j). $$

该映射是分段仿射的因此可精确积分变 BPM 音乐而不是以全曲平均 BPM 近似拍号决定小节长度

$$L_j=R\cdot n_j\cdot\frac{4}{d_j}, $$

其中 $n_j/d_j$ 为当前 time signature

音频特征

音频以 24 kHz 单声道输入冻结的 MERT-v1-95M得到

$$H^{\mathrm{MERT}}\in\mathbb R^{F\times768}. $$

随后拼接 onset strengthRMS energy 以及节拍相位的正余弦编码$f$ 帧相对于当前拍的归一化位置为 $\rho_f\in[0,1)$相位表示为

$$(\sin2\pi\rho_f,\cos2\pi\rho_f). $$

相同方法用于小节相位最终特征在 tempo map 上重采样到每小节固定帧数使不同 BPM 下相同音乐位置具有相同张量坐标

BARGen-C2S

架构总览

BARGen-C2S 不是一个直接把整首音频映射成整张谱面的黑盒网络而是由音频前端小节规划器事件生成器和约束解码器串联而成

flowchart TB A["Audio waveform"] --> B["Frozen MERT-v1-95M"] A --> C["Onset and RMS extraction"] M["Tempo map and time signature"] --> D["Beat-coordinate alignment"] B --> D C --> D D --> E["Beat-aligned audio frames"] E --> P["Bar-level Transformer Planner"] K["Version, difficulty, Level, decimal and gimmick"] --> P P --> Q["Density distribution"] P --> R["Event-family distribution"] P --> S["Continuous plan states"] E --> U["Audio and plan memory"] S --> U H["Previous C2S tokens"] --> V["Causal Event Decoder"] U -->|"Cross-attention"| V K -->|"Layer-wise FiLM"| V V --> W["Token logits"] G["C2S grammar automaton"] --> X["Grammar and timing mask"] M --> X W --> X X --> Y["Valid C2S event sequence"]

冻结的 MERT 负责提取音色和声节奏纹理等高层音乐表征onset 与 RMS 提供更直接的瞬态和能量信息tempo map 则负责把这些连续时间特征转换到离散谱面坐标三者的职责不同MERT 回答听起来是什么onset 回答哪里发生了瞬态tempo map 回答这个瞬态位于第几小节第几拍和第几个 tick

小节规划器先观察完整的 8 小节目标片段为每一小节预测事件密度和音符家族分布并产生连续 plan state它不决定某一个 TAP 应放在第几轨而是建立段落轮廓例如副歌是否应增密空拍是否应留白某一小节是否更适合长条或 AIR这样事件生成器不必在每一步同时推断宏观结构和局部字段

事件生成器随后进行自回归写谱它的一侧通过 causal self-attention 阅读此前的 C2S token因此能够延续交替手序重复型Hold 和 Slide 路径另一侧通过 cross-attention 阅读逐帧音频与 planner state因此可以根据当前音乐片段调整落点和音符类型最后语法自动机和 tempo-aware timing mask 删除非法输出概率模型负责在合法集合内判断哪个选择更像目标谱面自动机负责判断哪些选择根本不允许出现

采用层级结构而非单一 Transformer 有三个原因第一音频帧数与谱面 token 数之间不存在一一对应先按小节规划可缓解两种时间尺度不一致第二难度主要影响段落密度音符家族比例和操作复杂度显式 planner 比仅依赖 decoder 隐状态更容易监督和校准第三C2S 的合法性是确定规则不应要求神经网络通过样本近似学习将语法交给自动机可以把模型容量保留给音乐对应性和设计风格

层级条件嵌入

条件嵌入为

$$e_c=e_{v_f}+e_v+e_d+e_r+e_q+e_g+ \operatorname{MLP} \left[ \frac d5, \frac r{31}, \frac q{90}, \frac{r+q/100}{31.9} \right]. $$

每个 Transformer block 使用 FiLM 调制

$$\operatorname{FiLM}(h,e_c) =h\odot(1+\gamma(e_c))+\beta(e_c). $$

相比仅添加首 token逐层调制能在长序列中持续保留控制条件

小节规划器

对第 $b$ 个小节将其中音频帧池化为 $\bar x_b$规划器输入为

$$z_b^{(0)}=W_x\bar x_b+W_m m_b+p_b, $$

其中 $m_b$ 为节拍与拍号特征$p_b$ 为小节位置嵌入经过 Transformer Encoder 后得到 $z_b$并预测密度类别与音符家族分布

$$p(d_b\mid x,M,c)=\operatorname{softmax}(W_dz_b), $$
$$p(f_b\mid x,M,c)=\operatorname{softmax}(W_fz_b). $$

规划器描述这一小节应该多密主要由什么组成但不直接输出具体音符

事件生成器

事件生成器为因果 Transformer音频帧和规划表示被投影后拼接为 memory

$$H^{\mathrm{mem}}= [W_aH^{\mathrm{audio}};W_pZ^{\mathrm{plan}}]. $$

$l$ 层进行

$$h' = h+\operatorname{SelfAttn} (\operatorname{FiLM}(\operatorname{LN}(h),e_c)), $$
$$h'' = h'+\operatorname{CrossAttn} (\operatorname{FiLM}(\operatorname{LN}(h'),e_c),H^{\mathrm{mem}}), $$
$$h^{(l+1)}=h''+\operatorname{FFN} (\operatorname{FiLM}(\operatorname{LN}(h''),e_c)). $$

small 配置包含 8 个 decoder block$d=384$6 个注意力头FFN 维数 1536每隔一层使用音频 cross-attention

从条件概率角度planner 引入隐变量 $Z$模型可以近似写为

$$p(Y\mid x,M,c) \approx p_\psi(Z\mid x,M,c) p_\theta(Y\mid Z,x,M,c). $$

$Z$ 不是离散采样变量而是由 planner 产生的连续小节状态第一项学习全局结构第二项学习事件细节训练时两部分通过总损失联合优化MERT 保持冻结但从 planner 和 decoder 到音频投影层的梯度仍然存在

decoder 的 memory 同时包含细粒度音频帧与低频 plan states若只使用 plan state模型可能丢失小节内部的瞬态位置若只使用逐帧音频模型又可能缺少跨小节密度轮廓二者拼接使 cross-attention 可以在局部声学证据与宏观结构之间选择

C2S tokenization

事件被拆为时间类型和参数字段例如

<event_start> dt:48 op:TAP lane:7 width:2 <event_end>

时间使用

$$\Delta t_i=t_i-t_{i-1} $$

而非全局绝对小节号相对时间减少词表对歌曲长度的依赖并使常见节奏间隔共享参数96 tick/拍对应 4/4 小节内的 384 个离散位置

形式语法约束

自动机定义

令语法自动机为

$$\mathcal A=(Q,\Sigma,\delta,q_0,F), $$

其中 $Q$ 为状态集合$\Sigma$ 为 token 词表$\delta$ 为状态转移$q_0$ 为初始状态$F$ 为可接受状态状态除字段位置外还保存当前 opcode轨道宽度Slide 根节点和待完成参数

当前状态 $q_j$ 下允许集合为

$$V(q_j)=\{v\in\Sigma:\delta(q_j,v)\text{ 已定义}\}. $$

Masked decoding

设网络输出 logits 为 $z_j$语法约束后的 logits 为

$$\tilde z_{j,v}= \begin{cases} z_{j,v},&v\in V(q_j),\\ -\infty,&v\notin V(q_j). \end{cases} $$

因此

$$p(y_j=v\mid\cdot)=\operatorname{softmax}(\tilde z_j)_v $$

对所有非法 token 恒为零该约束排除字段乱序越界轨道非法宽度缺少 Slide root零持续时间 continuation 和不完整事件

Tempo-aware timing mask

语法合法不等于节拍合法给定 tempo map 和用户选择的细分集合 $G$允许时间位置为

$$\mathcal T(M,G)= \bigcup_b\left\{t_b+k\frac{L_b}{g}:g\in G, k\in\{0,\ldots,g-1\}\right\}. $$

时间 token 只有在累积位置属于 $\mathcal T(M,G)$ 时才允许输出由此变 BPM 改变 tick 到秒的映射但不会破坏谱面在音乐拍点上的离散对齐

优化目标

加权负对数似然

基础损失为

$$\mathcal L_{\mathrm{tok}}= -\frac{\sum_jw_{y_j}\log p_\theta(y_j\mid y_{<j},x,M,c)} {\sum_jw_{y_j}}. $$

音符类型相对 TAP 的权重为

$$w_o=\operatorname{clip} \left( \left(\frac{n_{\mathrm{TAP}}}{n_o}\right)^{1/4}, w_{\min},w_{\max} \right). $$

四次方根缩放弱于频率倒数可提高稀有 opcode 的梯度占比同时避免 FLK 等类别支配训练

Timing 与 opcode 辅助目标

$\Omega_t$$\Omega_o$ 分别为 timing token 与 opcode token 的位置集合

$$\mathcal L_t=-\frac1{|\Omega_t|} \sum_{j\in\Omega_t}\log p_\theta(y_j), $$
$$\mathcal L_o=-\frac1{|\Omega_o|} \sum_{j\in\Omega_o}\log p_\theta(y_j). $$

预训练阶段使用

$$\mathcal L_{\mathrm{pre}}= \mathcal L_{\mathrm{base}}+0.35\mathcal L_t+0.25\mathcal L_o. $$

这两个分项直接对应落点与音符类型防止大量简单参数 token 抬高总体准确率

规划损失

规划损失为

$$\mathcal L_{\mathrm{plan}}= \mathcal L_{\mathrm{density}} +\lambda_r\mathcal L_{\mathrm{reg}} +\lambda_f\mathcal L_{\mathrm{family}}. $$

其中密度使用分类交叉熵回归项使用 Smooth-$L_1$音符家族使用加权交叉熵

难度单调性

对同一音频构造较低难度条件 $c^-$要求预测密度满足

$$D(x,c)\ge D(x,c^-)+m. $$

对应 hinge loss 为

$$\mathcal L_{\mathrm{mono}}= \max(0,m-D(x,c)+D(x,c^-)). $$

该目标约束统计复杂度的序关系但不要求高难谱面在每个位置机械增密

音频对比目标

对 batch 内随机置换 $\pi$正确与错配音频的规划损失分别为 $P_i^+$$P_i^-$

$$\mathcal L_{\mathrm{audio}}= \frac1B\sum_i \max(0,\gamma+P_i^+-P_i^-), \qquad\gamma=0.20. $$

总损失为

$$\mathcal L= \mathcal L_{\mathrm{tok}} +\lambda_p\mathcal L_{\mathrm{plan}} +\lambda_m\mathcal L_{\mathrm{mono}} +\lambda_g\mathcal L_{\mathrm{grammar}} +\lambda_a\mathcal L_{\mathrm{audio}}. $$

训练策略

谱面语言预训练

预训练只学习规范化 C2S不使用音频数据由 BASICADVANCED 和约 15% EXPERT 构成每张 BASIC/ADVANCED 每 epoch 贡献一个旋转窗口预训练最少 3 epoch最多 8 epoch从第 3 epoch 起

$$\min(A_t,A_o)\ge0.70 $$

时可提前切换$A_t$$A_o$ 只在 BASIC/ADVANCED 的 song-disjoint 验证集上计算

音频条件拟合

拟合阶段使用 EXPERTMASTER 和 ULTIMA并继承预训练权重优化器为 AdamW使用 BF16梯度裁剪EMA5% warmup 和 cosine decaysmall 配置峰值学习率为 $2.75\times10^{-4}$最低学习率为峰值的 20%

flowchart LR A["All parsed charts"] --> B{"Difficulty curriculum"} B -->|"BASIC and ADVANCED + 15% EXPERT"| C["Chart-language pretraining"] C --> D{"Epoch >= 3 and min timing/opcode acc >= 0.70?"} D -->|"No, epoch < 8"| C D -->|"Yes"| E["Select best foundation checkpoint"] D -->|"No, epoch = 8"| E B -->|"EXPERT, MASTER and ULTIMA"| F["Audio-conditioned dataset"] E --> G["Initialize planner and decoder weights"] F --> G G --> H["15-epoch audio-conditioned fit"] H --> I["Song-disjoint validation"] I --> J["Best checkpoint by validation loss"] J --> K["Constrained multi-candidate inference"]

实验协议

模型配置

部分 small 配置
MERT 95M冻结
Planner 4 层$d=320$5 heads
Decoder 8 层$d=384$6 heads
Decoder FFN 1536
目标窗口 8 小节
历史上下文 2 小节
时间分辨率 96 tick/拍
Micro batch 4
Gradient accumulation 2

基线

要让结果站得住脚至少得跟下面这几个基线比一比目前这些基线实验还没跑完所以现在还不能把没测过的东西写成"比别人好"的结论

  • BPM-grid Random 按目标密度在节拍网格随机落点
  • Chart LM 只有谱面前文和控制条件不输入音频
  • Audio-only Planner 音频预测密度后由规则映射事件
  • Flat Transformer 无规划器的单阶段音频条件 Transformer
  • Unconstrained Decoder 关闭 grammar mask用生成后修复处理非法事件
  • Constant-BPM 将完整 tempo map 替换为单一 BPM

评价指标

除 token accuracy 外应报告

$$A_t=\frac{\#\text{correct timing tokens}} {\#\text{timing tokens}}, $$
$$A_o=\frac{\#\text{correct opcode tokens}} {\#\text{opcode tokens}}. $$

自由生成还应报告

  • Parse Rate 可被独立 C2S 解析器读取的候选比例
  • Rule Validity 通过轨道持续时间和关联检查的比例
  • Onset Alignment 生成事件与局部 onset 峰值的加权距离
  • Beat Deviation 事件到最近合法节拍细分的平均 tick 距离
  • Density Error 生成 judgements/min 与目标等级校准均值之差
  • Opcode F1 按 TAPHLDSLDAIRFLK 分别计算 macro-F1
  • Audio Reliance 正确音频与反事实音频的似然差
  • Human Preference 双盲成对比较的可玩性和音乐对应性

初步结果

预训练

8 epoch 后BASIC/ADVANCED 验证结果为

指标 数值
Timing accuracy 70.27%
Opcode accuracy 70.29%
全 token accuracy 69.12%

音频拟合

当前可核验的拟合曲线如下

Epoch Val loss Token acc. Timing acc. Opcode acc.
5 2.0733 76.82% 78.37% 72.38%
7 1.9713 79.71% 81.29% 75.52%
10 1.8722 81.81% 83.31% 77.61%
11 1.8507 82.30% 83.90% 78.14%
12 1.8367 82.64% 84.21% 78.52%
13 1.8227 82.97% 84.65% 78.79%

验证损失和两项关键准确率均持续改善但第 10 epoch 后边际收益显著减小该趋势符合正常的后期收敛不支持训练完全没有梯度下降的判断

音频损失

Epoch Val audio loss
1 0.1206
4 0.1034
7 0.1011
10 0.0933
11 0.0919
12 0.0922
13 0.0944

音频损失前期下降约 24%随后进入平台由于使用 hinge loss满足 margin 的 batch 损失为零因此单 batch 的 audio=0 不能解释为没有音频梯度然而平台本身说明当前规划器级对比目标不足以证明 decoder 强依赖音频

音频依赖的反事实检验

仅观察 $\mathcal L_{\mathrm{audio}}$ 不足以回答模型是否听歌对验证样本构造三种输入正确音频 $x$跨歌曲错配音频 $x'$ 和保留能量但打乱时间顺序的音频 $\tilde x$定义

$$\Delta_{\mathrm{swap}}= \mathcal L_{\mathrm{tok}}(x')- \mathcal L_{\mathrm{tok}}(x), $$
$$\Delta_{\mathrm{shuffle}}= \mathcal L_{\mathrm{tok}}(\tilde x)- \mathcal L_{\mathrm{tok}}(x). $$

若模型使用音频则两者应显著大于零统计检验以歌曲为单位进行 bootstrap而非以 token 为单位以避免长谱面获得不成比例的权重报告 95% confidence interval

$$\operatorname{CI}_{95\%} =\left[Q_{0.025}(\Delta^*),Q_{0.975}(\Delta^*)\right]. $$

这个实验做完之前只能说模型具备音频条件接口和规划器级别的对比学习还不能说已经证明了强音频依赖

消融实验设计

要把结论做扎实至少得跑完下面这些消融实验

变体 要回答的问题
去除 tempo map 变 BPM 坐标是否必要
去除 planner 层级规划是否改善密度与长程结构
去除 grammar mask 在线约束是否提高有效候选率
去除 timing/opcode 辅助损失 分项监督是否提高关键准确率
去除历史上下文 前 2 小节是否改善连续性
去除音频 模型是否主要退化为 chart LM
错配音频训练 当前 audio loss 是否识别音乐身份
条件仅放首 token 逐层 FiLM 是否改善难度控制

每个变体至少使用三个随机种子对连续指标报告均值标准差和 paired bootstrap对人工偏好使用 Bradley–Terry 模型或双侧 binomial test并校正多重比较

失败模式

当前系统存在四类可预期失败

语言先验压过音频

decoder 在 teacher forcing 下可以从真实前文预测常见模式因而在不使用音频时仍能获得较高准确率该问题必须通过音频消融识别而不能由 cross-attention 的存在推断

稀有 opcode 欠拟合或过补偿

不加权时FLK 等事件召回率低权重过高时生成谱面会出现异常密集的 FLK四次方根权重和类别上限只是一种折中最终仍应按类别报告 precisionrecall 与生成频率偏差

合法但不可玩

grammar mask 保证的是句法合法性合法的密集纵连手位冲突或无意义 Slide 仍可能不可玩可玩性需要几何约束难度校准和人工偏好共同评价

分段边界不连续

2 小节历史能够传递局部动机但无法完整表示跨越十余小节的主题复现增加上下文会提高显存和解码成本另一方向是使用低频全曲结构 token 或检索式段落 memory

局限性与有效性威胁

  • 当前结果来自单一模型规模和单一主要随机种子不能估计训练方差
  • 尚未完成 BPM-gridchart-only 和 flat Transformer 等必要基线
  • teacher-forcing 指标不能替代自由生成质量
  • 数据来自单一谱面生态谱师风格和版本分布可能形成隐藏混杂变量
  • MERT 冻结降低过拟合与显存成本但限制了音频表示对谱面任务的适配
  • WORLD'S END 被隔离因此结论不适用于非常规轨道和极端 gimmick
  • 当前音频对比仅作用于规划器无法直接约束 decoder 的 token 级音频敏感性

结论

BARGen-C2S 把自动写谱这件事拆成了节拍坐标层级规划条件事件生成和形式语法约束四块来做目前的实验结果显示模型能稳定学会 C2S 这套事件语言——timing accuracy 超过 84%opcode accuracy 接近 79%在完整的 tempo map 上也能稳定输出被语法自动机约束住的候选谱面但比某个具体 accuracy 数字更值得关注的是音频损失和 token 损失的收敛节奏完全不一样模型很早就学会了"怎么写得像一张谱面"但"怎么针对这首歌来写"现在看还是最大的瓶颈

所以接下来要做的不是盲目堆参数量或者拉长训练时间而是把反事实音频评价decoder 级别的困难负样本训练严格基线和人工盲测这几件事做完只有当正确音频相比错配音频能明显提高条件似然并且在没见过的歌曲上也能提升音乐对应性这套系统才能真正从"一个写得不错的谱面语言模型"变成"真正听歌写谱的模型"