IrohaStudios 发布文章
Iroha

怎么做出
Iroha 的七种控制

技术笔记基于 2026-10-29 的报告;人工听测已补充 10-30 的快照。

情感试听

[happy]

あっ、つい話し込んじゃってたわね。

啊,不知不觉聊了这么久。
Fish S2-Pro

整句情感

数据

固定同一句台词与同一段,让分别生成开心、生气、难过和惊讶的版本。保留情感对得上、文字没读错、音色与质量合格的候选。

训练

把“带标签的文字 + 参考声音”作为输入,把筛选后的语音作为答案做。内容与音色保持不变,模型更容易学到标签对应的语气变化,而不是靠台词内容猜情绪。

推理

接口把 joy 转成 [happy],其余情感也映射成对应标签,再交给同一个生成模型。设为 none 或 neutral 时不加标签;句首标签会覆盖整句设置。

四种情感的命中率不同;发布评测中,开心为 76.67%,低于另外三类。

训练方法

Iroha 基于 Fish S2-Pro。Slow model 和 fast model 依次预测,由解码器还原音频。训练改动集中在配对数据、LoRA 微调和策略优化。

输出:44.1 kHz
Aa文字 + 参考声音指定内容与音色
→
≈先预测一帧的语义码
→
≋补齐 9 个残差码
→
▂▅▇▃▆语音解码器把离散码还原成声波
01

配对数据

“开心地说”必须对应一段真的开心的录音;[sigh] 必须对应实际的叹气。先构造、筛选这些示范,才有明确的学习信号。换标签却复用同一段录音,教不会模型新的表达。

02

监督微调

要求模型从输入预测目标语音。我们用更新两个 transformer 中的一小部分新增参数,再将它们合并进模型。情感、事件、耳语各自有不同的示范构造。

03

策略优化

让同一请求生成 8 个候选,用情感、文字正确性、音色与质量一起打分。训练提高相对较好候选的生成概率,同时用限制模型偏离已经学会的表达。只更新 slow model 的 MLP,fast model 保留 SFT 参数。

训练配置

SFT:两路 transformer 的 attention / MLP 使用 LoRA,rank 32、alpha 16,训练 2,700 步后续训 1,600 步。策略阶段:仅 slow MLP 使用 rsLoRA,rank 16、alpha 64;每次采样 12 个请求,每个 8 个候选,更新一次,KL 权重 0.02。读音控制发生在文本进入模型前;耳语 guidance 与强度 steering 发生在推理时。

控制功能

情感转折

行内标签控制后续片段的情感。

[happy] やった、ついに完成したよ!
[sad] …でも、これを見せたかった人は、もういないんだ。

终于完成了!……可想让他看到的那个人,已经不在了。

同说话人拼接

取同一个说话人的两段不同情感语音,把带标签的文字和语音码依次接起来,记录分界点,再用这个人的另一段录音作参考。最终混合数据含 5,000 条一般转折与 4,000 条更明确的非中性转折样本。

分段奖励

训练时分别检查两部分的情感,衔接停顿超过 0.6 秒会被惩罚。使用时输入完整的带标签文本,一次生成整句语音。训练样本的拼接,是为了教会这种连续输出。

尚未完成:当前发布包完整的分段评测。整段音频被判成“开心”,不能证明前开心、后难过都做对了。

耳语

支持 [whisper] 标签或耳语参考音。

[whisper] …私の声…どうして、こんな声に…………我的声音……怎么会变成这样的声音……

双路输入

1,652 段耳语目标各自配两套输入:① 普通参考音 + [whisper];② 耳语参考音 + 不带标签的文字。两套输入都预测同一段耳语,把“跟随参考中的发声方式”转成“也能听懂标签”。

Guidance

每一步都计算“有耳语标签”和“去掉标签”两种预测,再用放大两者差异。默认强度为 1.5,非耳语时为 0;两路使用同一套权重,各自保留生成历史。

代价:耳语更容易出现,但音色和预测质量也会下降。它不是把音量调低这么简单,也不是所有请求都能稳定成功。

强度控制 实验功能

方向提取

对每种情感,用 500 条训练侧输入,分别记录带标签与不带标签时的,求出并平均它们的差异。这个平均差异就是之后注入的方向。

激活干预

在第 20、22 层按系数加入该方向,再保持原来的。四档系数为 −0.06、−0.03、0、0.045;0 就是普通的带情感标签生成。

使用限制:非零强度只支持整句情感参数,不能同时带行内情感或事件标签。72 个上下文中只有 70.83% 完整按四档排序,且更强时音色可能偏移,因此仍是实验功能。

生气强度默认
最弱较弱默认较强

こんなことをして、良心が痛まないのか!

音色复刻

参考音频
生成音频

参考:えっと…こちらのお客様は?
生成:あっ、つい話し込んじゃってたわね。

参考条件

参考录音先被压成语音码,与它的转写文字一起放入提示。新台词使用对应的说话人标记,模型据此延续该声音。界面里的预设音色只是选择不同参考录音,共用同一组模型权重。

音色保持

SFT 保留每个目标的参考条件,并混入普通无标签语音;策略训练用作奖励和筛选条件。耳语会改变发声特征,因此单独处理它的相似度门槛。

准备参考时:转写应与录音一致。错误转写的鲁棒性尚未测量;强情感下音色相似度也会下降。

读音控制

水神[すいじん]様すいじん様

水神[すいじん]さんから、素敵なお祝いの手紙が届きました!

