为什么读同一段文字会显得单薄
很多人采集时反复朗读同一篇文章,结果模型学到的音色很准,但语气单调、节奏僵硬,生成任何内容都像在念稿。原因是素材没有覆盖足够的音素与语调组合。训练数据要解决的是「音素覆盖率」和「情绪覆盖率」两件事。
元音覆盖率:必须覆盖的音
中文里最容易被漏掉的是前后鼻音与边音,它们一旦缺失,生成时会出现诡异的谐音。采集脚本里必须刻意包含下面这些组合,每组至少三遍:
| 类别 | 典型字 | 漏掉后的症状 |
|---|---|---|
| 前后鼻音 | 安、恩、昂、嗯、前、鼻 | 鼻音发闷、齿音混淆 |
| 边音与卷舌 | 来、日、女、儿、二 | 机械感、咬字不清 |
| 平翘舌 | 资、吃、知、痴 | 平翘舌不分 |
| 复韵母 | 快、怪、跪、怀 | 长句语调塌陷 |
| 轻声与儿化 | 的、了、着、事儿、玩儿 | 语气机械、失去口语感 |
| 长句断句 | 含逗号与顿号的连续句 | 停顿位置错误 |
情绪分层采集
一段素材只能稳定支撑一种情绪。要做有声书或多场景口播,素材必须分层录制,并且每层之间留出明显的气息差异。
| 层级 | 情绪基调 | 语速 | 音量 | 建议时长 |
|---|---|---|---|---|
| A 基准层 | 平和陈述 | 每分钟 240-280 字 | -14 dBFS | 占总时长 40% |
| B 强调层 | 重点加重、略提亮 | 220-250 字 | -12 dBFS | 占总时长 25% |
| C 疑问层 | 句尾上扬 | 230-260 字 | -13 dBFS | 占总时长 20% |
| D 情感层 | 温暖、欢快、庄重各一条 | 按情绪调整 | -13 dBFS | 每条 2-3 分钟 |
采集脚本的组织方式
把素材按文件命名分好,是后面切片与训练的关键。推荐命名规则:
speaker_name/ 01_base/ 基准层,按段落编号命名 base_001.wav 02_emphasis/ 强调层 emph_001.wav 03_question/ 疑问层 ques_001.wav 04_emotion_warm/ 情感层 emo_warm_001.wav 05_script.txt 对应文本,一行一段,段间用空行分隔
文本与音频一一对应是必须项。绝大多数开源训练框架都要求一个文本标注文件,记录每段音频对应的朗读内容,缺了它模型只能学音色,学不到语言模型对齐,输出会出现大量错字。
时长建议与取舍
- 零样本克隆:10-30 秒参考音频即可,重点是干净。
- 少样本微调(GPT-SoVITS 一键):3-10 分钟,覆盖 800-1500 字有实际语义的文本。
- 进阶微调:20-60 分钟,需覆盖不同句式与情绪。
- 不建议超过 2 小时。收益递减,且显存与训练时间成倍上升。