ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kaldi新手入门及语音识别的流程(标贝科技)

2021-12-06 10:32:16  阅读:271  来源: 互联网

标签:训练 标贝 kaldi 新手入门 声学 语音 识别 模型


kaldi新手入门及语音识别的流程(标贝科技)

欢迎体验标贝语音开放平台
地址:https://ai.data-baker.com/#/?source=qaz123
(注:填写邀请码hi25d7,每日免费调用量还可以翻倍)
​​​​​​在这里插入图片描述
在这里插入图片描述

一、kaldi

  • kaldi简介
    Kaldi是当前最流行的开源的语音识别工具包,旨在提供灵活且可扩展的组件,包括多种语音信号处理,语音识别,声纹识别和深度神经网络。Kaldi的代码主要用C++编写,在此之上使用bash 和python脚本做了一些工具。

  • kaldi安装和编译
    kaldi由它的开发团队在github进行维护,以下介绍安装目前最新的kaldi的步骤。
    (1)配置gcc版本
    当前版本的kaldi需要本地服务器编译器gcc版本为5.4.0及以上。可以通过 gcc -v 命令查看编译器版本。
    在这里插入图片描述

    (2)获取当前版本kaldi
    可以通过拷贝,或者直接从github下载两种方式获取,这里介绍后者。
    使用 git clone https://github.com/kaldi-asr/kaldi.git 命令下载kaldi到本地服务器。
    在这里插入图片描述

然后介绍kaldi的编译方式。进入kaldi文件夹,按照INSTALL中的说明进行编译。在INSTALL中,如下图,有两种编译kaldi的方式,这里介绍第一种。
在这里插入图片描述

按照文件提示,先到tools/目录下面按照INSTALL中的说明编译,完成之后到src/目录下按照INSTALL中的说明编译即可。

首先,进入tools/目录编译,按照INSTALL的提示,按顺序执行命令,在执行extras/check_dependencies.sh 命令时,可能会出现以下提示,这里可以不用理会,直接进行下一步。
在这里插入图片描述

执行 make 命令编译时,可能会出现如下错误,按照提示,在Makefile里头的 WGET 命令中添加该提示语句即可。
在这里插入图片描述
在这里插入图片描述

再次编译,耐心等待,直到编译完成。
在这里插入图片描述

以上,tools/目录下编译完成,接下来进入src/目录进行编译。同样,按照INSTALL中的提示顺序执行命令,耐心等待直到编译完成。
在这里插入图片描述

至此kaldi完成编译。

二、kaldi语音识别

1.语音识别简介

与机器进行语音交流,让机器明白你说什么,这是人们长期以来梦寐以求的事情。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高级技术。
语音识别技术经历了长期的发展,从传统的基于隐马尔科夫模型和高斯混合模型的方法(GMM-HMM),到深度学习发展之后神经网络替代了GMM的DNN-HMM方法,再到现在的一些端到端的方法。目前,语音识别技术已经在诸多领域取得了一定的成果。
我们以传统的语音识别方法来介绍语音识别的流程:所谓语音识别,就是将一段语音信号转换成相对应的文本信息,系统主要包含特征提取、声学模型,语言模型以及字典与解码四大部分,为了更有效地提取特征往往还需要对所采集到的声音信号进行滤波、分帧等音频数据预处理工作,将需要分析的音频信号从原始信号中合适地提取出来;特征提取工作将声音信号从时域转换到频域,为声学模型提供合适的特征向量;声学模型中再根据声学特性计算每一个特征向量在每一个状态上的得分;而语言模型则根据语言学相关的理论,计算该声音信号对应可能词组序列的概率;最后根据已有的字典,对词组序列进行解码,得到最后可能的文本表示。
在这里插入图片描述

我们举一个简单的例子(只是形象表述,不是真实数据和过程):

  • 语音信号:pcm、wav文件等(我是机器人)
  • 特征提取:提取特征向量[1 2 3 4 56 0 …]
  • 声学模型:[1 2 3 4 56 0]-> w o s i j i q i r n
  • 字典:窝:w o;我:w o;是:s i;机:j i;器:q i;人:r n;级:j i;忍:r n;
  • 语言模型:我:0.0786, 是:0.0546,我是:0.0898,机器:0.0967,机器人:0.6785;
  • 输出文字:我是机器人;

2.kaldi语音识别

kaldi当中的中文语音识别的例子是egs/aishell,可以直接运行目录下s5/当中的run.sh来训练一个中文语音识别的声学模型,脚本会先下载数据,对数据进行整理,然后开始训练。以下我们将基于s5/这个例子,介绍如何用自己的数据训练一个语音识别声学模型。
进入到egs/aishell/s5目录下,首先需要改cmd.sh的配置,默认是queue.pl基于集群计算的,我们是用本地单个服务器来跑,所以改为run.sh:
在这里插入图片描述

