1 有用
11 下载

MASR 中文语音识别

文件列表(压缩包大小 65.39K)

免费

概述

MASR 中文语音识别 MASR是一个基于端到端的深度神经网络中文普通话语音识别项目。

原理

MASR使用的是门控卷积神经网络(Gated Convolutional Network),网络结构类似于Facebook在2016年提出的Wav2letter。但是使用的激活函数不是ReLU或者是HardTanh,而是GLU(门控线性单元)。因此称作门控卷积网络。根据我的实验,使用GLU的收敛速度比HardTanh要快。如果你想要研究卷积网络用于语音识别的效果,这个项目可以作为一个参考。

以下用字错误率CER来衡量模型的表现,CER = 编辑距离 / 句子长度,越低越好*

大致可以理解为 1 - CER 就是识别准确率。

模型使用AISHELL-1数据集训练,共150小时的录音,覆盖了4000多个汉字。工业界使用的语音识别系统通常使用至少10倍于本项目的录音数据来训练,同时使用特定场景的语料来训练语言模型,所以,不要期待本项目可以和工业界的识别效果媲美。这对于Github上任何个人项目来说都不现实,除非有更先进的技术诞生。

什么叫特定场景的语料训练的语言模型?比如你使用游戏中的语音识别,它更倾向于将你的话识别成你在玩游戏时可能说的话,比如「貂蝉被蓝打死了」。而在其他场景下,「貂蝉被蓝打死了」根本就不是一句通顺的话。不信你和一个只读过三国演义没玩过王者荣耀的人说「貂蝉被蓝打死了」,你确定ta不会反问你:「啥?貂蝉被谁打死了?lan是谁?」

在单卡GTX 1080Ti上,模型每迭代一个epoch大约需要20分钟。(实验室的CUDA版本较低,不排除更新CUDA版本后会快一些的可能。)

上图为验证集的CER随epoch的训练曲线。可以看到,目前验证集CER已经下降到11%。

图中没有显示测试集的表现。测试集的CER稍高一些,在14%。

通过外接语言模型可以将测试集的CER降低到8%。

项目目前提供的预训练模型训练了大约是100个epoch时候的,已经接近最好了。

训练MASR模型

MASR基于pytorch,MASRModeltorch.nn.Module的子类。这将给熟悉pytorch的用户带来极大的方便。

使用MASR的训练功能需要安装以下额外的依赖,既然你浏览到了这里,这些依赖你一定能自行搞定!

  • levenshtein-python 计算CER中的编辑距离

  • warpctc_pytorch 百度的高性能CTC正反向传播实现的pytorch接口

  • tqdm 进度显示

  • tensorboardX 为pytorch提供tensorboard支持

  • tensorboard 实时查看训练曲线

当然,相信你也有GPU,否则训练将会变得很慢。

通常,神经网络的训练比搭建要困难得多,然而MASR为你搞定了所有复杂的东西,使用MASR进行训练非常方便。

如果你只想要使用MASR内置的门卷积网络GatedConv的话,首先初始化一个GatedConv对象。

from models.conv import GatedConv

model = GatedConv(vocabulary)

你需要传入向它vocabulary,这是一个字符串,包含你的数据集中所有的汉字。但是注意,vocabulary[0]应该被设置成一个无效字符,用于表示CTC中的空标记。

之后,使用to_train方法将model转化成一个可以训练的对象。

model.to_train()

此时model则变成可训练的了,使用fit方法来进行训练。

model.fit('train.index', 'dev.index', epoch=10)

epoch表示你想要训练几次,而train.indexdev.index应该分别为训练数据集和开发数据集(验证集或测试集)的索引文件。

索引文件应具有如下的简单格式:

/path/to/audio/file0.wav,我爱你
/path/to/audio/file1.wav,你爱我吗
...

左边是音频文件路径,右边是对应的标注,用逗号(英文逗号)分隔。

model.fit方法还包含学习率、batch size、梯度裁剪等等参数,可以根据需要调整,建议使用默认参数。

完整的训练流程参见train.py

来源https://github.com/nobody132/masr

理工酷提示:

如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈

评论(0)

0/250