利用 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
本文插图
定义模型-DeepSpeech 2
我们的模型将类似于Deep Speech 2结构 。 该模型将具有两个主要的神经网络模块——学习相关的音频特征的N层残差卷积神经网络(ResCNN) , 以及利用学习后的ResCNN音频特征的一组双向递归神经网络(BiRNN) 。 该模型的顶部是一个全连通层 , 用于按时间步长对字符进行分类 。
本文插图
卷积神经网络(CNN)善于提取抽象特征 , 我们会将相同的特征提取能力应用于音频频谱图 。 我们选择使用残差的CNN层 , 而不只是普通的CNN层 。 残差连接(又称为跳过连接)是在“用于图像识别的深度残差学习”一文中首次引入 。 作者发现 , 如果将这些连接添加到CNN中 , 可以建立真正的深度网络 , 并获得较高的准确性 。
添加这些残差连接有助于模型更快地学习和更好地推广 。 这篇可视化神经网络的损失图景的论文表明 , 具有残留连接的网络具有一个“平坦的”损失面 , 使模型更容易描绘损失状况 , 并找到一个更低且更通用的最小值 。
推荐阅读
- 爱我就别想太多:爱我就别想太多:最阴险的女人曝光,比薛瑛更可恨,夏可可被利用
- 樱寺静语日本的佳能电子卫星,利用美国火箭发射失利
- 亦君|一男一女哈佛两学霸作息大公开,相似处太多,男生每天睡觉9小时起床充分利用碎片化时间都用番茄工作法都严格控制了手机的使用都很重视健身,
- 小强幽默|公司如何做好网络营销推广找客户,园林花卉行业企业怎么利用网络推广引流获客
- 风雨同进步|公司如何做好网络营销推广找客户,旅游行业企业怎么利用网络推广引流获客
- 小强幽默酒店行业企业怎么利用网络推广引流获客,公司如何做好网络营销推广找客户
- 守望者加速器de小编|GTA5:利用BUG赚钱的方法你会吗 摩托帮工厂省钱方法介绍
- 王者荣耀|深度攻略|利用自身爆发让敌方快速减员,将敌人逐一击破!
- 全新等离子体光子芯片:利用光进行超高速数据传输
- 兰州新闻网|省二院利用FNS微创治疗股骨颈骨折
