新网杯top1方案:手把手构建中文语音合成模型!

news/2024/7/5 3:16:41

基于Parakeet的中文语音合成方案

501c7eccbd1b42591f3ce31da6ddeafb.png

  • cac901465b424f555ea43b04c2258c53.png

    方案地址:
    https://aistudio.baidu.com/aistudio/projectdetail/2792887

1

第一步 安装Parakeet

  • 源码:https://github.com/PaddlePaddle/Parakeet

  • 中文语音合成方案:https://aistudio.baidu.com/aistudio/projectdetail/2791125?contributionType=1

  • PaddleSpeech源码:https://github.com/PaddlePaddle/PaddleSpeech

Parakeet 旨在为开源社区提供灵活、高效和最先进的文本转语音工具包。它建立在 PaddlePaddle 动态图上,包括许多有影响力的 TTS 模型。

Parakeet

220411d1768ae14052f05ad437d48205.png

Parakeet 概述

为了便于直接利用现有的 TTS 模型并开发新的模型,Parakeet 选择了典型模型并在 PaddlePaddle 中提供了它们的参考实现。此外,Parakeet 对 TTS 管道进行了抽象,并将数据预处理、通用模块共享、模型配置以及训练和合成过程标准化。此处支持的模型包括文本前端、端到端声学模型和声码器:

  • 文本前端

    • 基于规则的中文前端。

  • 声学模型

    • 【FastSpeech2】FastSpeech 2:快速、高质量的端到端文本到语音

    • 【SpeedySpeech】SpeedySpeech:高效的神经语音合成

    • 【Transformer TTS】基于Transformer网络的神经语音合成

    • 【Tacotron2】在梅尔谱图预测上通过调节WaveNet进行自然TTS合成

  • 声码器

    • 【Parallel WaveGAN】Parallel WaveGAN:一种基于多分辨率频谱图的生成对抗网络的快速波形生成模型

    • 【WaveFlow】WaveFlow:一种用于原始音频的紧凑型基于流的模型

  • 语音克隆

    • 从说话人验证到多说话人文本到语音合成的迁移学习

    • 【GE2E】用于说话人验证的广义端到端损失

安装Parakeet

源码安装Parakeet

git clone https://github.com/PaddlePaddle/Parakeetcd Parakeet 
pip install -e 。

2

第二步 安装依赖

  • 运行依赖:linux,PaddlePaddle 2.1.2

  • 确保库libsndfile1已安装,例如在 Ubuntu 上。

sudo apt-get installlibsndfile1
  • nltk依赖下载

import nltk
nltk.download("punkt")
nltk.download("cmudict")
[nltk_data] Downloading package punkt to /home/aistudio/nltk_data...
[nltk_data]   Package punkt is already up-to-date!
[nltk_data] Downloading package cmudict to /home/aistudio/nltk_data...
[nltk_data]   Package cmudict is already up-to-date!

3

第三步 数据准备和预处理

中文标准女声音库(10000句)

下载链接:https://test.data-baker.com/data/index/source/

【中文标准女声音库】采集对象的音色风格知性阳光、亲切自然,专业标准普通话女声,听感乐观积极。录制环境为专业录音室和录音软件,录音环境和设备自始至终保持不变,录音环境的信噪比不低于35dB;单声道录音,用48KHz 16比特采样频率、pcm wav格式。录音语料涵盖各类新闻、小说、科技、娱乐、对话等领域,语料设计综合语料样本量,力求在有限的语料数据量内,对音节音子、类型、音调、音连以及韵律等尽可能全面的覆盖。根据合成语音标注标准对音库进行文本音字校对、韵律层级标注、语音文件边界切分标注。

技术参数

  • 数据内容:中文标准女声语音库数据

  • 录音语料:综合语料样本量;音节音子的数量、类型、音调、音连以及韵律等进行覆盖。

  • 有效时长:约12小时

  • 平均字数:16字

  • 语言类型:标准普通话

  • 发 音 人:女;20-30岁;声音积极知性

  • 录音环境:声音采集环境为专业录音棚环境:1)录音棚符合专业音库录制标准;2)录音环境和设备自始至终保持不变;3)录音环境的信噪比不低于35dB。

  • 录制工具:专业录音设备及录音软件

  • 采样格式:无压缩pcm wav格式,采样率为48KHz、16bit

  • 标注内容:音字校对、韵律标注、中文声韵母边界切分

  • 标注格式:文本标注为.txt格式文档;音节音素边界切分文件为.interval格式

  • 质量标准:1. 语音文件为48k 16bit wav格式,音色、音量、语速一致,无漂零无截幅;2.标注文件字准率不低于99.8%;3.音素边界错误大于10ms的比例小于1%;音节边界准确率大于98%.

  • 存储方式:FTP存储

  • 文件格式:音频文件:wav 文本标注文件:TXT 边界标注文件:INTERVAL

  • 版权所属者:标贝(北京)科技有限公司

