README.md 6.3 KB
Newer Older
小湉湉's avatar
小湉湉 已提交
1
ERNIE-SAT 是可以同时处理中英文的跨语言的语音-语言跨模态大模型,其在语音编辑、个性化语音合成以及跨语言的语音合成等多个任务取得了领先效果。可以应用于语音编辑、个性化合成、语音克隆、同传翻译等一系列场景,该项目供研究使用。
P
pfZhu 已提交
2 3

## 模型框架
小湉湉's avatar
小湉湉 已提交
4
ERNIE-SAT 中我们提出了两项创新:
O
oyjxer 已提交
5 6
- 在预训练过程中将中英双语对应的音素作为输入,实现了跨语言、个性化的软音素映射
- 采用语言和语音的联合掩码学习实现了语言和语音的对齐
P
pfZhu 已提交
7 8

![framework](.meta/framework.png)
P
pfZhu 已提交
9 10 11

## 使用说明

O
oyjxer 已提交
12 13 14
### 1.安装飞桨与环境依赖

- 本项目的代码基于 Paddle(version>=2.0)
小湉湉's avatar
小湉湉 已提交
15
- 本项目开放提供加载 torch 版本的 vocoder 的功能
O
oyjxer 已提交
16 17
  - torch version>=1.8

小湉湉's avatar
小湉湉 已提交
18
- 安装 htk: 在[官方地址](https://htk.eng.cam.ac.uk/)注册完成后,即可进行下载较新版本的 htk (例如 3.4.1)。同时提供[历史版本 htk 下载地址](https://htk.eng.cam.ac.uk/ftp/software/)
O
oyjxer 已提交
19

小湉湉's avatar
小湉湉 已提交
20 21 22
    - 1.注册账号,下载 htk
    - 2.解压 htk 文件,**放入项目根目录的 tools 文件夹中, 以 htk 文件夹名称放入**
    - 3.**注意**: 如果您下载的是 3.4.1 或者更高版本, 需要进入 HTKLib/HRec.c 文件中, **修改 1626 行和 1650 行**, 即把**以下两行的 dur<=0 都修改为 dur<0**,如下所示:
O
oyjxer 已提交
23 24 25 26 27 28 29 30
        ```bash
         以htk3.4.1版本举例: 
         (1)第1626行: if (dur<=0 && labid != splabid) HError(8522,"LatFromPaths: Align  have dur<=0");
         修改为:      if (dur<0 && labid != splabid) HError(8522,"LatFromPaths: Align  have dur<0");

         (2)1650行: if (dur<=0 && labid != splabid) HError(8522,"LatFromPaths: Align have dur<=0 ");
         修改为:     if (dur<0 && labid != splabid) HError(8522,"LatFromPaths: Align have dur<0 ");
        ```
小湉湉's avatar
小湉湉 已提交
31
    - 4.**编译**: 详情参见解压后的 htk 中的 README 文件(如果未编译, 则无法正常运行)
O
oyjxer 已提交
32 33 34
     


小湉湉's avatar
小湉湉 已提交
35
- 安装 ParallelWaveGAN: 参见[官方地址](https://github.com/kan-bayashi/ParallelWaveGAN):按照该官方链接的安装流程,直接在**项目的根目录下** git clone ParallelWaveGAN 项目并且安装相关依赖即可。
O
oyjxer 已提交
36 37 38


- 安装其他依赖: **sox, libsndfile**
P
pfZhu 已提交
39 40

### 2.预训练模型
小湉湉's avatar
小湉湉 已提交
41
预训练模型 ERNIE-SAT 的模型如下所示:
P
pfZhu 已提交
42 43 44 45 46
- [ERNIE-SAT_ZH](http://bj.bcebos.com/wenxin-models/model-ernie-sat-base-zh.tar.gz) 
- [ERNIE-SAT_EN](http://bj.bcebos.com/wenxin-models/model-ernie-sat-base-en.tar.gz)  
- [ERNIE-SAT_ZH_and_EN](http://bj.bcebos.com/wenxin-models/model-ernie-sat-base-en_zh.tar.gz) 


小湉湉's avatar
小湉湉 已提交
47
创建 pretrained_model 文件夹,下载上述 ERNIE-SAT 预训练模型并将其解压: 
O
oyjxer 已提交
48 49 50 51 52 53 54 55
```bash
mkdir pretrained_model
cd pretrained_model
tar -zxvf model-ernie-sat-base-en.tar.gz
tar -zxvf model-ernie-sat-base-zh.tar.gz
tar -zxvf model-ernie-sat-base-en_zh.tar.gz
```

P
pfZhu 已提交
56 57
### 3.下载

小湉湉's avatar
小湉湉 已提交
58
1. 本项目使用 parallel wavegan 作为声码器(vocoder): 
P
pfZhu 已提交
59 60
    - [pwg_aishell3_ckpt_0.5.zip](https://paddlespeech.bj.bcebos.com/Parakeet/released_models/pwgan/pwg_aishell3_ckpt_0.5.zip)  

小湉湉's avatar
小湉湉 已提交
61
创建 download 文件夹,下载上述预训练的声码器(vocoder)模型并将其解压:
P
pfZhu 已提交
62 63 64 65 66 67 68

```bash
mkdir download
cd download
unzip pwg_aishell3_ckpt_0.5.zip
```

小湉湉's avatar
小湉湉 已提交
69
 2. 本项目使用 [FastSpeech2](https://arxiv.org/abs/2006.04558) 作为音素(phoneme)的持续时间预测器:
P
pfZhu 已提交
70 71 72
    - [fastspeech2_conformer_baker_ckpt_0.5.zip](https://paddlespeech.bj.bcebos.com/Parakeet/released_models/fastspeech2/fastspeech2_conformer_baker_ckpt_0.5.zip)  中文场景下使用 
    - [fastspeech2_nosil_ljspeech_ckpt_0.5.zip](https://paddlespeech.bj.bcebos.com/Parakeet/released_models/fastspeech2/fastspeech2_nosil_ljspeech_ckpt_0.5.zip)  英文场景下使用

小湉湉's avatar
小湉湉 已提交
73
 下载上述预训练的 fastspeech2 模型并将其解压
P
pfZhu 已提交
74 75 76 77 78 79 80 81 82

```bash
cd download
unzip fastspeech2_conformer_baker_ckpt_0.5.zip
unzip fastspeech2_nosil_ljspeech_ckpt_0.5.zip
```

### 4.推理

P
pfZhu 已提交
83
本项目当前开源了语音编辑、个性化语音合成、跨语言语音合成的推理代码,后续会逐步开源。
小湉湉's avatar
小湉湉 已提交
84
注:当前英文场下的合成语音采用的声码器默认为 vctk_parallel_wavegan.v1.long, 可在[该链接](https://github.com/kan-bayashi/ParallelWaveGAN)中找到; 若 use_pt_vocoder 参数设置为 False,则英文场景下使用 paddle 版本的声码器。
P
pfZhu 已提交
85 86 87 88 89 90 91 92 93

我们提供特定音频文件, 以及其对应的文本、音素相关文件:
- prompt_wav: 提供的音频文件
- prompt/dev: 基于上述特定音频对应的文本、音素相关文件


```text
prompt_wav
├── p299_096.wav                 # 样例语音文件1
O
oyjxer 已提交
94
├── p243_313.wav                 # 样例语音文件2
P
pfZhu 已提交
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
└── ...
```

```text
prompt/dev
├── text                     # 样例语音对应文本
├── wav.scp                  # 样例语音路径
├── mfa_text                 # 样例语音对应音素
├── mfa_start                # 样例语音中各个音素的开始时间
└── mfa_end                  # 样例语音中各个音素的结束时间
```
1. `--am` 声学模型格式符合 {model_name}_{dataset}
2. `--am_config`, `--am_checkpoint`, `--am_stat``--phones_dict` 是声学模型的参数,对应于 fastspeech2 预训练模型中的 4 个文件。
3. `--voc` 声码器(vocoder)格式是否符合 {model_name}_{dataset}
4. `--voc_config`, `--voc_checkpoint`, `--voc_stat` 是声码器的参数,对应于 parallel wavegan 预训练模型中的 3 个文件。
5. `--lang` 对应模型的语言可以是 `zh``en`
6. `--ngpu` 要使用的GPU数,如果 ngpu==0,则使用 cpu。
7. ` --model_name` 模型名称
小湉湉's avatar
小湉湉 已提交
113
8. ` --uid` 特定提示(prompt)语音的 id
P
pfZhu 已提交
114 115
9. ` --new_str` 输入的文本(本次开源暂时先设置特定的文本)
10. ` --prefix` 特定音频对应的文本、音素相关文件的地址
小湉湉's avatar
小湉湉 已提交
116 117
11. ` --source_lang` , 源语言
12. ` --target_lang` , 目标语言
P
pfZhu 已提交
118 119
13. ` --output_name` , 合成语音名称
14. ` --task_name` , 任务名称, 包括:语音编辑任务、个性化语音合成任务、跨语言语音合成任务
小湉湉's avatar
小湉湉 已提交
120
15. ` --use_pt_vocoder`, 英文场景下是否使用 torch 版本的 vocoder, 默认情况下为 False; 设置为 False 则在英文场景下使用 paddle 版本 vocoder
P
pfZhu 已提交
121 122 123

运行以下脚本即可进行实验
```shell
小湉湉's avatar
小湉湉 已提交
124 125
sh run_sedit_en.sh       # 语音编辑任务(英文) 
sh run_gen_en.sh         # 个性化语音合成任务(英文)
O
oyjxer 已提交
126
sh run_clone_en_to_zh.sh # 跨语言语音合成任务(英文到中文的语音克隆)
P
pfZhu 已提交
127 128
```