食谱:为 TTS 训练准备多语言语音数据集

社区文章 发布日期:2024 年 11 月 4 日

本食谱介绍了我们如何准备数据集来训练 Parler TTS mini v1.1 多语言模型,您可以在此处尝试。

配料

我们使用了 2 个涵盖法语、波兰语、德语、荷兰语、意大利语、葡萄牙语和西班牙语的多语言开源数据集

什么是 Parler TTS?

Parler-TTS 是一种轻量级文本转语音 (TTS) 模型,能够以给定说话者(性别、音调、说话风格等)的风格生成高质量、自然的声音。它重现了 Stability AI 和爱丁堡大学的 Dan Lyth 和 Simon King 在论文“使用合成注释进行高保真文本转语音的自然语言指导”中提出的工作。

Parler TTS 项目是由 Hugging Face 发起的一个开源项目。您可以在 huggingface.co/parler-tts 了解更多信息。

模型性能

为了进行评估,我们生成了一个测试集,其中包含每种语言的 40 个样本。描述提示遵循模型训练期间使用的相同结构。虽然这些受控样本有助于建立模型能力基线,但它们可能无法完全代表真实世界性能,尤其是当提示与训练格式显著偏离时。

以下是各种语言的词错误率 (WER) 结果

语言 词错误率 (%)
西班牙语 0.70
德语 1.13
英语 1.19
法语 2.31
意大利语 3.16
波兰语 4.02
荷兰语 4.38
葡萄牙语 5.08

先决条件

最初的 Parler-TTS 分词器是专门为英语量身定制的。由于其词汇量有限且没有字节回退机制(一种将分词器词汇中未找到的单词部分映射到标记的系统),因此它不适用于多语言训练。

Image showing original Parler-TTS tokenizer limitations for non-English text

Parler-TTS v1.1 采用了一种改进的分词器,其中包含字节回退。您可以通过在 Tokenizer Playground 中选择 parler-tts/parler-tts-mini-v1.1 作为您的自定义分词器来探索此分词器在不同语言中的功能。

Image showing Parler-TTS v1.1's tokenizer system

注意:Parler-TTS v1.1 现在使用两个不同的分词器,一个用于描述,另一个用于提示。

方法

1. 更新 Phonemizer 并添加标点恢复

我们已从 g2p 库过渡到使用 espeak-ng 后端的 phonemizer,以显著扩展我们的语言支持能力。

切换到 ESpeak-NG 作为我们的音素化后端带来了对 100 多种语言和变体的支持,包括

  • 日耳曼语族:英语、德语、荷兰语、瑞典语、丹麦语、挪威语
  • 罗曼语族:法语、西班牙语、意大利语、葡萄牙语、罗马尼亚语
  • 斯拉夫语族:俄语、波兰语、捷克语、斯洛伐克语、克罗地亚语、塞尔维亚语
  • 亚洲语言:普通话、日语(平假名)、韩语、越南语
  • 印度语族:印地语、孟加拉语、泰米尔语、泰卢固语
  • 闪族语族:阿拉伯语、希伯来语
  • 非洲语言:斯瓦希里语、祖鲁语、南非荷兰语

如果您想使用 dataspeech 当前不支持的语言数据集,您需要

  1. 更新 phonemizer
  2. 更新大小写模型(内部使用 spaCy)
  3. 更新标点恢复模型(目前使用 deepmultilingualpunctuation
    • 您可以在 hub 上找到微调版本或微调您自己的版本
    • 标点恢复和大小写脚本可在此处找到

2. 初始清洗

清洗过程侧重于删除可能对模型训练产生负面影响的低质量样本。这包括音频文本不匹配、音频质量差或转录不正确的样本。

  1. 计算每个样本的 Levenshtein 相似度分数

    • Levenshtein 距离通过计算单字符操作(插入、删除、替换)的最小数量来衡量两个字符串的不同程度
    • 我们将其归一化为 0-1 的相似度分数,其中 1 表示完美匹配
    • 这有助于验证转录的质量
  2. 删除 Levenshtein 相似度分数 < 0.9 的样本

    • 这消除了不正确/不完整的转录
    • 0.9 的分数表示字符串有 90% 的相似度,允许微小变化,同时过滤掉主要差异
    • 我们仅对 CML-TTS 数据集执行了此清洗
    • 您可以在 huggingface.co/datasets/PHBJT/cml-tts-filtered 找到已清洗版本

以下是 原始数据集 中存在的一些无效样本示例

原始数据集转录 重新计算的转录 音频样本 分数
omstreken. Het derde van het derde boek 0.32
Não peço mais ao fim do capítulo vinte sete gravado por felipe valle 0.18

3. 注释过程

现在我们已经对多语言音频数据集进行了注释和清理,我们可以根据注释生成自然语言描述,如 dataspeech 库 中所示

  1. 准备转录数据

    • 使用数据集中的现有转录
    • 恢复转录中的标点和大小写(两者都非常重要)
  2. 生成样本描述(在 dataspeech 的实用脚本 中处理)

    • 计算句子指标(语速等)
    • 将指标输入到 LLM
    • 为每个样本生成描述性文本

这些数据集与 LibriTTS-R 英语数据集 一起用于训练 Parler TTS mini V1.1 多语言模型

如果您想用其他语言微调 Parler TTS mini V1.1Parler-TTS 库 中提供了训练食谱。

社区

注册登录 以评论