数据预处理

解压数据:

!unzip data/data117129/BZNSYP.zip > /dev/null 2>&1

特征提取

#!/bin/bashstage=0
stop_stage=100# export MAIN_ROOT=`realpath ${PWD}/../../../`
export MAIN_ROOT=./echo $MAIN_ROOT
if [ ${stage} -le 0 ] && [ ${stop_stage} -ge 0 ]; then# get durations from MFA's resultecho "Generate durations.txt from MFA results ..."python3 ${MAIN_ROOT}/utils/gen_duration_from_textgrid.py \--inputdir=./baker_alignment_tone \--output=durations.txt \--config=conf/default.yaml
fiif [ ${stage} -le 1 ] && [ ${stop_stage} -ge 1 ]; then# extract featuresecho "Extract features ..."python3 ./preprocess.py \--dataset=baker \--rootdir=~/BZNSYP/ \--dumpdir=dump \--dur-file=durations.txt \--config=conf/default.yaml \--num-cpu=20 \--cut-sil=True
fiif [ ${stage} -le 2 ] && [ ${stop_stage} -ge 2 ]; then# get features' stats(mean and std)echo "Get features' stats ..."python3 ${MAIN_ROOT}/utils/compute_statistics.py \--metadata=dump/train/raw/metadata.jsonl \--field-name="speech"fiif [ ${stage} -le 3 ] && [ ${stop_stage} -ge 3 ]; then# normalize and covert phone/speaker to id, dev and test should use train's statsecho "Normalize ..."python3 ./normalize.py \--metadata=dump/train/raw/metadata.jsonl \--dumpdir=dump/train/norm \--speech-stats=dump/train/speech_stats.npy \--pitch-stats=dump/train/pitch_stats.npy \--energy-stats=dump/train/energy_stats.npy \--phones-dict=dump/phone_id_map.txt \--speaker-dict=dump/speaker_id_map.txt
fi

生成预处理的数据集如下:

dump
├── dev
│   ├── norm
│   └── raw
├── phone_id_map.txt
├── speaker_id_map.txt
├── test
│   ├── norm
│   └── raw
└── train├── energy_stats.npy├── norm├── pitch_stats.npy├── raw└── speech_stats.npy

4

第四步 模型训练

使用 ./run.sh来完成训练任务,具体参数如下

usage: train.py [-h] [--config CONFIG] [--train-metadata TRAIN_METADATA][--dev-metadata DEV_METADATA] [--output-dir OUTPUT_DIR][--device DEVICE] [--nprocs NPROCS] [--verbose VERBOSE][--phones-dict PHONES_DICT] [--speaker-dict SPEAKER_DICT]Train a FastSpeech2 model.optional arguments:-h, --help            show this help message and exit--config CONFIG       fastspeech2 config file.--train-metadata TRAIN_METADATAtraining data.--dev-metadata DEV_METADATAdev data.--output-dir OUTPUT_DIRoutput dir.--device DEVICE       device type to use.--nprocs NPROCS       number of processes.--verbose VERBOSE     verbose.--phones-dict PHONES_DICTphone vocabulary file.--speaker-dict SPEAKER_DICTspeaker id map file for multiple speaker model.

5

第五步 模型预测:“语音合成”

加载模型进行预测

usage: synthesize.py [-h] [--fastspeech2-config FASTSPEECH2_CONFIG][--fastspeech2-checkpoint FASTSPEECH2_CHECKPOINT][--fastspeech2-stat FASTSPEECH2_STAT][--pwg-config PWG_CONFIG][--pwg-checkpoint PWG_CHECKPOINT] [--pwg-stat PWG_STAT][--phones-dict PHONES_DICT] [--speaker-dict SPEAKER_DICT][--test-metadata TEST_METADATA] [--output-dir OUTPUT_DIR][--device DEVICE] [--verbose VERBOSE]

以上是利用公开数据集进行训练和预测的步骤,关于模型训练提升的思路,比较直接的方式大家可以尝试合并aishell3 和baker两个数据集进行预测

6

