zoukankan      html  css  js  c++  java
  • 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大道理”,选择“关注”公众号

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

    ​     

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

    投稿吧   | 留言吧

  • 相关阅读:
    预防新型冠状病毒科普宣传网站
    四则运算
    结对审查
    最大子段和
    单元自动测试Junit
    浅谈过去,畅想未来
    第一次的结对编程
    代码审查
    单元测试
    junit4单元测试
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/14112028.html
Copyright © 2011-2022 走看看