Audio 基于机器学习的语言翻译模型中音素瓶颈特征提取

Audio 基于机器学习的语言翻译模型中音素瓶颈特征提取,audio,keras,nlp,conv-neural-network,lstm,Audio,Keras,Nlp,Conv Neural Network,Lstm,我已经建立了一个基本的编码器-解码器模型架构,用于直接从音频演讲中进行语言翻译,但它迫切需要提高性能/准确性。我唯一无法实现的是从输入音频文件中提取瓶颈特征,并通过注意机制将其转发给解码器 我对这个很陌生。我遇到了瓶颈特性提取器()和Kaldi的ASR工具包()。第一个使用Kaldi风格的.scp文件,据我所知。我想知道是否有人能用尽可能简单的语言告诉我,我如何使用这些神奇的工具包(或任何其他工具,或任何其他技巧)从我的输入音频频谱图中提取音素特征,并通过管道将其发送到解码器 我的管道:- #V

我已经建立了一个基本的编码器-解码器模型架构,用于直接从音频演讲中进行语言翻译,但它迫切需要提高性能/准确性。我唯一无法实现的是从输入音频文件中提取瓶颈特征,并通过注意机制将其转发给解码器

我对这个很陌生。我遇到了瓶颈特性提取器()和Kaldi的ASR工具包()。第一个使用Kaldi风格的.scp文件,据我所知。我想知道是否有人能用尽可能简单的语言告诉我,我如何使用这些神奇的工具包(或任何其他工具,或任何其他技巧)从我的输入音频频谱图中提取音素特征,并通过管道将其发送到解码器

我的管道:-

#VoiceConversionSeq2Seq - https://arxiv.org/abs/1810.06865
inputs = Input(shape=(timesteps, features))

#Encoder
#masked_encoder_inputs = layers.Masking(mask_value=0)(inputs)
encoder_out1,f_h1, f_c1, b_h1, b_c1 = Bidirectional(LSTM(latent_dimE, return_sequences = True, return_state=True))(inputs)
encoder_out2,f_h2, f_c2, b_h2, b_c2 = Bidirectional(LSTM(latent_dimE, return_sequences = True, return_state=True))(encoder_out1)
encoder_out2 = LayerNormalization()(encoder_out2)
state_h2 = Concatenate()([f_h2, b_h2])
state_c2 = Concatenate()([f_c2, b_c2])
encoder_states = [state_h2, state_c2]

#PreNet
NN_1 = Dense(256, activation = 'relu')(encoder_out2)
drop1 = Dropout(rate = 0.5)(NN_1)
NN_2 = Dense(256, activation = 'relu')(NN_1)
drop2 = Dropout(rate = 0.5)(NN_2)


#Attention
att_out = MultiHeadAttention(head_num=4)(drop2)

#Decoder
#decoder_inputs = att_out#RepeatVector(timesteps)(encoder_outputs)
decoder_inputs = att_out
decoder_lstm1 = LSTM(latent_dimD*2,return_state=True,return_sequences=True)
decoder_outputs1, _, _ = decoder_lstm1(decoder_inputs, initial_state = encoder_states)

decoder_lstm2 = LSTM(latent_dimD*2,return_state=True,return_sequences=True)
decoder_outputs2, _, _ = decoder_lstm2(decoder_outputs1, initial_state = encoder_states)

decoder_lstm3 = LSTM(latent_dimD*2,return_state=True,return_sequences=True)
decoder_outputs3, _, _ = decoder_lstm3(decoder_outputs2, initial_state = encoder_states)

#PostNet
conv_1 = Conv1D(filters = 64, kernel_size = 3, kernel_initializer = gammaT(decoder_outputs3), padding = 'same', activation='relu', input_shape = (timesteps, features))(decoder_outputs3)
drop3 = Dropout(rate = 0.2)(conv_1)
conv_2 = Conv1D(filters = 64, kernel_size = 3, padding = 'same', activation='relu')(drop3)
drop4 = Dropout(rate = 0.2)(conv_2)
conv_3 = Conv1D(filters = 64, kernel_size = 3, padding = 'same', activation='relu')(drop4)
drop5 = Dropout(rate = 0.2)(conv_3)

NN_3 = Dense(timesteps, activation = 'softmax')(drop5)

decoder_outputs = Dense(features, activation = 'relu')(NN_3)

model = Model(inputs, decoder_outputs)
#encoder = Model(inputs, encoder_outputs)
我需要补充的是:-

a。第一个conv1d postnet层中的Gammatone过滤器(我仍在努力)-我已经在这里发布了-

b。在编码器之后提取音素瓶颈特征,将其与编码器状态和输出一起沿管道向前发送

非常感谢任何帮助/提示。问我任何关于代码的问题