操作系统 : Ubutu18.04_x64

gcc版本 :7.4.0

数据准备及训练

数据地址: http://www.openslr.org/18/

在 egs/thchs30/s5 建立 thchs30-openslr 文件夹,然后把三个文件解压在了该文件夹下:

[mike@local thchs30-openslr]$ pwd
/home/mike/src/kaldi/egs/thchs30/s5/thchs30-openslr
[mike@local thchs30-openslr]$ tree -L
.
├── data_thchs30
│ ├── data
│ ├── dev
│ ├── lm_phone
│ ├── lm_word
│ ├── README.TXT
│ ├── test
│ └── train
├── resource
│ ├── dict
│ ├── noise
│ └── README
└── test-noise
├── 0db
├── noise
├── noise.scp
├── README
├── test.scp
└── utils directories, files
[mike@local thchs30-openslr]$

进入 s5 目录,修改脚本:

修改cmd.sh脚本,把原脚本注释掉,修改为本地运行:

export train_cmd=run.pl
export decode_cmd="run.pl --mem 4G"
export mkgraph_cmd="run.pl --mem 8G"
export cuda_cmd="run.pl --gpu 1"

修改run.sh脚本,需要修改两个地方(cpu并行数及thchs30数据目录):

n=      #parallel jobs

#corpus and trans directory
#thchs=/nfs/public/materials/data/thchs30-openslr
thchs=/home/mike/src/kaldi/egs/thchs30/s5/thchs30-openslr

执行 run.sh 即可开始训练。

查看训练效果(比如看tri1的效果) :

$ cat tri1/decode_test_word/scoring_kaldi/best_wer
%WER 36.06 [ / , ins, del, sub ] exp/tri1/decode_test_word/wer_10_0.

在线识别

1、安装 portaudio

cd tools
./install_portaudio.sh

2、编译相关工具

cd ..
cd src
make ext

3、建立目录结构并同步识别模型

从voxforge把online_demo拷贝到thchs30下,和s5同级,online_demo建online-data和work两个文件夹。 online-data下建audio和models,audio放要识别的wav,models建tri1,将s5下/exp/下的tri1下的 final.mdl 和 35.mdl 拷贝过去,把s5下的exp下的tri1下的graph_word里面的 words.txt 和 HCLG.fst 也拷过去。

模型同步脚本:

mike@local:online_demo$ cat 1_tri1.sh
#! /bin/bash set -v srcDir="/home/mike/src/kaldi/egs/thchs30/s5/exp/tri1"
dst="/home/mike/src/kaldi/egs/thchs30/online_demo/online-data/models/tri1/"
echo $dst
rm -rf $dst/*.*
cp $srcDir/final.mdl $dst
cp $srcDir/35.mdl $dst
cp $srcDir/graph_word/words.txt $dst
cp $srcDir/graph_word/HCLG.fst $dst
echo "done" mike@local:online_demo$

4、修改脚本

注释如下代码:

#if [ ! -s ${data_file}.tar.bz2 ]; then
# echo "Downloading test models and data ..."
# wget -T -t $data_url; # if [ ! -s ${data_file}.tar.bz2 ]; then
# echo "Download of $data_file has failed!"
# exit
# fi
#fi

修改模型:

ac_model_type=tri1

修改识别代码:

    simulated)
echo
echo -e " SIMULATED ONLINE DECODING - pre-recorded audio is used\n"
echo " The (bigram) language model used to build the decoding graph was"
echo " estimated on an audio book's text. The text in question is"
echo " \"King Solomon's Mines\" (http://www.gutenberg.org/ebooks/2166)."
echo " The audio chunks to be decoded were taken from the audio book read"
echo " by John Nicholson(http://librivox.org/king-solomons-mines-by-haggard/)"
echo
echo " NOTE: Using utterances from the book, on which the LM was estimated"
echo " is considered to be \"cheating\" and we are doing this only for"
echo " the purposes of the demo."
echo
echo " You can type \"./run.sh --test-mode live\" to try it using your"
echo " own voice!"
echo
mkdir -p $decode_dir
# make an input .scp file
> $decode_dir/input.scp
for f in $audio/*.wav; do
bf=`basename $f`
bf=${bf%.wav}
echo $bf $f >> $decode_dir/input.scp
done
# online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85\
# --max-active=4000 --beam=12.0 --acoustic-scale=0.0769 \
# scp:$decode_dir/input.scp $ac_model/model $ac_model/HCLG.fst \
# $ac_model/words.txt '1:2:3:4:5' ark,t:$decode_dir/trans.txt \
# ark,t:$decode_dir/ali.txt $trans_matrix;;
online-wav-gmm-decode-faster --verbose=1 --rt-min=0.8 --rt-max=0.85 --max-active=4000 \
--beam=12.0 --acoustic-scale=0.0769 --left-context=3 --right-context=3 \
scp:$decode_dir/input.scp $ac_model/final.mdl $ac_model/HCLG.fst \
$ac_model/words.txt '1:2:3:4:5' ark,t:$decode_dir/trans.txt \
ark,t:$decode_dir/ali.txt $trans_matrix;;

5、执行语音识别

将声音文件复制到 online-data/audio/ 目录,然后运行 run.sh 执行识别操作。

测试文本:

自然语言理解和生成是一个多方面问题,我们对它可能也只是部分理解。

识别效果如下:

mike@local:online_demo$ ls online-data/audio/
A1_00.wav
mike@local:online_demo$ ./run.sh SIMULATED ONLINE DECODING - pre-recorded audio is used The (bigram) language model used to build the decoding graph was
estimated on an audio book's text. The text in question is
"King Solomon's Mines" (http://www.gutenberg.org/ebooks/2166).
The audio chunks to be decoded were taken from the audio book read
by John Nicholson(http://librivox.org/king-solomons-mines-by-haggard/) NOTE: Using utterances from the book, on which the LM was estimated
is considered to be "cheating" and we are doing this only for
the purposes of the demo. You can type "./run.sh --test-mode live" to try it using your
own voice! online-wav-gmm-decode-faster --verbose= --rt-min=0.8 --rt-max=0.85 --max-active= --beam=12.0 --acoustic-scale=0.0769 --left-context= --right-context= scp:./work/input.scp online-data/models/tri1/final.mdl online-data/models/tri1/HCLG.fst online-data/models/tri1/words.txt :::: ark,t:./work/trans.txt ark,t:./work/ali.txt
File: A1_00
自然 语言 理解 和 生产 是 一个 多方面 挽 起 我们 对 它 可能 也 只是 部分 礼节 ./run.sh: 行 : online-data/audio/trans.txt: 没有那个文件或目录
./run.sh: 行 : gawk: 未找到命令
compute-wer --mode=present ark,t:./work/ref.txt ark,t:./work/hyp.txt
WARNING (compute-wer[5.5.~-85d1a]:Open():util/kaldi-table-inl.h:) Failed to open stream ./work/ref.txt
ERROR (compute-wer[5.5.~-85d1a]:SequentialTableReader():util/kaldi-table-inl.h:) Error constructing TableReader: rspecifier is ark,t:./work/ref.txt [ Stack-Trace: ]
/data/asr/kaldi_full/src/lib/libkaldi-base.so(kaldi::MessageLogger::LogMessage() const+0xb42) [0x7fce5ef61692]
compute-wer(kaldi::MessageLogger::LogAndThrow::operator=(kaldi::MessageLogger const&)+0x21) [0x55bb3a782299]
compute-wer(kaldi::SequentialTableReader<kaldi::TokenVectorHolder>::SequentialTableReader(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0xc2) [0x55bb3a787c0c]
compute-wer(main+0x226) [0x55bb3a780f60]
/lib/x86_64-linux-gnu/libc.so.(__libc_start_main+0xe7) [0x7fce5e3cbb97]
compute-wer(_start+0x2a) [0x55bb3a780c5a] kaldi::KaldiFatalError
mike@local:online_demo$

可以看到,识别效果比较差。

本文中涉及训练数据及测试示例地址: https://pan.baidu.com/s/1OdLkcoDPl1Hkd06m2Xt7wA

可关注微信公众号后回复 19102201 获取提取码。

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2019/20191022_kaldi使用thchs30数据进行训练并执行识别操作.rst

kaldi使用thchs30数据进行训练并执行识别操作的更多相关文章

  1. SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

    原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...

  2. 跟我一起读postgresql源码(七)——Executor(查询执行模块之——数据定义语句的执行)

    1.数据定义语句的执行 数据定义语句(也就是之前我提到的非可优化语句)是一类用于定义数据模式.函数等的功能性语句.不同于元组增删査改的操作,其处理方式是为每一种类型的描述语句调用相应的处理函数. 数据 ...

  3. Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis: Actively and Incrementally如何使用尽可能少的标注数据来训练一个效果有潜力的分类器

    作者:AI研习社链接:https://www.zhihu.com/question/57523080/answer/236301363来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  4. 迁移学习算法之TrAdaBoost ——本质上是在用不同分布的训练数据,训练出一个分类器

    迁移学习算法之TrAdaBoost from: https://blog.csdn.net/Augster/article/details/53039489 TradaBoost算法由来已久,具体算法 ...

  5. 数据仓库之抽取数据:通过openrowset执行存储过程

    原文:数据仓库之抽取数据:通过openrowset执行存储过程 在做数据仓库时,最重要的就是ETL的开发,而在ETL开发中的第一步,就是要从原OLTP系统中抽取数据到过渡区中,再对这个过渡区中的数据进 ...

  6. 使用 TensorBoard 可视化模型、数据和训练

    使用 TensorBoard 可视化模型.数据和训练 在 60 Minutes Blitz 中,我们展示了如何加载数据,并把数据送到我们继承 nn.Module 类的模型,在训练数据上训练模型,并在测 ...

  7. LUSE: 无监督数据预训练短文本编码模型

    LUSE: 无监督数据预训练短文本编码模型 1 前言 本博文本应写之前立的Flag:基于加密技术编译一个自己的Python解释器,经过半个多月尝试已经成功,但考虑到安全性问题就不公开了,有兴趣的朋友私 ...

  8. 大数据学习day23-----spark06--------1. Spark执行流程(知识补充:RDD的依赖关系)2. Repartition和coalesce算子的区别 3.触发多次actions时,速度不一样 4. RDD的深入理解(错误例子,RDD数据是如何获取的)5 购物的相关计算

    1. Spark执行流程 知识补充:RDD的依赖关系 RDD的依赖关系分为两类:窄依赖(Narrow Dependency)和宽依赖(Shuffle Dependency) (1)窄依赖 窄依赖指的是 ...

  9. 深度学习原理与框架-图像补全(原理与代码) 1.tf.nn.moments(求平均值和标准差) 2.tf.control_dependencies(先执行内部操作) 3.tf.cond(判别执行前或后函数) 4.tf.nn.atrous_conv2d 5.tf.nn.conv2d_transpose(反卷积) 7.tf.train.get_checkpoint_state(判断sess是否存在

    1. tf.nn.moments(x, axes=[0, 1, 2])  # 对前三个维度求平均值和标准差,结果为最后一个维度,即对每个feature_map求平均值和标准差 参数说明:x为输入的fe ...

随机推荐

  1. 如果你不了解Java的JVM,那真的很难进BAT一线大厂!

    前言 对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.我们不能为了面试而面试,但是学习会这些核心知识你必定会成为面试 ...

  2. plsql修改某一行数据

    plsql修改某一行数据时, 在查询语句后面加上for update,再点击

  3. 一段简单的关于字符串的 Java 代码竟考察了这么多东西

    下面的代码运行结果是什么?解释一下为什么会有这些差异. String s1 = "hello";String s2 = s1 + ",world";String ...

  4. Python提升“技术逼格”的6个方法

    1 列表生成式和生成器 from numpy import randoma = random.random(10000) lst = []for i in a: lst.append(i * i) # ...

  5. springcloud 微服务分布式 框架源码 activiti工作流 前后分离

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

  6. Android 开发凉了吗!

    昨天我拿了本<安卓开发大全>的书,把它放进了冰箱,你猜怎么样? 它凉了. 记得2013年的时候,安卓崛起,一夜之间遍地谈论安卓这个奇怪的机器人. 安卓受宠的原因,主要围绕着: 1 应用商城 ...

  7. Java面试题_第三阶段(Spring、MVC、IOC、AOP、DI、MyBatis、SSM、struts2)

    1.1 何为Spring Bean容器?Spring Bean容器与Spring IOC 容器有什么不同吗? 答:1)用于创建bean对象,管理bean对象的那个容器. 2)Spring IOC 容器 ...

  8. CentOS7下部署java+tomcat+mysql项目及遇到的坑

    CentOS 7 下安装部署java+tomcat+mysql 前置:CentOS7安装:https://jingyan.baidu.com/article/b7001fe1d1d8380e7382d ...

  9. 【STM32H7教程】第33章 STM32H7的定时器应用之TIM1-TIM17的中断实现

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第33章       STM32H7的定时器应用之TIM1-T ...

  10. HttpRunner学习2--用例格式和简单使用

    前言 HttpRunner中,测试用例支持两种文件格式:YAML 和 JSON.两种格式的用例是完全等价的,对于相同的信息内容,使用 YAML /JSON 得到的测试结果和报告也是一致的. 本人环境: ...