如何自己创建一个小型的ASR(语言识别)系统

本文档逐步介绍了如何使用Kaldi工具包为零基础的初学者构建一个简单的ASR系统,重点是使用自己的音频数据。内容涵盖Kaldi的安装、环境配置、数据准备、脚本创建等关键步骤,最终实现语音识别和解码。通过跟随教程,读者将学会如何使用Kaldi处理音频数据,创建和训练模型,并得到解码结果。
摘要由CSDN通过智能技术生成

本人对原网址的内容进行了翻译以及一些自己的理解和小结
原文网址:http://kaldi-asr.org/doc/kaldi_for_dummies.html

目录

1.介绍
2.环境配置
3.下载KALDI
4.kaldi目录介绍
5.具体的项目工程
6.数据准备
7.工程最后一步
8.running脚本的创建
9.得到结果
10.总结

1.介绍

这个教程一步一步的教零基础初学者如何在kaldi工具箱上创建一个简单的ASR(自动语音识别)系统。使用自己的录制音频数据。你将学习如何安装Kaldi,如何使其工作,以及如何使用你自己的音频数据运行ASR系统。运行结束后你会的得到你的第一个语音解码结果。
首先 - 了解Kaldi究竟是什么,为什么你应该这样去使用它而不是别的东西。Kaldi需要扎实
的语音识别相关的和了解ASR系统的一般知识。它也可以很好的了解脚本语言的基础知识(bash, perl,
python)。C++也许在未来用的到(可能你会想要在源代码中进行一些修改)
To read:
http://kaldi.sourceforge.net/about.html
http://kaldi.sourceforge.net/tutorial_prereqs.html

2.环境配置

规则一:使用linux。虽然也可以在Windows上运行Kaldi,但发现大多数人说Linux在完成工作时会
有更少的问题。当你的Linux运行正确的,请打开一个终端,并安装一些必要的东西(如果你还没有安装):

(has to be installed)-必须安装
atlas – automation and optimization of calculations in the field of
linear algebra,
autoconf – automatic software compilation on different operating
systems,
automake – creating portable Makefile files,
git – distributed revision control system,
libtool – creating static and dynamic libraries,
svn – revision control system (Subversion), necessary for Kaldi
download and installation,
wget – data transfer using HTTP, HTTPS and FTP protocols,
zlib – data compression,

(probably has to be installed)-可能要安装
awk – programming language, used for searching and processing
patterns in files and data streams,
bash – Unix shell and script programming language,
grep – command-line utility for searching plain-text data sets for
lines matching a regular expression,
make – automatically builds executable programs and libraries from
source code,
perl – dynamic programming language, perfect for text files
processing.
完成。 操作系统和所有必要的Linux工具都准备好了。

3.kaldi的下载

安装过程按照下述网址步骤安装
需要注意的是:第一条指令:sudo apt-get install autoconf automaker gcc g++ libtool subversion gawk 中的automaker改为automake
跟着下面的步骤:https://zhuanlan.zhihu.com/p/26464775

4.kaldi目录结构

尝试确认特定的Kaldi组件的放置位置。 请阅读每个“README”文件,你会发现它会很有用。
‘kaldi’ - 主要Kaldi目录都包含在里面
‘egs’ – 示例脚本允许您快速构建ASR系统超过30个流行的语音语料库(文件被附带在每个工程上)
‘misc’ – 额外的工具和用品。
‘src’ – Kaldi 源代码
‘tools’ – 有用的组件和外部工具
‘windows’ – 使用Windows运行Kaldi的工具。

最重要的目录显然是“egs”。 在这里你将创建您自己的ASR系统。

5.具体的项目工程

  1. 对于本教程的目的,想象你和我一样有相同的一组数据(如6.1节所述。音频数据部分)。然后尝试“模仿”我所做的每一个动作在建立你自己的项目的时候。如果你没有任何音频数据或者你想以不同的方式去完成该项目,随时记录你自己的步骤- 这将会学到更多的经验在使用ASR系统上。下面开始了。

你的前提:你有一些只包含口语数字的音频数据(zero, one, two…)至少是包含了几个说话者的。每
个音频文件是一个完整的英语句子(e.g. ‘one, nine, five’).

