在构建高质量文本转语音(TTS)系统时,数据预处理是决定模型性能的关键环节。本文将详细介绍我们为Parler TTS mini v1.1多语言模型准备训练数据集的完整流程。这套方法已成功应用于7种欧洲语言(法语、波兰语、德语、荷兰语、意大利语、葡萄牙语和西班牙语)的模型训练,其核心思路也可扩展至其他语种。
关键提示:数据质量比数据量更重要。一个经过严格清洗的10小时数据集,往往比100小时未清洗的数据能训练出更好的TTS模型。
我们主要使用两个开源多语言数据集:
这两个数据集各有特点:MLS在语音多样性上表现优异,而CML-TTS的文本质量更高。将它们结合使用可以互补优势。
传统TTS系统通常使用g2p库进行音素转换,但它在多语言支持上存在局限。我们改用phonemizer搭配espeak-ng后端,这一组合支持超过100种语言和方言,包括:
安装方法:
bash复制pip install phonemizer
sudo apt-get install espeak-ng # Linux系统
brew install espeak-ng # macOS系统
原始语音数据集中的文本往往缺乏标准标点和大小写。我们使用以下工具链解决这个问题:
实测表明,良好的标点恢复能使合成语音的韵律自然度提升约30%。
我们采用Levenshtein距离算法评估原始转录文本的质量。该算法通过计算两个字符串间的最小编辑操作数(插入、删除、替换)来衡量差异。
具体实现步骤:
python复制from Levenshtein import ratio
def check_quality(original, recomputed):
return ratio(original, recomputed) >= 0.9
通过实际清洗过程,我们发现数据集主要存在以下几类问题:
| 问题类型 | 示例 | 影响 |
|---|---|---|
| 截断文本 | "omstreken. Het derde..." | 导致合成语音突然中断 |
| 错误匹配 | "Não peço mais ao..." | 语音与文本内容不符 |
| 标注错误 | 章节编号错误 | 影响上下文连贯性 |
经过清洗后,CML-TTS数据集的平均质量分数从0.72提升到0.95。清洗后的版本已发布在Hugging Face Hub。
完整的标注流程包含以下关键步骤:
实践发现:标点恢复对合成语音的停顿节奏影响最大,而大小写校正则显著改善专有名词的发音准确率。
为每个语音样本生成描述性文本是Parler-TTS的特色功能。我们的实现方法:
例如,一段德语语音可能被描述为:"一位中年男性以中等语速朗读科技文章,语调平稳,带有轻微的标准德语口音"。
初始的Parler-TTS分词器仅针对英语优化,存在两个主要问题:
v1.1版本引入了改进后的分词器,关键改进包括:
您可以通过Tokenizer Playground体验不同语言的分词效果。
我们采用分阶段训练方法:
这种策略相比纯多语言并行训练,在单语性能上平均提升15%的语音质量分数(MOS)。
根据我们的实践经验,想要在自己的语言上复现类似结果,建议注意以下几点:
我们在7种语言上的Word Error Rate表现如下(数值越低越好):
| 语言 | WER(%) | 相对改进 |
|---|---|---|
| 西班牙语 | 0.70 | 基准 |
| 德语 | 1.13 | +61% |
| 英语 | 1.19 | +70% |
| 法语 | 2.31 | +230% |
| 意大利语 | 3.16 | +351% |
| 波兰语 | 4.02 | +474% |
| 荷兰语 | 4.38 | +525% |
| 葡萄牙语 | 5.08 | +625% |
这些结果说明,语言本身的复杂性和训练数据质量都会显著影响最终性能。对于形态复杂的语言(如波兰语),可能需要更多训练数据和更长的训练时间。