利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型( 二 )


利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型
本文插图
在PyTorch中 , 你可以使用torchaudio函数FrequencyMasking来掩盖频率维度 , 并使用TimeMasking来度量时间维度 。
torchaudio.transforms.FrequencyMaskingtorchaudio.transforms.TimeMasking有了数据后 , 我们需要将音频转换为Mel频谱图 , 并将每个音频样本的字符标签映射为整数标签:
class TextTransform:''''''Maps characters to integers and vice versa''''''def __init__(self):char_map_str = ''''''' 0<SPACE> 1a 2b 3c 4d 5e 6f 7g 8h 9i 10j 11k 12l 13m 14n 15o 16p 17q 18r 19s 20t 21u 22v 23w 24x 25y 26z 27''''''self.char_map = {}self.index_map = {}for line in char_map_str.strip.split('n'):ch, index = line.splitself.char_map[ch] = int(index)self.index_map[int(index)] = chself.index_map[1] = ' 'def text_to_int(self, text):'''''' Use a character map and convert text to an integer sequence ''''''int_sequence =for c in text:if c == ' ':ch = self.char_map['']else:ch = self.char_map[c]int_sequence.append(ch)return int_sequencedef int_to_text(self, labels):'''''' Use a character map and convert integer labels to an text sequence ''''''string =for i in labels: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 = TextTransformdef data_processing(data, data_type=''train''):spectrograms =labels =input_lengths =label_lengths =for (waveform, _, utterance, _, _, _) in data:if data_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)return spectrograms, labels, input_lengths, label_lengths
利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型
本文插图
定义模型-DeepSpeech 2
我们的模型将类似于Deep Speech 2结构 。 该模型将具有两个主要的神经网络模块——学习相关的音频特征的N层残差卷积神经网络(ResCNN) , 以及利用学习后的ResCNN音频特征的一组双向递归神经网络(BiRNN) 。 该模型的顶部是一个全连通层 , 用于按时间步长对字符进行分类 。
利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型
本文插图
卷积神经网络(CNN)善于提取抽象特征 , 我们会将相同的特征提取能力应用于音频频谱图 。 我们选择使用残差的CNN层 , 而不只是普通的CNN层 。 残差连接(又称为跳过连接)是在“用于图像识别的深度残差学习”一文中首次引入 。 作者发现 , 如果将这些连接添加到CNN中 , 可以建立真正的深度网络 , 并获得较高的准确性 。
添加这些残差连接有助于模型更快地学习和更好地推广 。 这篇可视化神经网络的损失图景的论文表明 , 具有残留连接的网络具有一个“平坦的”损失面 , 使模型更容易描绘损失状况 , 并找到一个更低且更通用的最小值 。


推荐阅读