如何使用神经网络创建文本到语音

时间:2017-03-27 18:34:01

标签: python neural-network speech-recognition text-to-speech

我正在为一种语音语言创建一个文本到语音系统,称为" Kannada"我计划用神经网络训练它。输入是一个单词/短语,而输出是相应的音频。

在实施网络时,我认为输入应该是单词/短语的分段字符,因为输出发音仅取决于构成单词的字符,不像英语,我们有简单的单词和部分语音考虑。但是,我不知道应该如何训练输出。

由于我的数据集是单词/短语和相应的MP3文件的集合,我想到使用pydub将所有音频文件转换为WAV。

from pydub import AudioSegment
sound = AudioSegment.from_mp3("audio/file1.mp3")
sound.export("wav/file1.wav", format="wav")

接下来,我打开wav文件并将其转换为规范化的字节数组,其值介于0和1之间。

import numpy as np
import wave

f = wave.open('wav/kn3.wav', 'rb')
frames = f.readframes(-1)

#Array of integers of range [0,255]
data = np.fromstring(frames, dtype='uint8')

#Normalized bytes of wav
arr  = np.array(data)/255

我该如何训练?

从这里开始,我不知道如何用输入文本训练这个。由此,我需要在First和Last层中使用可变数量的输入和输出神经元作为每个输入的字符数(第一层)和相应波(最后一层)的字节。

由于RNN处理这种可变数据,我认为它会派上用场。

如果我错了,请纠正我,但神经网络的输出实际上是0到1之间的概率值。但是,我们没有处理分类问题。音频可以是任何东西,对吧?就我而言,"输出"应该是一个与WAV文件相对应的字节向量。因此,对于每个单词,将有大约40,000个具有0到255之间的值(没有标准化步骤)。如何训练此语音数据?任何建议都表示赞赏。

编辑1 :回应 Aaron 评论

根据我的理解,音素是该语言的基本声音。那么,为什么我需要一个神经网络来映射带有语音的音素标签?我不能说,"每当你看到这个字母时,就像 this "一样发音。毕竟,这种语言,卡纳达语是语音的:没有沉默的话语。所有单词的发音方式与拼写相同。那么神经网络将如何帮助呢?

在输入新文本时,我只需要将其分解为相应的字母(也是音素)并检索它的文件(从WAV转换为原始字节数据)。现在,将字节合并在一起并将其转换为wav文件。

这太简单了吗?我在这里错过了什么吗?对于这种特殊语言(卡纳达语),神经网络的意义何在?

1 个答案:

答案 0 :(得分:1)

这不是微不足道的,需要特殊的架构。您可以在DeepMindBaidu

的出版物中阅读相关说明

您可能还想学习existing implementation of wavenet training

总的来说,纯粹的端到端语音合成仍然无效。如果你认真对待文本到语音,最好学习像merlin这样的传统系统。