PaddleSpeech icon indicating copy to clipboard operation
PaddleSpeech copied to clipboard

为什么你们的fastspeech2的长文本中文合成效果好?

Open lawo123 opened this issue 1 year ago • 3 comments

同样用baker数据集训练 我训练的结果 长文本后半段就异常了 our_fastspeech2.zip

你们的fastspeech2预训练模型的结果就是正常的,为什么你们支持的长度比我的长,而数据集是一致的 paddle_fastspeech2.zip

lawo123 avatar Jul 28 '22 03:07 lawo123

请问你使用的 fastspeech2 的模型是哪个复现版本,可以使用我们的脚本进行训练,我们的代码在进行合成的时候,会自动按照标点进行切分,分段合成,通过 merge_sentences 这个变量控制,如果不切分,文本过长(比如超过 60 个字符)也会在后半段异常,你可以试试,这个是 Transformer 类模型本身的问题 此外,paddlespeech 的文本前端做了专门的设计(文本正则,变调等),也会提升合成效果

yt605155624 avatar Jul 28 '22 03:07 yt605155624

我们的代码在进行合成的时候,会自动按照标点进行切分,分段合成,

用的这个预训练模型fastspeech2_nosil_baker_ckpt_0.4.zip,我看你们的代码默认merge_sentences=True,就是没有切分,效果挺好的,我们训练的在大概30个字符的时候就开始出现异常了,baker数据集的最大字符长度是30,为什么你们的最大能支持到60个字符

lawo123 avatar Jul 28 '22 04:07 lawo123

那我不清楚了,baker 最大字符 30 个字不代表输入超过 30 个字就不好,你用的不知道是哪个开源的 fastspeech2 的版本,但是据我所知和用户反馈,paddlespeech 的中文 fastspeech2 效果应该是开源最好的 https://github.com/PaddlePaddle/PaddleSpeech/blob/1f128a0817c991fe6155f74a621539a363c2bb57/paddlespeech/t2s/exps/synthesize_e2e.py#L90 默认 merge_sentences=False 哈,你再 check 下,这个不是重点 可能和 positional encoding 类型有关,我们用了 scaled_abs_pos 或许对长文本友好

https://github.com/PaddlePaddle/PaddleSpeech/blob/1f128a0817c991fe6155f74a621539a363c2bb57/examples/csmsc/tts3/conf/default.yaml#L48

https://github.com/PaddlePaddle/PaddleSpeech/blob/1f128a0817c991fe6155f74a621539a363c2bb57/paddlespeech/t2s/models/fastspeech2/fastspeech2.py#L312

yt605155624 avatar Jul 28 '22 05:07 yt605155624