语音合成-美式英文-通用领域-多人预训练-24k

我要开发同款
匿名用户2024年07月31日
147阅读

技术信息

开源地址
https://modelscope.cn/models/iic/speech_sambert-hifigan_nsf_tts_en-us_multisp_pretrain_24k
授权协议
Apache License 2.0

作品详情

Sambert-Hifiga模型介绍

模型体验及训练教程详见:Sambert-Hifiga模型训练教程

框架描述

拼接法和参数法是两种Text-To-Speech(TTS)技术路线。近年来参数TTS系统获得了广泛的应用,故此处仅涉及参数法。

参数TTS系统可分为两大模块:前端和后端。 前端包含文本正则、分词、多音字预测、文本转音素和韵律预测等模块,它的功能是把输入文本进行解析,获得音素、音调、停顿和位置等语言学特征。 后端包含时长模型、声学模型和声码器,它的功能是将语言学特征转换为语音。其中,时长模型的功能是给定语言学特征,获得每一个建模单元(例如:音素)的时长信息;声学模型则基于语言学特征和时长信息预测声学特征;声码器则将声学特征转换为对应的语音波形。

其系统结构如[图1]所示:

系统结构

前端模块我们采用模型结合规则的方式灵活处理各种场景下的文本,后端模块则采用SAM-BERT + HIFIGAN提供高表现力的流式合成效果。

声学模型SAM-BERT

后端模块中声学模型采用自研的SAM-BERT,将时长模型和声学模型联合进行建模。结构如[图2]所示

1. Backboe采用Self-Attetio-Mechaism(SAM),提升模型建模能力。
2. Ecoder部分采用BERT进行初始化,引入更多文本信息,提升合成韵律。
3. Variace Adaptor对音素级别的韵律(基频、能量、时长)轮廓进行粗粒度的预测,再通过decoder进行帧级别细粒度的建模;并在时长预测时考虑到其与基频、能量的关联信息,结合自回归结构,进一步提升韵律自然度.
4. Decoder部分采用PNCA AR-Decoder[@li2020robutras],自然支持流式合成。

SAMBERT结构

声码器模型:HIFI-GAN

后端模块中声码器采用HIFI-GAN, 基于GAN的方式利用判别器(Discrimiator)来指导声码器(即生成器Geerator)的训练,相较于经典的自回归式逐样本点CE训练, 训练方式更加自然,在生成效率和效果上具有明显的优势。其系统结构如[图3]所示:

系统结构

在HIFI-GAN开源工作[1]的基础上,我们针对16k, 48k采样率下的模型结构进行了调优设计,并提供了基于因果卷积的低时延流式生成和chuk流式生成机制,可与声学模型配合支持CPU、GPU等硬件条件下的实时流式合成。

使用方式和范围

使用方式:

  • 直接输入文本进行推理

使用范围:

  • 适用于英文的语音合成场景,输入文本使用utf-8编码

目标场景:

  • 各种语音合成任务,比如配音,虚拟主播,数字人等

如何使用

目前仅支持Liux使用,暂不支持Widows及Mac使用。

参考代码范例的推理部分可以了解如何使用pipelie进行推理;参考训练部分可以了解如何进行fietue。

目前基于Modelscope框架的训练需要参考语音合成-中文-KANTTS-公开数据集数据集格式进行调整。

也可以参考KAN-TTS代码进行基于KAN-TTS框架的fietue。具体使用方法参考:

sambert训练教程

hifiga训练教程

使用git克隆预训练模型

git cloe -b pretrai http://www.modelscope.c/speech_tts/speech_sambert-hifiga_tts_zh-c_multisp_pretrai_24k.git

代码范例

推理

from modelscope.outputs import OutputKeys
from modelscope.pipelies import pipelie
from modelscope.utils.costat import Tasks

text = 'Nice to meet you.'
model_id = 'iic/speech_sambert-hifiga_sf_tts_e-us_multisp_pretrai_24k'
sambert_hifiga_tts = pipelie(task=Tasks.text_to_speech, model=model_id)
output = sambert_hifiga_tts(iput=text)
wav = output[OutputKeys.OUTPUT_WAV]
with ope('output.wav', 'wb') as f:
    f.write(wav)

训练

import os
import shutil
import tempfile

from modelscope.metaifo import Traiers
from modelscope.msdatasets import MsDataset
from modelscope.traiers import build_traier
from modelscope.utils.audio.audio_utils import TtsTraiType

