小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用( 二 )


小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
在PyTorch中 , 你可以使用torchaudio函数FrequencyMasking来掩盖频率维度 , 并使用TimeMasking来度量时间维度 。
torchaudio.transforms.FrequencyMaskingtorchaudio.transforms.TimeMasking有了数据后 , 我们需要将音频转换为Mel频谱图 , 并将每个音频样本的字符标签映射为整数标签:
classTextTransform:''''''Mapscharacterstointegersandviceversa''''''def__init__(self):char_map_str='''''''0<SPACE>1a2b3c4d5e6f7g8h9i10j11k12l13m14n15o16p17q18r19s20t21u22v23w24x25y26z27''''''self.char_map={}self.index_map={}forlineinchar_map_str.strip.split('n'):ch,index=line.splitself.char_map[ch]=int(index)self.index_map[int(index)]=chself.index_map[1]=''deftext_to_int(self,text):''''''Useacharactermapandconverttexttoanintegersequence''''''int_sequence=forcintext:ifc=='':ch=self.char_map['']else:ch=self.char_map[c]int_sequence.append(ch)returnint_sequencedefint_to_text(self,labels):''''''Useacharactermapandconvertintegerlabelstoantextsequence''''''string=foriinlabels:string.append(self.index_map[i])return''.join(string).replace('','')train_audio_transforms=nn.Sequential(torchaudio.transforms.MelSpectrogram(sample_rate=16000,n_mels=128),torchaudio.transforms.FrequencyMasking(freq_mask_param=15),torchaudio.transforms.TimeMasking(time_mask_param=35))valid_audio_transforms=torchaudio.transforms.MelSpectrogramtext_transform=TextTransformdefdata_processing(data,data_type=''train''):spectrograms=labels=input_lengths=label_lengths=for(waveform,_,utterance,_,_,_)indata:ifdata_type=='train':spec=train_audio_transforms(waveform).squeeze(0).transpose(0,1)else:spec=valid_audio_transforms(waveform).squeeze(0).transpose(0,1)spectrograms.append(spec)label=torch.Tensor(text_transform.text_to_int(utterance.lower))labels.append(label)input_lengths.append(spec.shape[0]//2)label_lengths.append(len(label))spectrograms=nn.utils.rnn.pad_sequence(spectrograms,batch_first=True).unsqueeze(1).transpose(2,3)labels=nn.utils.rnn.pad_sequence(labels,batch_first=True)returnspectrograms,labels,input_lengths,label_lengths
小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
定义模型-DeepSpeech2
我们的模型将类似于DeepSpeech2结构 。 该模型将具有两个主要的神经网络模块——学习相关的音频特征的N层残差卷积神经网络(ResCNN) , 以及利用学习后的ResCNN音频特征的一组双向递归神经网络(BiRNN) 。 该模型的顶部是一个全连通层 , 用于按时间步长对字符进行分类 。
小胖有技能|AssemblyAI 在 PyTorch 中建立端到端的语音识别模型,利用
文章图片
卷积神经网络(CNN)善于提取抽象特征 , 我们会将相同的特征提取能力应用于音频频谱图 。 我们选择使用残差的CNN层 , 而不只是普通的CNN层 。 残差连接(又称为跳过连接)是在“用于图像识别的深度残差学习”一文中首次引入 。 作者发现 , 如果将这些连接添加到CNN中 , 可以建立真正的深度网络 , 并获得较高的准确性 。
添加这些残差连接有助于模型更快地学习和更好地推广 。 这篇可视化神经网络的损失图景的论文表明 , 具有残留连接的网络具有一个“平坦的”损失面 , 使模型更容易描绘损失状况 , 并找到一个更低且更通用的最小值 。