在pytorch中为ASR加载librispeech

2024-04-28 08:25:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近在训练一台使用神经网络和CTC损失的自动语音识别机。但我要做的第一件事是准备数据来训练模型。因为Librispeech包含大量的数据,所以最初我将使用它的一个子集,称为“Mini Librispeech ASR corpus”。(http://www.openslr.org/31/)。另外,我使用SeanNaren Pythorch绑定来处理扭曲ctc(https://github.com/SeanNaren/warp-ctc)。在

在阅读了音频文件和它们对应的转录本之后,我使用Spicy包计算每个音频文件的频谱图。当我要把光谱图输入到卷积层进行特征提取时,问题就出现了。每个谱图的长度不同于其他谱图。在对这个问题进行了更多的搜索之后,我发现我应该向网络传递特定数量的帧,但是为了达到这个目的,我需要用相应的字符(也包含空白符号)标记声音文件的每一帧。在

在python中有没有一种方法可以做到这一点?在


Tags: 数据模型http语音神经网络corpusasr音频文件
2条回答

你的问题很宽泛:你在看音频文件的记录吗?如果是这样的话,它们在每个目录的文本文件中,每行都以文件名(不带扩展名)开头。在

你可以看这里:https://github.com/inikdom/rnn-speech/blob/master/util/dataprocessor.py

尤其是这种方法,它给出了一个音频文件列表及其对Librispeech语料库的转录:

def get_data_librispeech(self, raw_data_path):
    text_files = self.find_files(raw_data_path, ".txt")
    result = []
    for text_file in text_files:
        directory = os.path.dirname(text_file)
        with open(text_file, "r") as f:
            lines = f.read().split("\n")
            for line in lines:
                head = line.split(' ')[0]
                if len(head) < 5:
                    # Not a line with a file desc
                    break
                audio_file = directory + "/" + head + ".flac"
                if os.path.exists(audio_file):
                    result.append([audio_file, self.clean_label(line.replace(head, "")), None])
    return result

注意:每个项目的第三个值总是无,因为它应该被另一个方法中的音频长度替换。在

你不需要用相应的字符来标记音频的每一帧,CTC将通过处理完整的音频和相应的转录本来处理它。在

将Pythorch神经网络与光谱图结合起来进行动态计算的最简单方法是使用nnAudio。在

相关问题 更多 >