model_id = 'iic/speech_sambert-hifiga_sf_tts_e-us_multisp_pretrai_24k'
dataset_id = 'speech_katts_opedata'
dataset_amespace = 'speech_tts'
# 训练信息,用于指定需要训练哪个或哪些模型,这里展示AM和Vocoder模型皆进行训练
# 目前支持训练:TtsTraiType.TRAIN_TYPE_SAMBERT, TtsTraiType.TRAIN_TYPE_VOC
# 训练SAMBERT会以模型最新step作为基础进行fietue
# 训练Vocoder(HifiGAN)会从0开始进行训练,指定多少个step,训练多少个step
trai_ifo = {
    TtsTraiType.TRAIN_TYPE_SAMBERT: {  # 配置训练AM(sambert)模型
        'trai_steps': 2,               # 训练多少个step 
        'save_iterval_steps': 1,       # 每训练多少个step保存一次checkpoit
        'eval_iterval_steps': 1,       # 每训练多少个step评估一次
        'log_iterval': 1               # 每训练多少个step打印一次训练日志
    },
    TtsTraiType.TRAIN_TYPE_VOC: {      # 配置训练Vocoder(HifiGAN)模型
        'trai_steps': 2,
        'save_iterval_steps': 1,
        'eval_iterval_steps': 1,
        'log_iterval': 1
    }
}
# 这里展示使用临时目录作为训练的workdir
tmp_dir = tempfile.TemporaryDirectory().ame
if ot os.path.exists(tmp_dir):
    os.makedirs(tmp_dir)
# 配置训练参数,指定数据集,临时工作目录和trai_ifo
kwargs = dict(
    model=model_id,                             # 指定要fietue的模型
    work_dir=tmp_dir,                           # 指定临时工作目录
    trai_dataset=dataset_id,                   # 指定数据集id
    trai_dataset_amespace=dataset_amespace,  # 指定数据集所属amespace
    trai_type=trai_ifo                       # 指定要训练类型及参数
)                      
traier = build_traier(
    Traiers.speech_katts_traier, default_args=kwargs)
traier.trai()
# 训练好的checkpoit位于{tmp_dir}/tmp_am/ckpt及{tmp_dir}/tmp_voc/ckpt中
tmp_am = os.path.joi(tmp_dir, 'tmp_am', 'ckpt')
tmp_voc = os.path.joi(tmp_dir, 'tmp_voc', 'ckpt')
assert os.path.exists(tmp_am)
assert os.path.exists(tmp_voc)

模型局限性以及可能的偏差

  • 该发音人模型仅对英文输入进行了支持

训练数据介绍

使用12个不同发音人,共计约65小时英文语料数据训练。

模型训练流程

模型所需训练数据格式为:音频(.wav), 文本标注(.txt), 随机初始化训练要求训练数据规模在2小时以上,对于2小时以下的数据集,需使用多人预训练模型进行参数初始化。其中,AM模型训练时间需要1~2天,Vocoder模型训练时间需要5~7天。

预处理

模型训练需对音频文件提取声学特征(梅尔频谱);本预训练模型在训练过程中采用MAS机制将音素序列和语音序列进行对齐,因此数据预处理阶段无需提供音素时长标注(.iterval);文本标注,根据配置项中的音素集、音调分类、边界分类转换成对应的oe-hot编号;

数据评估及结果

我们使用MOS(Mea Opiio Score)来评估合成声音的自然度,评分从1(不好)到5(非常好),每提高0.5分表示更高的自然度。我们会随机选择20个samples,然后每个sample交给至少10个人进行打分。作为对比,我们会使用真人录音的sample通过上述统计方式进行打分。

MOS eural
recordig
sythesis

引用

如果你觉得这个该模型对有所帮助,请考虑引用下面的相关的论文:

@iproceedigs{li2020robutras,
  title={Robutras: A robust trasformer-based text-to-speech model},
  author={Li, Naiha ad Liu, Yaqig ad Wu, Yu ad Liu, Shujie ad Zhao, Sheg ad Liu, Mig},
  booktitle={Proceedigs of the AAAI Coferece o Artificial Itelligece},
  volume={34},
  umber={05},
  pages={8228--8235},
  year={2020}
}
@article{devli2018bert,
  title={Bert: Pre-traiig of deep bidirectioal trasformers for laguage uderstadig},
  author={Devli, Jacob ad Chag, Mig-Wei ad Lee, Keto ad Toutaova, Kristia},
  joural={arXiv preprit arXiv:1810.04805},
  year={2018}
}
@article{kog2020hifi,
  title={Hifi-ga: Geerative adversarial etworks for efficiet ad high fidelity speech sythesis},
  author={Kog, Jugil ad Kim, Jaehyeo ad Bae, Jaekyoug},
  joural={Advaces i Neural Iformatio Processig Systems},
  volume={33},
  pages={17022--17033},
  year={2020}
}

本模型参考了以下实现

功能介绍

Sambert-Hifigan模型介绍 模型体验及训练教程详见:Sambert-Hifigan模型训练教程 框架描述 拼接法和参数法是两种Text-To-Speech(TTS)技术路线。近年来参数TT

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论