TTS前端数据预处理
TTS 数据预处理
一个好的语音合成,前端预处理过程至关重要, 因此作为语音合成的开篇之作应该具体说说前端预处理模块及其具体操作过程
-
文本正则化
通过正则表达式,或者规则,或者人工标注,将不规则的文本转化为规则的文本的过程,利用特殊标点符号的处理,数字处理,以及单位,分数,比分的处理等,本节主要说数据预处理因此,具体要根据音频如何读取来正则化文本,期间可以借助ASR来辅助处理,具体不做具体阐述
本部分其实本质是歧义消除的过程,比如数字 1234, 可以读一二三四,幺二三四,或者一千两百三十四等,但是如果有音频,则读法是固定的,可以将其转化为具体音频读取的中文读法,避免后续处理出错 -
音频正则化
2.1 能量正则化
由于录音的不确定,会导致音频能量值分布不均衡,加重声学模型训练,所以在开始训练之前,需要对对音频做正则化处理,一般采用现有库来进行, 使得音频不要出现爆音等问题import pyloudnorm as pyln meter = pyln.Meter(rate) # create BS.1770 meter loudness = meter.integrated_loudness(audio) audio = pyln.normalize.loudness(audio, loudness, -20.0) if np.abs(audio).max() > 1.0: audio = audio / np.abs(audio).max()
2.2 音频静音正则化
这部分也是至关重要的,因为语音合成是文本-到语音特征的映射,所以静音分布不均衡会导致声学模型学习不稳定,所以最好的方式是先将音频的静音长短进行处理,切除掉过长或者过短问题
一般采用 vad,或者MFA工具来获取音频的静音长短,然后对于过长的静音进行切除,使得语料前后,或者中间的静音不能过长,这样可以有效辅助模型来学习,有时间将补充这部分代码 -
文本语音对齐
音频文本和语音对齐,这个是TTS前端重要的一部分,通过语音和文本对齐,可以有效切除静音,或者识别异常音,其实还有一个重要的用途是来识别音频中是否有拖音问题,因为对于正常人说话,有时会出现有些脱音会使得说话更自然,所以拖音标记可以利用语音对齐来处理,一般利用MFA来处理
MFA安装过程如下:
1.下载Linux版本的MFA库, github 开源地址见: https://github.com/MontrealCorpusTools/Montreal-Forced-Aligner
下载完成之后,根据README.md进行安装,注意对于中文而言有些字典要自己定义,以满足自己的需求 -
韵律标记
-
转音素
5.1 多音字处理
5.2 转拼音
5.3 变调
5.4 姓名多音字处理等
未完待续