AIBigKaldi(一)| Kaldi的目录结构(源码解析)

本文来自公众号“AI大道理”。

Kaldi是使用c++写的传统语音识别的工具,是基于HMM架构的。
Kaldi的目标和范围与HTK相似。目标是拥有易于修改和扩展的用C++编写的现代而灵活的代码。

Kaldi的目标是为构建语音识别系统提供完整的配方,这些配方可从语言数据库(LDC)提供的数据库中获得。

Kaldi并不是一个深度学习框架,因此现在火热的端到端语音识别用kaldi并不是很好实现。
端到端语音识别的实现可以用PyTorch-Kaldi、ESPnet等。

 

1 Kaldi架构

 

Kaldi架构如所示。

顶层是外部的工具,包括用于线性代数库BLAS/LAPACK和加权有限状态转换器(FST)库OpenFst。
中间是Kaldi的C++库,包括传统语音识别相关算法的C++实现。
底层是编译出来的可执行程序。
最底层则是一下脚本,用于实现语音识别的不同步骤如数据准备、特征提取、训练单因子模型、结构解码图、解码等等。

 

 

2 Kaldi目录结构

在 Kaldi 的一级主目录中包括:egs、misc、scripts、src、tools、windows等文件夹。

 

 

一级目录

内容

egs

Kaldi的实例,包含了语音识别,语种识别,声纹识别,关键字识别等。

misc

包含了一些 pdf,以及相关 docker,htk 等资源。

scripts

只用来存放 Rnnlm,以及相应的运行脚本。

src

存放 Kaldi 的源代码,包括GMM,Ivector,Nnet等一系列的传统语音识别算法。

tools

主要存放 Kaldi 依赖库的安装脚本。

windows

在 Windows 平台运行所必须的脚本以及相关的执行程序。

 

Kaldi 目录 tools

tools目录主要存放Kaldi安装的软件包。

 

工具

内容

OpenFst

加权有限状态转换器(FST)的库。

IRSTLM

一种语言建模工具包。

可以将任何Arpa格式的语言模型转换为FST。

SRILM

一种语言建模工具包。

它是比IRSTLM更好,更完整的语言建模工具包。

sph2pipe

用于将sph格式文件转换为其他格式,例如wav使用LDC数据的示例脚本需要它。

sclite

这是用于计分的。

ATLAS

线性代数库。

CLAPACK

线性代数库。

这仅在没有ATLAS且使用CLAPACK进行编译的系统上有用。

OpenBLAS

这是ATLAS或CLAPACK的替代方案。

脚本默认情况下不使用它。

 

Kaldi 目录 egs

Egs 目录主要用于存放 Kaldi 的所有例程。

 

实例

描述

Aishell

此目录为中文语音识别和声纹识别相关例子。

Aishell2

此目录主要为中文语音识别例子,但是针对 Aishell 在脚本方面更加规整。

ami

此目录主要涉及到多信道语音识别的例子。

an4

此例子为 CMU 提供语音识别例子,并没有涉及神经网络。

apiai_decode

此例子为解码器使用的例子,其中包含了如何使用预训练模型,这里主要针对的是 Nnet3 解码。

aspire

此为ASpIRE 挑战赛的例子,其中包含了怎样使用噪声数据构建多条件数据的例子。

aurora4

此例子主要介绍 RBM 预训练。

babel

此例子主要是用来训练 KWS (Key Word Search)。

babel_multilang

此例子为训练多语音 KWS。

bentham

手写笔识别的例子。

bn_music_speech

音乐与语音区分的例子。

callhome_diarization

说话人分割的例子。

callhome_etyptian

埃及语语音识别例子。

chime1-5

主要针对 CHiME 竞赛开放的例子。

cigar

图像分类的例子。

commonvoice

Mozilla Common Voice 语音识别的例子。

csj

日语 语音识别例子。

dihard_2018

DiHARD Speech Diarization CHALLENGE 的例子。

fame

富里西语语音识别和声纹识别的例子。

farsdat

主要用来声学语音研究和语音识别的例子。

fisher_callhome_spanish

使用 Callhome 预料进行语音识别的例子

fisher_english

英文双声道 8000 Hz 对话电话语音数据集的语音识别例子

fisher_swbd

包含 fisher 数据集以及 swbd 数据集的语音识别例子。

gale_arabic:

阿拉伯语语音识别例子。

gale_mandarin

普通话语音识别例子。

gp

全球电话语音识别例子(多语种语音识别例子)。

