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基于pytorch,MASRModel
是torch.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.index
和dev.index
应该分别为训练数据集和开发数据集(验证集或测试集)的索引文件。
索引文件应具有如下的简单格式:
/path/to/audio/file0.wav,我爱你
/path/to/audio/file1.wav,你爱我吗
...
左边是音频文件路径,右边是对应的标注,用逗号(英文逗号)分隔。
model.fit
方法还包含学习率、batch size、梯度裁剪等等参数,可以根据需要调整,建议使用默认参数。
完整的训练流程参见train.py
。
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)