第六步新网杯比赛数据集预测

  • 使用exp目录下的训练模型来预测结果(时间问题,暂未训练完成)

  • 直接使用官方提供预训练模型来预测 我们下面直接使用Parakeet提供的中文预训练模型

FLAGS_allocator_strategy=naive_best_fit
FLAGS_fraction_of_gpu_memory_to_use=0.01
python3 synthesize_e2e.py
--fastspeech2-config=fastspeech2_nosil_baker_ckpt_0.4/default.yaml
--fastspeech2-checkpoint=fastspeech2_nosil_baker_ckpt_0.4/snapshot_iter_76000.pdz
--fastspeech2-stat=fastspeech2_nosil_baker_ckpt_0.4/speech_stats.npy
--pwg-config=pwg_baker_ckpt_0.4/pwg_default.yaml
--pwg-checkpoint=pwg_baker_ckpt_0.4/pwg_snapshot_iter_400000.pdz
--pwg-stat=pwg_baker_ckpt_0.4/pwg_stats.npy
--text=../sentences.txt
--output-dir=exp/default/test_e2e
--device="gpu"
--phones-dict=fastspeech2_nosil_baker_ckpt_0.4/phone_id_map.txt

如果使用数据集训练的模型,可以将fastspeech2相关参数改成exp目录的权重路径即可。

大赛要求上传音频采样率为16k,本案例生成音频采样率为24k,通过下面的命令进行采样率转换:

# #!/bin/bash
# %cd exp/default/
# !for x in ./test_e2e/*.wav
# !do 
# !  b=${x##*/}
# !  sox ./test_e2e/$b -r 16000 ./致Great/$b
# !done!sed -i 's/\r$//' ./xw_predict.sh
!chmod +x ./xw_predict.sh
!./xw_predict.sh

线上 64.410

1281ebaed0e437090903d57fad506135.png

大赛报名方式 ▼

ee580c3d0a1aaf712ecae79b16df5919.png

大赛交流群

▼

055842277637372bd15fdd2c16363a52.png


http://lihuaxi.xjx100.cn/news/256346.html

相关文章

Python之Mysql及SQLAlchemy操作总结

一、Mysql命令总结 1.创建库 create database test1; 2.授权一个用户 grant all privileges on *.* to feng% identified by 1qazWSX; 3.创建表 create table Teacher(teaId int not null, teaname varchar(100), age int, sex enum(M, F), phone int); 4.查询 select * from t…

IT界惊现文豪!华为领导及阿里P10遭吐槽

欢迎关注方志朋的博客,回复”666“获面试宝典来源:脉脉一篇奇文出现在某匿名社交软件,引起了大家对文豪的赞口不绝。先发原图:再转原文:发现邻居大部分都是程序员,一开始我还挺高兴,觉得都是高素…

机器学习实战书籍《Python机器学习项目实战》电子版.pdf

最新免费pdf下载地址后台回复:Python机器学习本书目录内容节选最新免费pdf下载地址后台回复:Python机器学习

GPT-3 不够 Open,BigScience 构建开放语言模型,规模小 16 倍

编译 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 大约一年前,总部位于纽约布鲁克林的自然语言处理初创公司 Hugging Face 推出了 BigScience。这是一个拥有 900 多名研究人员的国际项目,旨在更好地理解自然语言模型原理和提高大…

ReactiveCocoa代码实践之-更多思考

三.ReactiveCocoa代码实践之-更多思考 1. RACObserve()宏形参写法的区别 之前写代码考虑过 RACObserve(self.timeLabel , text) 和 RACObserve(self , timeLabel.text) 的区别。 因为这两种方法都是观察self.timeLabel.text的属性,并且都能实现功能。估计是作者原本…

SQL Server 2000 从哪里看是哪个版本

有两种方法: 第一步:使用SQL语句查询 select version 查询结果如下: Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Personal Edition on Windows NT 5.1 (Build 2…

今年最后一场组队学习!

Datawhale学习 开源贡献:Datawhale团队本月组队学习,包含了人工智能(含机器学习、深度学习)、数据科学、编程实践、计算机科学4个模块,共11个学习内容。文末有学习地址关于开源Datawhale作为开源组织,更多是…

开源社区的危机:拒绝被“白嫖”?2大著名项目遭作者破坏

作者 | 林檎来源 | 数据实战派近日,一位开源开发者的故意破坏,再次引发了机构依赖开源库的争议。这一类开源库往往由维护者义务工作而支撑。被破坏的开源库是 Marak Squires 开发的 color.js 库和 faker.js 库。这两个库被广泛使用,其中不乏企…