OmniVoice · 读音控制前瞻示例

文本预处理

解析器找到方括号前紧挨着的一串汉字,把它替换成括号里的假名。例子中,真正送进模型的文字已经是“すいじん様”,后面的生成流程不用改变。

读音标签实验

学括号读法的候选没有达到要求,还损伤了耳语与叹气能力。显式改写在 264 条输出上达到 94.70% 读音命中,原版加同一前端也达到 93.90%。主要收益来自输入更明确。

它解决的范围:指定假名读法。它不做自动分词,也不控制日语的高低音重音。

评测结果

总表

我们的所有实验都基于 Fish S2 Pro。
6 个音色 × 20 句 × 喜怒哀惊,共 480 条;所有模型用同一条参考音频、同一套打分。判对用两个情感识别模型:emo2vec large(开源,没参与我们的训练)和 EmoRuler(我们自己finetune过的emo2vec large)。
Fish Audio Drama 3 用同样的方括号情感标签(它把方括号里的内容当作自然语言指令);720 条里有 7 条说到一半停住、之后只有静音直到 95 秒上限,按原样计分。
Qwen3-TTS、OmniVoice、Ming 3.0 TTS 等知名多语言 TTS 我们也测试过。它们在中英文上效果很好,但试听下来日语发音错误较多、也不够自然,因此本表只比较日语表现较好的 TTS。

模型带情感(喜怒哀惊)不带情感
判对emo2vec large判对EmoRuler喜 / 怒 / 哀 / 惊 %EmoRuler音色相似度speaker similarity音质UTMOS字错率音色相似度speaker similarity音质UTMOS字错率
Fish S2 Pro 原版起点,没有训练17.9%6.0%6 / 0 / 9 / 90.6853.515.6%0.6843.576.2%
OursFish S2 Pro 上 SFT + 强化学习85.6%93.3%91 / 94 / 95 / 930.6363.555.8%0.6943.784.8%
Fish Audio Drama 3Fish 最新开源 · 35B MoE(3B 激活)32.1%21.2%32 / 14 / 21 / 180.6283.267.0%0.6533.439.3%
IndexTTS-2.5开源 · bilibili40.2%30.6%65 / 18 / 19 / 200.6122.266.9%0.7142.916.0%
Irodori-TTS · 文字描述开源 · Aratako30.8%20.6%34 / 23 / 8 / 170.6493.036.0%0.6623.095.7%
Irodori-TTS · emoji开源 · Aratako20.0%9.8%17 / 2 / 8 / 120.6513.036.5%0.6623.095.7%
Chatterbox开源 · Resemble不能用标签指定情感0.6753.346.5%

主观指标

我们挑了 15 组 × 5 种情感 = 75 句,每人听 75 句。

模型 自然度 ↑ 情感匹配 ↑ 音色相似度 ↑ 综合分 ↑ 胜出占比 ↑
Ours 3.84 4.20 3.52 3.85 31.7%
Fish Audio Drama 3 3.97 3.64 3.45 3.69 23.2%
Irodori-TTS v4 large · 文字描述 3.61 3.95 3.32 3.63 28.1%
Fish S2 Pro 原版 3.75 2.93 3.72 3.47 12.1%
IndexTTS-2.5 2.35 3.49 2.81 2.88 4.9%

三个维度都是人工五分制打分(MOS),综合分是三项的不加权平均。胜出占比:对每个「听者-句子」组合比较五个模型,并列第一时平分。

两两胜率

Ours 的两两胜率,按综合评分计算,打平算半场胜:

对比 Ours 胜率 ↑
vs. Fish S2 Pro 原版 69.3%
vs. Fish Audio Drama 3 58.0%
vs. Irodori-TTS v4 large · 文字描述 58.7%
vs. IndexTTS-2.5 82.7%

发声事件

发布评测中,叹气命中 56/60;哭声只有 16/60。笑声的本地判断为 26/60,外部判断为 44/59,评判口径本身就值得检查。

耳语 guidance

60 条匹配耳语请求中,guidance 将命中从 4 条提高到 32 条,但 SIM 从 0.587 降到 0.494,UTMOS 从 2.80 降到 1.78。强度控制也有类似的音色代价。

失败经验

01

扩大未配对数据,收益有限

+

早期扩大未配对数据规模,对情感命中的帮助有限。配对样本固定内容与音色后,条件与声音之间的对应关系才更清楚。不同轮次的条件也有变化,不能把全部提升都归因于单一因素。

02

伪强度标签缺少声学差异

+

只改标签、复用音频的伪强度训练,无法提供真实的声学区别。隐状态方向控制的趋势更好,但严格扫描的 880 条输出中,没有正向设置通过全部质量门槛。

03

情感奖励诱发额外笑声

+

优化情感奖励时,模型可能找到更容易被识别的表达。一次检查中,开心样本里出现了 11.7% 的非预期笑声。奖励变高,并不代表台词演绎更符合请求。

04

普通质量门槛会误筛耳语

+

耳语会改变声学特征。沿用普通语音的相似度门槛,可能丢弃有效样本;强行提高耳语命中,又会让质量下降。事件检测器表现好,也不保证生成策略能学好对应事件。

05

显式读音改写更有效

+

在 264 条读音输出中,显式假名将命中率从 39.40% 提升到 94.70%;原版使用同一前端也达到 93.90%。这项提升应归功于明确的读音输入,而不是新的声学能力。

了解 Iroha-TTS-V1