python 语音识别

在python中训练一个语音识别系统主要需要以下几个步骤:

  • - 语料库准备
  • - 数据预处理
  • - 特征提取
  • - 训练模型

第一部分:语料库的准备

什么是语料库?语料库长什么样?

        语料库由两部分组成,第一部分是语音,第二部分是玉莹的标注,通常为字符形式。本次项目中,我们选用的语料库是THCHS-30,这个语料库是在安静的办公室环境下,由录音人员用普通话朗读新闻的语音作为数据,总时长超过30个小时。我们利用语料库,构造转换字典,将中文转换为数字进行模型训练,同时将模型的识别结果转换为中文。

语料库部分数据:

 第一部分,采用了wav格式的语音,

第二部分,标注第一行是语音的中文,

第二行是拼音,第三行是音节。

有了语料库即可进行接下来的步骤。

第二部分:数据预处理。

预处理部分分为五部分:j降噪,去静默,分帧,傅里叶,特征对齐。

        在语料库的数据中,存在着背景噪声,所以我们对背景噪声进行了抑制,以获得相对干净的语音,同时,我们去除了语音的沉默部分,避免在训练过程中造成干扰。使用神经网络训练模型时,我们对数据进行了归一化处理,加快模型的收敛,减少资源的消耗。同时,为了固定神经网络的输入层,我们以最长音频的特征帧数为模板,帧数不足则以无信息的0填充进行特征对齐。

第三部分:特征提取。

        首先是预加重。预加重会在一定的程度上增加语音的高频分辨率,突出高频的共振峰。在后期的模型训练中,会加速模型对数据特征值的识别。其次是分帧,模型的训练过程中,需要一个固定的输入层进行训练。所以我们需要将连续语音分为不同的帧作为特征值输入。但是,划分语音后会导致频域能量泄露,为了减少分帧所带来的影响,我们在第三部分使用了窗口函数对划分后的帧进行平滑处理,保证后期的傅里叶变换顺利进行。傅里叶变换可以将能量由时域转换至频域上,从而解决一些难以在时域上解决的问题。最后我们根据人耳听觉范围对傅里叶变换后的频谱图进行Mel滤波,再通过离散余弦变换去除滤波器组系数间的高度相关性,以获得Mel频率倒谱系数MFCC。

第四部分:训练模型。

        在循环神经网络RNN中,我们采用了更加轻便的GRU网络作为模型训练。较于LSTM而言,GRU仅采用了合并门和更新门,参数较少更容易收敛,更加节约资源。我们使用前向GRU模型获取上文信息,同时使用后向GRU模型获取下文信息,将语音的上下文信息拼接,得到语句的完整信息,得到的结果会较为准确。在损失函数上我们选择了CTC 连接时序分类,CTC可以省略标签和特征对齐的步骤,大大减少人工工作量。

以上就是语音识别的大致步骤。

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值