你是否在苦苦寻找能识别中文的语音识别模型?那认真看完本文,你也能实现,本文可能为您节省少则几小时多则数天的工作时间。
DeepSpeech2由百度硅谷AI实验室在2015年发布,是一个采用PaddlePaddle深度学习框架实现的端到端自动语音识别系统,它能通过简单学习算法较准确的识别英语和中文。百度在DeepSpeech2之前发布过DeepSpeech,可通过pip直接安装,但它用于主要用于识别英文。
DeepSpeech2的原理不在此论述,有兴趣可自行查阅,它只支持python的2.x,并已开源,直接网上搜索很容易找到github网站,也可以关注我私信关键词“语音识别”,你将收到开源网站和已下载好的github内容,解决你可能下载github资源慢的难题。
PaddlePaddle是百度开源的深度学习框架,虽然不及Tensorflow和Pytorch使用广泛,但它是我国最流行的深度学习框架,在Github上Star有12K+,百度也是相当重视它的推广,同时它推出了paddle系列产品,如paddleOCR、paddleSlim、paddleXpaddleLite、paddleHub等等,可满足用户不同的需求,它与Tensorflow相似度较高,如果你有相关框架基础,学习起来也不难。
DeepSpeech系列在2017年推出Deep Speech 3,但目前开源了DeepSpeech2,接下来从安装、运行、识别速度、识别准确率几个方面探讨。
1. 安装
官方推荐直接下载docker镜像安装,docker类似于虚拟机,下载的文件已帮您安装好各种依赖,但该镜像是GPU环境,需要安装nvidia-docker工具,该工具不能在Windows系统安装,因此你只有两种选择:
(1)在本地为Linux系统下实现,如无可考虑安装双系统:首先确保命令nvidia-smi可正确执行,否则安装nvidia驱动,然后安装docker和nvidia-docker,接着导入docker镜像,官方给出的镜像中CUDA版本是9.0,CUDNN版本是7.5,镜像大小10G左右,在docker中建立容器时建议加上参数-v,可将指定目录映射到本地,避免docker空间太小带来麻烦,必要时也可考虑修改docker默认路径。
(2)在win系统中安装虚拟机创建Linux环境,但此环境下不能使用GPU,无法下载官方docker镜像,需要自己安装依赖项,这比较麻烦,而且容易出错,鉴于此我分享了python2安装的dick-packages文件夹,可直接拿来使用,关注我私信关键词“语音识别”获取。注意DeepSpeech2不支持python3,官方说PaddlePaddle版本需 1.8.0以上,其实1.6也可用,但推荐用新版本,1.8有较大变动。
2. 运行
安装好环境后别急着运行,官方提供了训练好的模型文件,包括声学模型和语言模型,可直接下载使用,两者缺一不可,后者在前者的基础上生成最终识别的文本。
百度提供了两个声学模型,分别基于数据集Aishell和百度收集的数据训练生成,经测试后者效果更好,可在开源项目主页搜索“BaiduCN1.2k Model”定位,点击下载后解压放到models/baidu_ch1.2k下,下载的文件中已包括开源项目页的数据准备所需的多个文件。
百度也提供了两个语言模型,文件大小相差巨大,经测试速度有十倍的差距,若你硬件配置一般,选择小模型下载,搜索关键词“Mandarin LM Small”可定位,解压后放到models/lm下。
在运行test.py前还需要修改一些参数:
use_gpu默认为True,如果没使用GPU,改为False;use_gru默认为False需改为True,因为下载的模型文件训练时采用的是GRU算法;share_rnn_weights改为False,batch_size和beam_size根据你的电脑配置调下点,不然可能出现内存溢出错误;修改几个模型相关的文件路径为自己电脑上对应的路径;error_rate_type改为CER,表示字符错误率,用于评价识别精度,WER用于英文识别;关于网络层尺寸和个数别修改,需与模型文件保持一致;cutoff_prob调为0.99试试;alpha和beta需要后续调节,介于0-5之间。
接下来可运行test.py试试,如可计算出CER则可以继续后面的工作;实际使用过程中往往一次只会识别一句话,原项目是运行deploy/demo_server.py和demo_client.py等实现。你可以考虑将test.py改为实现一条音频,脚本中的result_transcripts字段就是识别结果,在此基础上按自己的需求改造,可搭配Flask或者Django框架实现Web服务的后端,前端利用浏览器录音功能上传音频文件可采用Ajax方法实现。
3. 识别速度
我的硬件配置如下:显卡MX250,内存16G,而虚拟机8G.
经优化后最终在虚拟机中实现6S识别一句话;而GPU环境下的Linux系统2S识别,在公司服务器上的GPU环境下可1S识别。
识别速度太慢会导致无法投入使用,以下几个优化方向可供参考:
下载的声学模型解压后,需在models/baidu_ch1.2k下保留压缩文件,但可以随便用一个小文件代替,只需文件名为baidu_cn1.2k_model_fluid.tar.gz,你也可以考虑更改脚本;将ds2_model.logger.info("start recognize...")前面的部分脚本移到函数外面,避免多次加载模型内容;将model_utils/model.py中exe.run(startup_prog)注释,避免每次初始化,但这样处理有一定风险,可能导致识别结果有变,需慎重考虑实施。4. 识别精度
利用AiShell数据集测试,精度可达92%,可参考以下方式提高精度。
非常重要:将音频文件的采样率改为8k,利用wave模块判断是否8k,sox模块修改为8k,精度经明显提升;调节参数alpha和beta,根据CER结果来微调,可先按0.5间隔变化调整,锁定大致范围后再精调;对识别结果再进行智能纠错调整,有时候识别文本错误,但拼音是对的或者很接近。DeepSpeech2的使用就介绍到这里,如果你使用过程中遇到问题,可在评论区留言或私信我。
举报/反馈

有数说数

586获赞 90粉丝
分享日常生活中的数据应用
关注
0
0
收藏
分享