绝佳的ASR学习方案:这是一套开源的中文语音识别系统

语音识别目前已经广泛应用于各种领域,那么你会想做一个自己的语音识别系统吗?这篇文章介绍了一种开源的中文语音识别系统,读者可以借助它快速训练属于自己的中文语音识别模型,或直接使用预训练模型测试效果。所以对于那些对语音识别感兴趣的读者而言,这是一个学习如何搭建 ASR 系统的极好资料。

ASRT 是一套基于深度学习实现的语音识别系统,全称为 Auto Speech Recognition Tool,由 AI 柠檬博主开发并在 GitHub 上开源(GPL 3.0 协议)。本项目声学模型通过采用卷积神经网络(CNN)和连接性时序分类(CTC)方法,使用大量中文语音数据集进行训练,将声音转录为中文拼音,并通过语言模型,将拼音序列转换为中文文本。基于该模型,作者在 Windows 平台上实现了一个基于 ASRT 的语音识别应用软件它同样也在 GitHub 上开源了。

  • ASRT 项目主页:https://asrt.ailemon.me

  • GitHub 项目地址:https://github.com/nl8590687/ASRT_SpeechRecognition

这个开源项目主要用于语音识别的研究,作者希望它可以一步步发展为极高准确率的 ASR 系统。此外,因为模型和训练代码都是开源的,所以能节省开发者很多时间。同样,如果开发者想要根据需求修改这个项目,那也非常简单,因为 ASRT 的代码都是经过高度封装的,所有模块都是可以自定义的。如下展示了该项目的一些特征:

系统流程

特征提取:将普通的 wav 语音信号通过分帧加窗等操作转换为神经网络需要的二维频谱图像信号,即语谱图。

声学模型:基于 Keras 和 TensorFlow 框架,使用这种参考了 VGG 的深层的卷积神经网络作为网络模型,并训练。

CTC 解码:在语音识别系统的声学模型输出中,往往包含了大量连续重复的符号,因此,我们需要将连续相同的符号合并为同一个符号,然后再去除静音分隔标记符,得到最终实际的语音拼音符号序列。

语言模型:使用统计语言模型,将拼音转换为最终的识别文本并输出。拼音转文本本质被建模为一条隐含马尔可夫链,这种模型有着很高的准确率

使用流程

如果读者希望直接使用预训练的中文语音识别系统,那么直接下载 Release 的文件并运行就好了:

下载地址:https://github.com/nl8590687/ASRT_SpeechRecognition/releases/tag/v0.4.2

如果读者希望修改某些模块,或者在新的数据集上进行训练,那么我们可以复制整个项目到本地,再做进一步处理。首先我们通过 Git 将本项目复制到本地,并下载训练所需要的数据集。作者在项目 README 文件中提供了两个数据集,即清华大学 THCHS30 中文语音数据集和 AIShell-1 开源版数据集。

$ git clone https://github.com/nl8590687/ASRT_SpeechRecognition.git

THCHS30 和 ST-CMDS 国内下载镜像:http://cn-mirror.openslr.org/

在下载数据集后,我们需要将 datalist 目录下的所有文件复制到 dataset 目录下,也就是将其与数据集放在一起:

$ cp -rf datalist/* dataset/

在开始训练前,我们还需要安装一些依赖库:

  • python_speech_features

  • TensorFlow

  • Keras

  • wave

当然,其它如 NumPy、Matplotlib、Scipy 和 h5py 等常见的科学计算库也都是需要的。一般有这些包后,环境应该是没什么问题的,有问题也可以根据报错安装对应缺少的库。

训练模型可以执行命令行:

$ python3 train_mspeech.py

测试模型效果可以运行:

$ python3 test_mspeech.py

测试之前,请确保代码中填写的模型文件路径存在。最后,更多的用法和特点可以查看原 GitHub 项目和文档。

工程中文语音识别GitHub卷积神经网络CTC
2
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

VGG技术

到了2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

马尔可夫链技术

马尔可夫链,又称离散时间马尔可夫链,因俄国数学家安德烈·马尔可夫得名,为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆”的性质:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。这种特定类型的“无记忆性”称作马尔可夫性质。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

推荐文章
暂无评论
暂无评论~