(Keras/Tensorflow)端到端语音识别

声明:本文原文来源于GitHub,经本人翻译首发于CSDN,仅供技术分享所用,不作商用。欢迎大家关注我的公众号: gbxiao992

本存储库用于记录我使用Keras和Tensorflow开发端到端的语音识别模型的研究。

原文链接:https://github.com/igormq/asr-study/blob/master/README.md

训练基于character 的全神经巴西葡萄牙语语音识别模型

我们的模型使用四个数据集进行训练: CSLU Spoltech (LDC2006S16), Sid, VoxForge, and LapsBM1.4. 部分数据集需要有偿下载。

(部分)巴西葡萄牙语语音数据集预处理

您可以使用提供的脚本下载免费提供的数据集(可能需要一段时间):

$ cd data; sh download_datasets.sh

接下来,您可以将其预处理为hdf5文件。点击此处获取更多信息。

$ python -m extras.make_dataset --parser brsd --input_parser mfcc

训练网络

您可以使用train.py脚本训练网络。欲了解更多使用信息请参阅这里。使用默认参数进行训练:

$ python train.py --dataset .datasets/brsd/data.h5

预训练模型

下载基于完整brsd数据集(包括CSLU数据集)预训练好的brsm v1.0 模型

$ mkdir models; sh download_brsmv1.sh

此外,您可以针对brsd测试集评估模型

$ python eval.py --model models/brsmv1.h5 --dataset .datasets/brsd/data.h5

brsmv1.h5 training

(Keras/Tensorflow)端到端语音识别_第1张图片
(Keras/Tensorflow)端到端语音识别_第2张图片
测试集:LER 25.13%(使用光束搜索解码器,光束宽度为100)

预测输出

使用某些数据集预测训练模型的输出:

$ python predict.py --model MODEL --dataset DATASET

可用的数据集解析器

您可以在datasets/ 路径下看到所有可用的数据集解析器。

创建自定义数据集解析器

您可以创建自己的数据集解析器。这是一个例子:

class CustomParser(DatasetParser):

    def __init__(self, dataset_dir, name='default name', **kwargs):
        super(CustomParser, self).__init__(dataset_dir, name, **kwargs)

    def _iter(self):
      for line in dataset:
        yield {'duration': line['duration'],
               'input': line['input'],
               'label': line['label'],
               'non-optional-field': line['non-optional-field']}

    def _report(self, dl):
      args = extract_statistics(dl)
      report = '''General information
                  Number of utterances: %d
                  Total size (in seconds) of utterances: %.f
                  Number of speakers: %d''' % (args)

可用模型

你可以在core/models.py路径下看到所有可用的模型。

创建自定义模型

您可以创建自定义模型。这里是基于CTC的模型的一个例子

def custom_model(num_features=26, num_hiddens=100, num_classes=28):

    x = Input(name='inputs', shape=(None, num_features))
    o = x

    o = Bidirectional(LSTM(num_hiddens,
                      return_sequences=True,
                      consume_less='gpu'))(o)
    o = TimeDistributed(Dense(num_classes))(o)

    return ctc_model(x, o)

已知 bugs

  • 过高的内存与CPU消耗
  • Predicting with batch size greater than 1(Keras’bug)
  • warp-ctc似乎没有加速训练
  • zoneout实现

要求

基本要求

  • Python 2.7
  • Numpy
  • Scipy
  • Pyyaml
  • HDF5
  • Unidecode
  • Librosa
  • Tensorflow
  • Keras

推荐

  • warp-ctc (用于快速CTC损失计算)

可选

  • SpeechRecognition (使用 eval apis)
  • openpyxl ( 将结果保存在excel文件中)

致谢

  • python_speech_features for the audio preprocessing
  • Google Magenta for the hparams
  • @robertomest for helping me with everything

License

See LICENSE.md for more information

(Keras/Tensorflow)端到端语音识别_第3张图片

你可能感兴趣的:(项目学习,深度学习)