论文:STARS ------ 首个同时解决歌声转录、对齐与精细风格标注的统一框架
最近在看歌声合成(SVS)相关的工作,翻到一篇叫 STARS 的论文。它想解决的问题很实际:训练歌声合成模型需要大量高质量标注,而人工标注又贵又慢。于是这篇论文提出了一个能一站式自动标注的框架。
先搞清楚:STARS 输入输出是什么
从任务总览的角度看,STARS 是个黑盒:
输入
Lyric:歌词文本(You raise me up...)wav:歌声音频
输出(三份多层级标注)
| 输出 | 格式 | 内容 |
|---|---|---|
| ① 音素-音频对齐 | TextGrid | 每个音素(Y UW1 EY1 Z...)对齐到波形的时间区间 |
| ② 技巧 & 风格标注 | TextGrid | 技巧标注(逐单元 0/1)+ 全局风格(如 pop, slow, high, sad) |
| ③ 音符转录 | MusicXml | 转成带音高时值的乐谱(♩=95.0) |
值得注意的是,内部三个子任务是级联的:
Text Alignment → Tech & Style Annotation → Note Transcription
先对齐,再基于对齐做技巧风格标注,最后做音符转录。这正是它区别于"只解决孤立环节"方法的地方------用一个框架串起全流程。
核心问题:它是 encoder-decoder 结构吗?
不是标准的单一 encoder-decoder(seq2seq)。
它更准确的描述是:
一个共享的多层级 Encoder 骨干 + 多个并列的 Decoder / Predictor 头
特点:多任务 (multi-task) + 层级化 (hierarchical) + 非自回归 (non-autoregressive)
下面从整体架构图 (a) 开始,由下往上拆。
(a) 整体数据流:从音频到多层级标注
输入层(最底部)
- 音频波形经过
ASR得到歌词,同时提供 Phone(音素)序列。
第一层 Encoder(共享骨干)
Frame Level Acoustic Encoder从音频提取帧级特征 S_f。- S_f 送进
Phone Predictor→ 输出 Phone Logits(每帧属于各音素的概率)。
对齐(关键桥梁)
DP Alignment(动态规划对齐)把 Phone Logits 和真实音素序列对齐 → 得到 Phone Boundary(音素边界)。- 这一步就是总览里的 "Text Alignment",非自回归,靠 DP 而不是逐帧解码。
层级化 Encoder 堆叠(核心思想)
边界确定后,特征就能按层级逐级聚合。左侧那一列 Encoder 逐级往上:
Frame ─(音素边界)→ Phone Level Encoder → S_p
Phone ─(词边界) → Word Level Encoder → S_w
─(音符边界)→ Note Level Encoder → S_n
─ Sentence Level Encoder → S_g
每一级用边界信息把下层特征池化成更高层单元的表示。图中 ⊕ 表示特征融合(把下层特征加/拼进来)。
多个并列的解码头(各管一个子任务)
| 头 | 输入 | 输出 |
|---|---|---|
Phone Predictor |
S_f | 音素 |
DP Alignment |
S_w + logits | 音素边界 |
Note Boundary Predictor |
S_p | 音符边界 |
Note Decoder |
S_n | 音符(音高) |
Technique Decoder |
S_g | 多标签演唱技巧 |
Global Style Predictor |
CLS + S | 全局风格(情感、节奏) |
所以它有一个逐级共享的编码骨干,顶上挂了 5~6 个任务头并行输出。这就是它能"一个框架同时做转录、对齐、风格标注"的原因。
(b) Global Style Predictor:用 Cross Attention 聚合全局信息
连线是:S → Project → K, V;CLS → Project → Q;两者进 Cross Attention。
先解释术语:
- CLS token :"Classification token",一个可学习的向量(不来自音频,是模型自带参数)。像一个"空白采访本",任务是去汇总整句信息,再拿它的输出做预测。BERT 里就是用 CLS 做句子级分类。
- Query / Key / Value(Q / K / V) :注意力机制的三个角色。
- Query:"我想找什么"(这里来自 CLS)。
- Key:"每个信息块的标签",和 Query 比相似度算权重。
- Value:"每个信息块的实际内容",按权重取出。
- 通俗版:Q 拿着问题去和所有 K 比对(得到权重),再按权重把 V 加权求和 → 得到答案。
- S:(a) 图里的句级特征序列,是"信息库",提供 K 和 V。
- Project:线性投影层,把输入映射到 Q / K / V 各自的空间。
- Cross Attention:区别于 Self-Attention(Q/K/V 同源)。这里 Q 来自 CLS、K/V 来自 S,两个来源 → "交叉"。
CLS(可学习的问题向量)作为 Query,句级特征 S 作为 Key/Value,通过 Cross Attention 让 CLS 从整句里"读"出全局信息,输出送给 Global Style Predictor 预测情感、节奏(Emotion, Pace)。
© Multi-Level Acoustic Encoder:每个"XX Level Encoder"的内部
从下往上:
Mel & F0 Extractor 提取梅尔谱和基频 F0
↓
CMU Encoder 主干编码器(见 d)
↓
Pooling 按 Boundary 把帧特征池化成该层级单元
↓
Conv
↓
Vector Quantization 向量量化 → 离散化表示
↓
Length Regulator 长度调节,把单元级展开回帧级(FastSpeech 经典模块)
Boundary(虚线输入)控制 Pooling 怎么切分、Length Regulator 怎么展开。这就是论文说的"非自回归局部声学编码器"(non-autoregressive local acoustic encoders)。
(d) CMU Encoder:最底层的特征骨干
双分支输入:Mel Encoder(梅尔谱)+ F0 Encoder(基频)→ 相加融合。
中间是重复 ×N 的 block,结构类似带 MoE 的 Conformer/Transformer block:
Downsample Layers
┌─ FreqMOE Module ×1/2 频域混合专家
├─ Self-Attention
├─ Conv
├─ FreqMOE Module ×1/2
└─ Layer Norm 每个子层都带残差 ⊕
Upsample Layers
FreqMOE(频率维度的 Mixture-of-Experts)是它的特色模块,先降采样再上采样,残差连接贯穿。
四张图 a/b/c/d 之间是什么关系
关系是逐级放大镜,从整体到局部零件。a 是整体,b/c/d 是 a 里某个方块的内部拆解:
(a) Overall Architecture ← 全局装配图,整条数据流
│
├── 里面的 "Global Style Predictor" ──放大──▶ (b)
│
├── 里面的 "XX Level Acoustic Encoder" ──放大──▶ (c)
│ (Frame/Word/Phone/Note/Sentence 都是这个内部结构)
│
└── (c) 里面的 "CMU Encoder" ──放大──▶ (d)
| 子图 | 是 (a) 中哪个模块的展开 | 层级 |
|---|---|---|
| (a) | 整个系统 | 顶层 |
| (b) | (a) 的 Global Style Predictor |
(a) 的一个头 |
| © | (a) 左侧那一列 XX Level Acoustic Encoder |
(a) 的编码骨干 |
| (d) | © 里的 CMU Encoder |
© 的子模块 |
所以是三层嵌套的包含关系:
(a) 包含 (b) 和 ©;© 又包含 (d)。
b 和 c 平级(都是 a 的组成部分),d 比 c 低一级(是 c 的内部零件)。
看图顺序建议:先看 (a) 理解整体流程 → 遇到 Acoustic Encoder 想看内部就翻 © → 想看 © 里 CMU Encoder 怎么做就翻 (d) → 单独想看风格预测就翻 (b)。
总结
STARS 不是经典的 seq2seq encoder-decoder,而是:
共享的层级化非自回归 Encoder 骨干 + 多个任务专属 Decoder 头的多任务结构。
核心逻辑:
先做帧级音素预测 → DP 对齐拿到边界 → 用边界逐级(帧 → 音素 → 词 → 音符 → 句)聚合特征 → 每个层级的特征各自喂给对应解码头,并行产出对齐、音符、技巧、全局风格。
它的价值在于:把过去分散在多个工具里的歌声标注环节,统一进一个框架,并用非自回归设计保证效率,从而解决歌声数据集难以大规模构建的痛点。