以下介绍准备训练需要的特定格式数据的流程。
(1)准备发音字典(lexicon.txt),做lang和lang_test
发音字典是语言的字或者词和音素之间的对应关系,例如:
在这里插入图片描述

发音字典可以是别人提供的,或者是自己按照语言的发音规则设计的,发音字典很重要,当我们从头开始训练一门新的语言的声学模型,以下run.sh当中的脚本能够根据发音字典生成语言模型相关的文件夹lang和解码过程相关的文件夹lang_test,这对于后面的迭代训练是必要的。如果不是做一门新的语言,可以从别人那里直接拷贝lang和lang_test,这样以下这些步骤都是可以省略。
在这里插入图片描述

(2)数据准备
我们需要将训练数据规范成kaldi规定的格式,划分train/test/dev集,每个集下面都需要四个文件,目录层级如下:
在这里插入图片描述

wav.scp:音频ID+音频绝对路径
在这里插入图片描述

utt2spk:音频ID+说话人ID
在这里插入图片描述

spk2utt:说话人ID+此人所有音频ID(生成utt2spk后,在utt2spk目录下,执行 …/…/utils/utt2spk_to_spk2utt.pl utt2spk > spk2utt 生成)
在这里插入图片描述

text:音频ID+分好词的文本(采用 jieba分词)。jieba有默认的词典,一般简体中文默认词典就可以了,但是可能会有粤语、繁体等情况出现,这个时候需要自己做词典了。我们已经有了lang文件夹,lang当中有一个词表words.txt,我们可以用它来做一个jiaba词典,执行命令: awk -F ‘\t’ ‘{print $1 “3 n”}’ words.txt > usrDict 就可以得到jieba分词需要的词典了,然后用分词脚本,加载这个词典,对text进行分词。
以上数据准备完毕,接下来介绍训练的流程。
(1)提取声学特征(mfcc+pitch),计算倒谱均值方差归一化系数(cmvn)。
在这里插入图片描述

(2)训练单音子声学模型mono。单音子GMM-HMM模型训练完成后,使用测试集进行解码来测试识别率,虽然可能识别率较低,但这已经是一个可以用来进行语音识别的可用模型了。然后用单音子模型对训练数据做对齐。
在这里插入图片描述

(3)训练三音子声学模型tri1,三音子模型的训练和单音子训练一样,训练之后用生成的模型对训练数据重新进行对齐,作为后续系统的基础。
在这里插入图片描述

(3)tri2也是三音子声学模型训练,多次训练三音子模型的原因:比如目标是训练一个10000状态的三音子系统,最简单的办法是,用单音子系统产生的对齐直接训练一个10000状态的三音子系统;但通常更为稳妥的做法是先以单音子为基础,训练一个5000状态的三音子模型,再用5000状态的模型重新对训练数据进行对齐,其对其质量必然比单音子系统的对齐质量高,然后用这个新对齐再去训练一个10000状态的三音子系统,从而达到更好的模型精度。
在这里插入图片描述

(4)从tri3a开始,使用了有监督特征变换技术(线性判别分析LAD和最大似然线性变换MLLT)训练三音子声学模型;tri4a训练跟说话人相关的声学模型,tri5a构建了一个更大的说话人自适应系统进行训练,并根据最终的模型对训练数据再次对齐。
在这里插入图片描述

以上完成了基于GMM-HMM声学模型的训练,得到了单音子的声学模型和多个三音子的声学模型,并且根据声学模型得到了训练数据的对齐。接下来,将基于以上的对齐结果,训练基于DNN-HMM的声学模型,这步训练需要使用GPU,需要先指定GPU。
在这里插入图片描述

训练完成之后,同样使用测试集进行解码来测试识别率。使用下面的命令来查看所有模型的识别率。
在这里插入图片描述

所有模型和对齐的结果存储在exp/目录下:
在这里插入图片描述

至此,完成了基于kaldi的声学模型训练的所有步骤,并且得到了进行语音识别的声学模型,可以结合语言模型、字典和解码进行语音识别。
欢迎体验标贝语音开放平台
地址:https://ai.data-baker.com/#/?source=qaz123
(注:填写邀请码hi25d7,每日免费调用量还可以翻倍)
​​​​​​在这里插入图片描述
在这里插入图片描述

标签:训练,标贝,kaldi,新手入门,声学,语音,识别,模型
来源: https://blog.csdn.net/DataBaker/article/details/121741063

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有