你的目的:你想把你的数据分成train和test集,建立一个ASR系统,训练它,测试它并得到一些解码结果。

你的首要任务:首先创建一个 'digits’文件夹 在 kaldi-trunk/egs/ 目录下.你会把所有与你的项目相关的东西放置的的地方。

6.数据准备

6.1.AUDIO DATA(音频数据)

假设你想要建立一个基于你自己音频数据的ASR系统。举个例子–让它变为100个文件形式。文件的格式是WAV。每个文件包含三个英语数字的语音的录音,一个接着一个。音频文件的命名的方法如下所示:e.g. 1_5_6.wav,这个形式意味着语音句子是’one, five, six’。放在可辨认的文件夹下代表特定的说话人在特定的语句下的音频(有可能的录音情况是同一个人,但在两个不同的录音环境下,也许有噪声的情况-把它们放进不同的文件夹内)。所以总结一点:我的具体数据如下设置的:

  • 10 不同的说话者 (ASR 系统测试和训练都要分不同的人,人越多效果越好)
  • 每个说话者说十个句子
  • 100 个句子 (100 .wav 文件被放置在10个文件夹中,每个文件夹代表着特定的说话人。每个文件夹中有 10 个.wav文件.)
  • 300 个词语(从零到九的数字),
  • 每个句子或者话语包含亮3个词语。

无论你开始的数据是什么,调整我的例子对你特定的案件。注意大数据的设置和复杂的语法-先从一些简单的开始。在这个案例中只包含英语数字的句子是完美的。

TASK:

去kaldi/egs/digits 目录下 创建一个 'digits_audio’文件夹. 在 kaldi/egs/digits/digits_audio 目录下创建两个文件夹:‘train’ and ‘test’.选择一个说话者去做为‘测试集’. 使用说话者的 ‘speakerID’ 作为kaldi-trunk/egs/digits/digits_audio/test 下的一个新文件夹的名字。然后将关于说话者的音频信息全部放到这个文件夹内。.将剩下9个说话者的信息放在‘训练集’的文件夹内-这将作为你的训练的数据。也要在里面分别创建9个说话人的子文件夹和上面一样。

6.2.ACOUSTIC DATA(声学数据)

现在你必须创建一些文本文件来让Kaldi进入与你的音频数据进行对应。 将这些文件视为“必须”
要做的”。您将在本节(以及“语言数据”部分中)中创建的每个文件都可以视为包含一定数量的字符串(每个字符串换行)的文本文件。这些字符串需要排序。如果遇到任何排序问题,可以使用Kaldi脚本进行检查(utils / validate_data_dir.sh)和修复(utils / fix_data_dir.sh)数据顺序(至关重要).对于你的信息 - utils目录将被附加到你的项目的工具附件部分.

TASK:
在 kaldi-trunk/egs/digits 目录下, 创建一个文件夹 ‘data’. 然后分别创建 ‘test’ and ‘train’ 子文件夹放在里面. 然后又分别文件夹中放置如下的文件。

a.) spk2gender
这个文档包含了说话者性别的信息. 和我们所想的一样, ‘speakerID’
是每个说话者的名字(在这个例子中它也可以是 ‘recordingID’ - 每个说话者只有一个音频数据文件夹 从一个录音会话中.在我的例子中有5个男的和5个女的 (f = female, m = male).

PATTERN:
----- exemplary spk2gender starts -----
july f
cristine f
dad m
josh m

and so on…

----- exemplary spk2gender ends -----

b.) wav.scp
这个文件将每个会话与一个与之相关的音频文件连接起来这个话语(在特定的录音期间 一个人说了一句话) .

PATTERN: <full_path_to_audio_file>
----- exemplary wav.scp starts -----
july_1_2_5 /home/{user}/kaldi-
trunk/egs/digits/digits_audio/train/july/1_2_5.wav
july_6_8_3 /home/{user}/kaldi-
trunk/egs/digits/digits_audio/train/july/6_8_3.wav
dad_4_4_2 /home/{user}/kaldi-
trunk/egs/digits/digits_audio/train/dad/4_4_2.wav

and so on…

----- exemplary wav.scp ends -----

c.) text
该文件包含与其文本匹配的每个话语转录。