heroico

西班牙语音识别例子。

houst

普通话电话语音识别例子。

hub4_english

英语新闻广播语音识别例子。

hub4_spanish

西班牙新闻广播语音识别例子。

iam

IAM 手写笔识别例子。

iban

语音识别例子。

ifnenit

阿拉伯语手写笔识别例子。

librispeech

英语语音识别例子。

lre/lre07

语种识别例子。

madcat_ar

手写笔识别例子。

madcat_zh

中文手写笔识别例子。

mini_librispeech

英语语音识别例子。

mult_en

英语 LVCSR 例子。

pub

RNNLM 模型构建例子。

reverb

REVERB 挑战赛例子。

rimes

法语手写笔识别例子。

rm

英语语音识别例子,包含了如何进行迁移学习。

sitw

sitw 说话人识别挑战赛的例子。

sprakbanken

丹麦语语音识别例子。

sprakbanken_swe

瑞典语语音识别例子。

sre08/10/16

说话人识别的例子。

svhn

图像分类的例子。

swahili

班图人语 语音识别例子。

swab

双声道对电话语音识别例子。

tedium

英语语音识别例子。

thchs30

普通话语音识别例子。

tidigits

基础语音识别的例子。

timit

主要是 GMM/HMM 语音识别例子。

tunisian_msa

阿拉伯语音识别例子。

uw3

OCR 识别例子。

voxceleb

说话人识别例子。

vystadial_cz

捷克语语音识别例子。

voxforge

基础语音识别例子,以及对应的在线 demo 的例子。

vystadial_en

英文语音识别例子。

wsj

wsj 英文语音识别例子。

yesno

独立词语音识别例子。

yomdle_fa/korean/russian/tamil/zh

OCR 识别例子。

zeroth_korean

朝鲜语语音识别例子。

 

Kaldi 目录 src

src 目录为 Kaldi 的源码目录,主要保存了包括 GMM、HMM 等在内的大部分 Kaldi 语音项目源代码。

在 src 目录中,有两类文件夹,一类是算法原目录,一类为算法组合生成bin(可执行程序)目录。

 

目录

功能

base

基础目录,主要包括与 Kaldi 项目相关的基础宏定义、类型定义等。

bin

基础 bin 目录,主要是包括基础的执行程序。例如,查看 tree 信息、矩阵拷贝等基础操作。

cudamatrix

矩阵计算相关 GPU 计算

matrix

矩阵计算相关 CPU 计算

itf

 interface

hmm

隐马尔可夫算法的代码

utils

语音算法无关的工具目录,例如,线程操作、io操作、文本操作等。

probe

  exp(指数) 测试

transform

特征转换算法

fstext

 fst 相关的算法基础

fstbin

 fst 对应的算法执行文件夹

feat

特征提取算法目录

featbin

特征提取可执行目录

gmm

 GMM 算法

gmmbin

 GMM 算法可执行文件目录

ivector

ivector 算法基础目录

ivectorbin

ivector 算法的可执行目录,以及基于能量的 vad 执行目录。

kws

关键字搜索基础算法目录

kwsbin

 关键字搜索执行目录

lat

网格生成基础算法目录

latbin

网格生成算法的可执行文件目录

lm

自带的语言模型基础算法目录

lmbin

语音模型的可执行文件目录

nnet

nnet1 基础算法实现目录

nnetbin

 nnet1相关的算法可执行文件目录

nnet2

 nnet2 相关的基础算法实现目录

nnet2bin

nnet2 相关的算法可执行文件目录

nnet3

nnet3 相关基础算法实现目录

nnet3bin

nnet3 相关实现算法的可执行文件目录

online

online1 相关解码算法的实现目录

onlinebin

online1 相关解码器算法的可执行目录

online2

online2 相关解码器算法的实现目录

online2bin

online2 相关解码器算法的可执行目录

rnnlm

rnnlm 相关的语音模型基础算法实现目录

rnnlmbin

rnnlm 相关的语音模型的可执行目录

sgmm2

sgmm2 相关的子空间 GMM 基础算法实现目录

sgmm2bin

sgmm2 相关的子空间 GMM 基础算法可执行目录

tfrnnlm

Tensorflow rnnlm 基础算法目录

tfrnnlmbin

Tensorflow rnnlm 基础算法实现的可执行目录




3 实例目录结构


kaldi实例在egs文件夹下面,主要文件在s5下面。

 

目录

功能

conf

