如何入手Kaldi和语音识别
什么是Kaldi
- Kaldi是一个用于处理语音数据的开源工具包。 它已用于语音相关应用程序中,主要用于语音识别,但也用于其他任务,例如说话人识别和说话人区分。 该工具包已有大约7年历史,但仍在不断更新。 Kaldi在学术界(2015年被引用400多次)和行业中被广泛采用。
Kaldi的三个部分
预处理和特征提取
- 如今,大多数处理音频数据的模型都可以使用该数据的pixel-based的表示形式。 当想要提取这样的表示形式时,您通常会希望使用对以下两点都有利的特征:
- 识别人类语音
- 丢弃任何不必要的噪音。
- 多年来,人们进行了许多尝试来实现这些功能,而如今,MFCC已在行业中广泛使用。Y轴表示特征,X轴表示时间。 MFCC代表梅尔频率倒谱系数,自从80年代由Davis和Mermelstein发明它以来,它几乎已经成为行业标准。MFCC仅考虑了我们耳朵最能听到的声音。
- 在Kaldi中,使用了另外两个特性:
- CMVNs:用于更好地实现标准化MFCC
- I-Vector:用于更好地了解域内的差异。 例如-创建与说话者相关的表示。 I-Vector基于JFA(联合因子分析)的相同思想,但更适合于理解声道和说话者的差异。
- 为了对这些概念有基本的了解,请记住以下几点:
- MFCC和CMVN用于表示每种音频话语的内容。
- I-Vector用于表示每个音频话语或说话人的风格。
模型
- Kaldi背后的矩阵数学可通过BLAS和LAPACK(用Fortran语言编写)来实现,或通过基于CUDA的另一种GPU实现来实现。 由于使用了此类低级程序包,因此Kaldi在执行这些任务时非常高效。
- Kaldi的模型可以分为两个主要部分:
- 第一部分是声学模型,该模型曾经是GMM,但现在已被Deep Neuro Network取代。 该模型会将我们创建的音频特征转录为一些与上下文相关的音素序列(在Kaldi方言中,我们称其为“ pdf-id”,并用数字表示)。
- 第一部分是声学模型,该模型曾经是GMM,但现在已被Deep Neuro Network取代。 该模型会将我们创建的音频特征转录为一些与上下文相关的音素序列(在Kaldi方言中,我们称其为“ pdf-id”,并用数字表示)。
- 第二部分是Decoding Graph,将音素转换成格。格是可能用于特定音频部分的替代词序列的表示。这通常是您希望在语音识别系统中获得的输出。解码图考虑了数据的语法,以及相邻特定单词(n-grams)的分布和概率。
- 解码图本质上是WFST,不同的WFST的组成在Kaldi项目中命名为“ HCLG.fst文件”,它基于open-fst框架。
训练过程
- 通常,这是最棘手的部分。 在Kaldi中,您需要按照非常具体的顺序对转录的音频数据进行排序。在对数据进行排序之后,您需要将每个单词的表示形式添加到创建它们的音素中。这个表示将被命名为“字典”,它将决定声学模型的输出。这是一个这样的字典的例子:
eight -> ey t
five -> f ay v
four -> f ao r
nine -> n ay n
- 当您同时拥有这两种东西时,就可以开始训练模型了。 您可以使用的不同训练步骤在Kaldi方言“recipes”中进行了命名。 最常用的配方是WSJ recipes,您可以查看run bash脚本以更好地了解该recipes。
- 在大多数recipes中,我们都从使用GMM将音素对齐到音频声音开始。 这个基本步骤(称为“对齐”)有助于我们确定DNN稍后要吐出的序列。
- 对齐之后,我们将创建将形成声学模型的DNN,并将对其进行训练以匹配对齐输出。 创建声学模型后,我们可以训练WFST将DNN输出转换为所需的格。