在开发高质量的文本转语音(TTS)系统时,数据准备是至关重要的第一步。本文简要总结了从原始音频到最终训练数据集的转换过程、一些适合训练语音合成模型的开源语音数据库。

数据准备概述

Link to this section

#TTS系统的训练需要大量高质量、结构化的语音数据。为了获得这样的数据集,我们需要一套完整的数据处理流程,包括音频标准化、说话人分离、分段和转写等步骤。

Emilia-Pipe流程

Link to this section

#Emilia-Pipe是一个专为TTS数据准备设计的处理管道,它包含以下关键步骤:

步骤描述标准化对音频进行规范化处理,确保音量和质量的一致性源分离将长音频处理为不含背景音乐(BGM)的纯语音说话人分离提取中等长度的单一说话人语音数据基于VAD的精细分段将语音切分为3-30秒的单一说话人片段ASR获取语音片段的文本转写过滤通过质量控制获得最终处理后的数据集Emilia预处理工具的源代码可在GitHub上获取: Amphion/preprocessors/Emilia

说话人分离技术

Link to this section

#说话人分离(Speaker Diarization)是TTS数据准备中的关键步骤,它能识别“谁在什么时候说话”。这一技术对于从多人对话或播客等音频中提取单一说话人的语音片段至关重要。

更多关于说话人分离的技术详情可参考: Speaker Diarization 3.1

RTTM(Rich Transcription Time Marked)是语音处理中常用的标注格式,用于记录说话人转换信息。RTTM文件的各列含义如下:

列名说明Type片段类型;应始终为SPEAKERFile ID文件名;录音的基本名称(不含扩展名),如rec1_aChannel ID通道ID(从1开始索引);应始终为1Turn Onset说话开始时间(从录音开始计算的秒数)Turn Duration说话持续时间(秒)Orthography Field应始终为Speaker Type应始终为Speaker Name说话人名称;在每个文件范围内应唯一Confidence Score系统置信度(概率);应始终为Signal Lookahead Time应始终为实际应用效率

Link to this section

#在实际生产环境中,使用GPU可以大幅提高处理效率。根据测试,使用一张A800 GPU进行批处理,可以在单天内处理约3000小时的音频数据。

中文开源语音数据

Link to this section

#适合训练语音合成模型的普通话开源语音数据,

数据名称小时数说话人数质量aidatatang_200zh200600中aishell1180400中aishell385218中primewords99296中thchs303440中magicdata7551080中Emilia200,000+N/A低WenetSpeech4TTS12,800N/A低CommonVoiceN/AN/A低多语种开源语音数据

Link to this section

#适合训练语音合成模型的英语和多语种开源语音数据,

数据名称小时数说话人数质量LibriTTS-R5852456高Hi-Fi TTS29110非常高LibriHeavy60000+7000+16kHzMLS英语44500549016kHzMLS德语196617616kHzMLS荷兰语15544016kHzMLS法语107614216kHzMLS西班牙语9178616kHzMLS意大利语2476516kHzMLS葡萄牙语1604216kHzMLS波兰语1031116kHz用lhotse处理语音数据

Link to this section

#lhotse是一个专门为语音处理设计的数据管理框架,提供了完整的音频数据处理流程。它的核心概念是基于manifest的数据表示方式:

数据表示

Link to this section

#音频数据表示:通过RecordingSet/Recording存储音频元数据,包括音频源(sources)、采样率(sampling_rate)、样本数(num_samples)、时长(duration)和通道ID(channel_ids)。

标注数据表示:通过SupervisionSet/SupervisionSegment存储标注信息,包括起始时间(start)、持续时间(duration)、文本转写(transcript)、语言(language)、说话人(speaker)和性别(gender)。

数据处理流程

Link to this section

#lhotse使用Cut概念作为音频片段的视图或指针,主要包括MonoCut、MixedCut、PaddingCut和CutSet等类型。处理流程如下:

将manifests加载为CutSet,可进行等长切分、多线程特征提取、末尾填充,并生成用于PyTorch的Sampler和DataLoader

特征提取支持多种提取器,如PyTorch fbank & MFCC、torchaudio、librosa等

特征归一化支持均值方差归一化(CMVN)、全局归一化、逐样本归一化和滑动窗口归一化

并行处理

Link to this section

#lhotse支持多进程并行处理,示例代码如下:

python

Wrap

Copyfrom concurrent.futures import ProcessPoolExecutor

from lhotse import CutSet, Fbank, LilcomChunkyWriter

num_jobs = 8

with ProcessPoolExecutor(num_jobs) as ex:

cuts: CutSet = cuts.compute_and_store_features(

extractor=Fbank(),

storage=LilcomChunkyWriter('feats'),

executor=ex)PyTorch集成

Link to this section

#lhotse与PyTorch无缝集成:

CutSet可直接用作Dataset,支持噪声填充、声学上下文填充和动态批量大小

提供多种采样器,如SimpleCutSampler、BucketingSampler和CutPairsSampler,支持状态恢复,支持根据语音总时长生成动态batch大小

批处理I/O支持预计算模式(适合慢速I/O)和即时特征提取模式(适合数据增强)

命令行工具

Link to this section

#lhotse的命令行工具挺好用,包括combine、copy、copy-feats以及多种cut操作如append、decompose、describe等,简化了数据处理流程:

bash

Wrap

Copylhotse combine

lhotse copy

lhotse copy-feats

lhotse cut append

lhotse cut decompose

lhotse cut describe

lhotse cut export-to-webdataset

lhotse cut mix-by-recording-id

lhotse cut mix-sequential

lhotse cut pad

lhotse cut simplelhotse为许多开源数据集提供了prepare函数,能够轻松下载和处理这些标准语音数据集。

总结

Link to this section

#TTS数据准备是一个多步骤的复杂过程,涉及音频处理、说话人分离和语音识别等多个技术领域。通过Emilia-Pipe等工具和完善的处理流程,我们可以将原始音频转化为高质量的TTS训练数据集,为构建自然、流畅的语音合成系统奠定基础。

对于希望开发TTS系统的团队,建议投入足够的资源在数据准备阶段,因为数据质量直接决定了最终模型的表现。

参考资料

Link to this section

#https://lhotse.readthedocs.io/en/latest/

https://github.com/open-mmlab/Amphion/tree/main/preprocessors/Emilia

!