一些配置文件,例如MFCC的参数sample-frequency=8000,HMM的拓扑结构

data

存放语言模型、发音字典和音素信息等等

exp

包含相关log文件;模型训练完后,声学模型被存放在exp/mono0a里;解码测试输出到exp/mono0a/decode_test_yes

 input

发音词典lexicon.txt、音素集phones.txt、语音模型task.arpabo

local

一些准备的数据脚本,供顶层的脚本run.sh调用,如prepare_data.sh、prepare_lm.sh等

mfcc

特征提取,scp、ark文件

 steps

一些运行时调用的脚本,语音识别主要步骤,make_mfcc.sh、compute_cmvn_stats.sh、train_mono.sh、decode.sh

utils

一些运行时调用的脚本,协助处理,如任务管理、文件夹管理、数据复制等,prepare_lang.sh、fix_data_dir.sh、mkgraph.sh

cmd.sh

定义了训练任务提交的方式,SGE集群用queue.pl,单机用run.pl

path.sh

定义了训练脚本中所使用的若干环境变量的位置

run.sh

最顶层的运行脚本,集成了从资源下载、数据准备、特征提取、模型训练、解码等全部脚本,并给出统计结果的方法。

 

 

词典文件夹
data/local/dict

文件名

功能

注释

nonsilence_phones.txt

包含所有非静音的音素

音素

extra_questions.txt

构建音素的声学上下文决策树时会遇到的基本问题,每行对应一个聚类问题。

音素

optional_silence.txt

定义了用于填充词间静音的音素

SIL

silence_phones.txt

定义了所有可以表达无效语音内容的音素

SIL表示静音,SPN表示有声音但是无法识别的声音片段

集外词的发音被制定为SPN

lexicon.txt

发音词典(不带发音概率)

WAS W AA1 Z

lexiconp.txt

发音词典(带发音概率)

WAS 1.0 W AA1 Z

 

语言文件夹

data/lang_nosp

 

phones.txt

音素索引

 

words.txt

词索引

 

L.fst

发音词典生成的FST

 

L_disambig.fst

增加消歧义符之后的发音词典生成的FST

 

oov.int

集外词的索引

 

oov.txt

集外词的标识

 

topo

定义了每个音素的HMM拓扑结构

静音和噪音使用5个状态、

其他音素使用3状态

音素的属性文件夹

data/lang_nosp/phones

 

silence.txt

存储了所有静音音素的列表

SIL、SPN

align_lexicon.txt

发音词典,第一列的词重复使用了

 

context_indep.txt

所有上下文无关音素的列表

SIL、SPN

disambig.txt

所有消歧义符号的列表

#0、#1、#2.....#16

extra_questions.txt

构建音素的声学上下文决策树时会遇到的基本问题,每行对应一个聚类问题。(增加了音素位置标记,对静音音素的聚类方法进行了修改,用于音素上下文聚类)

 

nonsilence.txt

所有非静音、非消歧义符号的音素列表

没有SIL、SPN

optional_silence.txt

定义了用于填充词间静音的音素

SIL

sets.txt

定义了音素组

B_B B_E B_I B_S

roots.txt

定义了哪些音素共享上下文决策树的一个根节点

 

wdisambig

消歧义符号文本

#0

wdisambig_phones.int

消歧义符号音素的索引

347

wdisambig_words.int

消歧义符号词的索引

200004

word_boundary.txt

定义了每个音素的词位置

 

 

 

 

 

 

 

下期预告

 

AIBigKaldi(二)|  输入输出机制

 

往期精选

AI大语音(十四)——区分性训练
AI大语音(十三)——DNN-HMM
AI大语音(十二)——WFST解码器(下)
AI大语音(十一)——WFST解码器(上)

AI大语音(十)——N-gram语言模型
AI大语音(九)——基于GMM-HMM的连续语音识别系统
AI大语音(八)——GMM-HMM声学模型
AI大语音(七)——基于GMM的0-9语音识别系统
AI大语音(六)——混合高斯模型(GMM)
AI大语音(五)——隐马尔科夫模型(HMM)
AI大语音(四)——MFCC特征提取
AI大语音(三)——傅里叶变换家族
AI大语音(二)——语音预处理
AI大语音(一)——语音识别基础 

 

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

 

—————————————————————

​     

—————————————————————

 

投稿吧   | 留言吧

 

posted on 2020-12-10 09:05  AI大道理  阅读(646)  评论(0编辑  收藏  举报

导航