PATTERN: <text_transcription>
----- exemplary text starts -----
july_1_2_5 one two five
july_6_8_3 six eight three
dad_4_4_2 four four two

and so on…

----- exemplary text ends -----

d.) utt2spk
这个文件告诉我们在ASR系统中,哪个会话属于特定的说话者。

PATTERN:
----- exemplary utt2spk starts -----
july_1_2_5 july
july_6_8_3 july
dad_4_4_2 dad

and so on…

----- exemplary utt2spk ends -----

e.) corpus.txt
这个文件是有点稍微不同。 In kaldi/egs/digits/data 中创建另一个文件夹 ‘local’.
在kaldi/egs/digits/data/local文件夹中创造一个 corpus.txt文件。该文件夹包含了ASR系统中单一音频到文字的转换。(在我们的例中在将会有100个音频文件对应转换的文字).

PATTERN: <text_transcription>----- exemplary corpus.txt starts -----
one two five
six eight three
four four two

and so on…

----- exemplary corpus.txt ends -----

6.3 语言模型

这个部分与语言模型文件有关,需要知道哪一些文件必须去做。具体语法的细节在这个网址:http://kaldi.sourceforge.net/data_prep.html(每个文件都是精确的描述)。也可以随意浏览一下‘egs’里面的脚本文件。
TASK:

在kaldi/egs/digits/data/local 的目录下, 创建‘dict’文件夹. 然后在创建 ‘test’ 和 ‘train’ 子文件夹放在里面. 在kaldi/egs/digits/data/local/dict下创建如下的文件:

a.) lexicon.txt
这个文件包含了你字典里的每一个单词和它的‘音素的对应’(taken from /egs/voxforge)
PATTERN: <phone 1> <phone 2> …
----- exemplary lexicon.txt starts -----
!SIL sil
spn
eight ey t
five f ay v
four f ao r
nine n ay n
one hh w ah n
one w ah n
seven s eh v ah n
six s ih k s
three th r iy
two t uw
zero z ih r ow
zero z iy r ow
----- exemplary lexicon.txt ends -----

b.) nonsilence_phones.txt
此文件列出您的项目中存在的非沉默音素(nonsilence phones)。
PATTERN:
----- exemplary nonsilence_phones.txt starts -----
ah
ao
ay
eh
ey
f
hh
ih
iy
k
n
ow
r
s
t
th
uw
w
v
z
----- exemplary nonsilence_phones.txt ends -----

c.) silence_phones.txt
这个文件列出了沉默音素(silence phones)。

PATTERN:
----- exemplary silence_phones.txt starts -----
sil
spn
----- exemplary silence_phones.txt ends -----

d.) optional_silence.txt
这个文件列出来一些可选择的沉默静音(optional silence phones)

PATTERN:
----- exemplary optional_silence.txt starts -----
sil
----- exemplary optional_silence.txt ends -----

7.工程最后一步

运行脚本创建之前的最后一章。 您的项目结构将完成。

7.1 工具附件
您需要添加必要的Kaldi工具,广泛应用于示例性脚本。

TASK:
从kaldi/egs/wsj/s5文件夹中复制两个文件夹(整个目录) ‘utils’ 和 ‘steps’ - 然后把它们放进 kaldi/egs/digits目录下.

7.2 打分脚本

这个脚本将帮助你获得解码结果。

TASK:
kaldi/egs/voxforge/local复制文件 score.sh到你相同项目的文件夹内 (kaldi-trunk/egs/digits/local).

7.3 配置文件

没有必要创建配置文件,但它对将来来说是一个的好习惯。

TASK:
I在kaldi/egs/digits内创建一个文件夹 ‘conf’. 在kaldi/egs/digits/conf文件夹内创建以下两个文件夹 (一些解码模型的配置和mfcc特征提取的过程-来自/egs/voxforge文件内):

a.) decode.config
----- exemplary decode.config starts -----
first_beam=10.0
beam=13.0
lattice_beam=6.0
----- exemplary decode.config ends -----
b.) mfcc.conf
----- exemplary mfcc.conf starts -----
–use-energy=false
----- exemplary mfcc.conf ends -----

7.4 SRILM的安装

你也需要安装语言模型工具使用在例子中-SRI语言模型工具箱(SRILM)

SRILM下载网址如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值