突破语音合成壁垒:GPT-SoVITS多语言数据集构建全攻略

突破语音合成壁垒:GPT-SoVITS多语言数据集构建全攻略

【免费下载链接】GPT-SoVITS 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS

你是否还在为语音合成项目中语料质量参差不齐而困扰?是否因多语言数据处理流程复杂而停滞不前?本文将系统拆解GPT-SoVITS的语料采集与处理全流程,从文本清洗到特征提取,让你快速掌握高质量语音数据集的构建方法。读完本文,你将获得:

  • 多语言文本标准化处理的实操技巧
  • 语音数据预处理的关键参数配置
  • 端到端数据集构建的自动化脚本使用指南

数据集构建总体架构

GPT-SoVITS采用模块化设计实现数据集构建,主要包含文本处理、语音预处理和特征提取三大模块。核心处理流程通过位于GPT_SoVITS/prepare_datasets目录下的四个脚本实现:1-get-text.py负责文本清洗与BERT特征提取,2-get-sv.py进行说话人验证特征计算,2-get-hubert-wav32k.py完成语音重采样与HuBERT特征提取,3-get-semantic.py处理语义特征。

mermaid

文本预处理:从原始文本到语音特征

文本预处理是决定合成语音自然度的关键步骤,1-get-text.py实现了从原始文本到音素序列和BERT特征的完整转换。该脚本首先调用clean_text函数(位于text/cleaner.py)进行文本标准化,支持中文、英文、日文等多种语言。

多语言文本标准化

文本清洗流程包含特殊字符过滤、数字转换、标点符号处理等步骤。以中文为例,脚本会将"¥100"转换为"一百元",将"2023年"转换为"二零二三年"。语言映射通过language_v1_to_language_v2字典实现:

language_v1_to_language_v2 = {
    "ZH": "zh",
    "JP": "ja",
    "EN": "en",
    "KO": "ko",
    "yue": "yue"
}

BERT特征提取

对于中文文本,脚本使用预训练的Chinese-RoBERTa模型提取语义特征。get_bert_feature函数将文本token化为字级别表示,并通过以下代码将词级别特征扩展为音素级别特征:

def get_bert_feature(text, word2ph):
    with torch.no_grad():
        inputs = tokenizer(text, return_tensors="pt")
        for i in inputs:
            inputs[i] = inputs[i].to(device)
        res = bert_model(**inputs, output_hidden_states=True)
        res = torch.cat(res["hidden_states"][-3:-2], -1)[0].cpu()[1:-1]
    
    assert len(word2ph) == len(text)
    phone_level_feature = []
    for i in range(len(word2ph)):
        repeat_feature = res[i].repeat(word2ph[i], 1)
        phone_level_feature.append(repeat_feature)
    
    return torch.cat(phone_level_feature, dim=0).T

BERT特征最终保存为shape为(1536, N)的张量,其中N为音素数量,1536是由RoBERTa的最后三层隐藏状态拼接而成。

语音预处理:从原始音频到特征向量

语音预处理包含重采样、音量归一化和特征提取三个主要步骤,由2-get-hubert-wav32k.py2-get-sv.py共同完成。

语音重采样与归一化

原始音频首先被重采样至32kHz,然后进行音量归一化处理。关键参数maxx(0.95)和alpha(0.5)控制归一化强度:

tmp_max = np.abs(tmp_audio).max()
tmp_audio32 = (tmp_audio / tmp_max * (maxx * alpha * 32768)) + ((1 - alpha) * 32768) * tmp_audio

处理后的音频保存至5-wav32k目录,供后续特征提取使用。

HuBERT特征提取

HuBERT特征通过feature_extractor/cnhubert.py实现,模型加载代码如下:

model = cnhubert.get_model()
if is_half == True:
    model = model.half().to(device)
else:
    model = model.to(device)

特征提取过程将16kHz语音转换为768维的HuBERT特征:

ssl = model.model(tensor_wav16.unsqueeze(0))["last_hidden_state"].transpose(1, 2).cpu()

说话人验证特征

说话人验证特征由2-get-sv.py计算,采用ERes2NetV2模型:

pretrained_state = torch.load(sv_path, map_location="cpu")
embedding_model = ERes2NetV2(baseWidth=24, scale=4, expansion=4)
embedding_model.load_state_dict(pretrained_state)

通过compute_embedding3方法提取2048维的说话人嵌入,用于说话人识别和音色保持。

数据集构建实战:脚本参数配置与运行

环境变量配置

数据集构建过程通过环境变量传递关键参数,主要包括:

  • inp_text: 包含音频路径和文本的元数据文件
  • inp_wav_dir: 原始音频存放目录
  • opt_dir: 输出目录
  • bert_pretrained_dir: BERT模型路径
  • cnhubert_base_dir: HuBERT模型路径

分步运行示例

  1. 文本预处理:
export inp_text=metadata.txt
export opt_dir=dataset
export bert_pretrained_dir=chinese-roberta-wwm-ext-large
python GPT_SoVITS/prepare_datasets/1-get-text.py
  1. 语音预处理与特征提取:
export cnhubert_base_dir=cnhubert-base
export sv_path=eres2net.pth
python GPT_SoVITS/prepare_datasets/2-get-hubert-wav32k.py
python GPT_SoVITS/prepare_datasets/2-get-sv.py
  1. 语义特征处理:
python GPT_SoVITS/prepare_datasets/3-get-semantic.py

常见问题解决

  1. 中文路径问题:脚本通过my_save函数规避torch.save对中文路径的支持问题:
def my_save(fea, path):
    tmp_path = "%s%s.pth" % (ttime(), i_part)
    torch.save(fea, tmp_path)
    shutil.move(tmp_path, "%s/%s" % (dir, name))
  1. 数值稳定性问题:对包含NaN的特征进行过滤:
if np.isnan(ssl.detach().numpy()).sum() != 0:
    nan_fails.append((wav_name, wav_path))
    print("nan filtered:%s" % wav_name)
    return

总结与扩展

本文详细介绍了GPT-SoVITS的数据集构建流程,涵盖文本预处理、语音特征提取和自动化脚本使用。通过合理配置参数和选择模型,可构建支持多语言、高质量的语音合成数据集。建议在实际应用中注意:

  1. 控制单条语音时长在5-10秒,提升合成稳定性
  2. 确保文本与语音的语言一致性
  3. 对不同说话人数据进行均衡采样

后续可探索通过数据增强技术(如语速调整、噪声添加)进一步提升模型的鲁棒性。完整数据集构建代码和示例可参考项目docs目录下的教程文档。

【免费下载链接】GPT-SoVITS 【免费下载链接】GPT-SoVITS 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值