该篇翻译自How to start with Kaldi and Speech Recognition
在这里插入图片描述

Kaldi架构

Kaldi主要分为两个主要部分:分别是特征抽取、识别模型

特征抽取模块

大多数处理音频数据的模型都会需要对音频进行特征的抽取,用以达到以下两个目的:

  • 识别人类语音的声音
  • 丢弃任何不必要的噪音。

今天在行业,广泛使用MFCC:

MFCC 示例。Y 轴表示要素,X 轴表示时间。在Kaldi中,还使用了额外的两种特征:

  • CMVN:用于更好的对MFCC特征进行归一化
  • I-Vectors:用于声纹识别,将说话人的特征从音频信息中单独提取出来,让音频特征更“纯粹”

在这里插入图片描述
一个通用的理解是:

  • MFCC和CMVN用于表示音频的内容
  • I-vector用于表示音频或说话人的“风格”(style)

模型

kaldi的模型架构由两部分组成,第一部分是声学模型,第二部分是语言模型。

声学模型

Kaldi的声学模型大概如图所示,将音频提取特征后经由模型训练,识别,得到相应的音素,这个模型在过去是GMM,如今已经改为了深度神经网络。
在这里插入图片描述

语言模型

在识别出音素后,Kaldi的语言模型负责将其转变为格子(lattice),这个结构叫做解码图(Decoding Graph)

这里,格子指用于特定音频部分的备选字序列的表示,可以是单词,也可以是词组,这通常是您希望在语音识别系统中获得的输出。

解码图考虑了数据的语法,以及连续特定单词(n-gram)的分布和概率。
解码图实际上是一个加权的有限状态机(WFST),这种不同WFST的组合在Kaldi项目中命名为“HCLG.fst”,它基于open-fst框架。
在这里插入图片描述
值得注意的是: 这是模型工作方式的简化。实际上有很多关于将两个模型与决策树连接以及表示音素的方式的详细信息,但这种简化可以帮助您掌握这个过程。

Kaldi 使用

Kaldi主要用C / C ++编写,但工具包内包含Bash和Python脚本。对于基本用法,这种包装不需要深入了解源代码。

Kaldi的训练同大多数模型一样,都需要标注数据集和字典,其中标注数据集需要按照Kaldi中的要求进行组织。

而对于字典,一般来说,Kaldi中的字典是以下形式的:
e i g h t − > e y t f i v e − > f a y v f o u r − > f a o r n i n e − > n a y n eight -> ey t \\ five -> f ay v\\ four -> f ao r\\ nine -> n ay n\\ eight>eytfive>fayvfour>faornine>nayn

在这里插入图片描述

当准备齐全后,即可以开始训练该模型。在Kaldi中可以使用的不同的训练步骤来训练最后的模型,这种区别以“食谱”(recipes) 命名。最常用的食谱是WSJ,可以通过查看run bash脚本以更好地理解该食谱。

在大多数食谱中,我们首先将音素与GMM对齐为音频声音。这个基本步骤(命名为“alignment”)帮助我们确定我们希望DNN稍后吐出的序列是什么。

在对齐之后,我们将创建声学模型,并且我们将训练它以匹配对齐后的输出。在创建完声学模型后,通过训练WFST,我们就可以将声学模型的输出转换为所需的格子。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