为了让模型更易获取数据,我们将所有数据存储为同一格式。每条数据由一个.wav 文件和一个.txt 文件组成。例如:Librispeech 的『211-122425-0059』 在 Github 中对应着 211-122425-0059.wav 与 211-122425-0059.txt。这些数据的文件使用数据集对象类被加载到 TensorFlow 图中,这样可以让 TensorFlow 在加载、预处理和载入单批数据时效率更高,节省 CPU 和 GPU 内存负载。数据集对象中数据字段的示例如下所示: classDataSet: def__init__(self, txt_files, thread_count, batch_size, numcep, numcontext): # ... deffrom_directory(self, dirpath, start_idx=0, limit=0, sort=None): returntxt_filenames(dirpath, start_idx=start_idx, limit=limit, sort=sort) defnext_batch(self, batch_size=None): idx_list =range(_start_idx, end_idx) txt_files =[_txt_files[i] fori inidx_list] wav_files =[x.replace('.txt', '.wav') forx intxt_files] # Load audio and text into memory (audio, text) =get_audio_and_tran( txt_files, wav_files, _numcep, _numcontext) 特征表示 为了让机器识别音频数据,数据必须先从时域转换为频域。有几种用于创建音频数据机器学习特征的方法,包括任意频率的 binning(如 100Hz),或人耳能够感知的频率的 binning。这种典型的语音数据转换需要计算 13 位或 26 位不同倒谱特征的梅尔倒频谱系数(MFCC)。在转换之后,数据被存储为时间(列)和频率系数(行)的矩阵。 因为自然语言的语音不是独立的,它们与字母也不是一一对应的关系,我们可以通过训练神经网络在声音数据上的重叠窗口(前后 10 毫秒)来捕捉协同发音的效果(一个音节的发音影响了另一个)。以下代码展示了如何获取 MFCC 特征,以及如何创建一个音频数据的窗口。 # Load wav files fs, audio =wav.read(audio_filename) # Get mfcc coefficients orig_inputs =mfcc(audio, samplerate=fs, numcep=numcep) # For each time slice of the training set, we need to copy the context this makes train_inputs =np.array([], np.float32) train_inputs.resize((orig_inputs.shape[0], numcep +2*numcep *numcontext)) fortime_slice inrange(train_inputs.shape[0]): # Pick up to numcontext time slices in the past, # And complete with empty mfcc features need_empty_past =max(0, ((time_slices[0] +numcontext) -time_slice)) empty_source_past =list(empty_mfcc forempty_slots inrange(need_empty_past)) data_source_past =orig_inputs[max(0, time_slice -numcontext):time_slice] assert(len(empty_source_past) +len(data_source_past) ==numcontext) ... (责任编辑:本港台直播) |