kaldi 的常用ark scp命令

本文介绍了Kaldi中两种重要的数据格式:.ark和.scp。.scp文件存储的是文本路径,指向.ark文件中对应的数据。.ark文件则包含实际的二进制数据,用于高效存储特征向量等。两者结合使用,便于数据的读取和处理。常见操作包括数据归一化、 lattice缩放等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例:

ark,s,cs:apply-cmvn --norm-means=true --norm-vars=false -- \
 utt2spk=ark:data/fbank/test/split1/1/utt2spk \
 scp:data/fbank/test/split1/1/cmvn.scp \
 scp:data/fbank/test/split1/1/feats.scp ark:- |' \
 'ark:|lattice-scale --acoustic-scale=10.0 \
 ark:- ark:- | gzip -c >exp/chain/tdnn/decode_test/lat.1.gz

初次见到这个,肯定要感慨这是什么鸟语?花香,通过查看资料才基本搞懂kaldi的一些常用命令。

说明:

archive(.ark)、script(.scp) : 是表格(table)一个‘表’就是一组有序的事物,前面是识别字符串(如句子的id),一个‘表’不是一个c++的对象,因为对应不同的需求(写入、迭代、随机读入)我们分别有c++对象来读入数据。Table有两种形式:“archive”和“script”文件。它们之间的差别在于:archive 包含实际的数据,而 script 文件则指出数据的具体位置。

.scp格式是text-only的格式,每行是个key(一般是句子的标识符(id))后接空格,接这个句子特征数据的路径 。

.ark格式可以是text或binary格式,(你可以写为text格式,命令行要加‘t’,binary是默认的格式)文件里面数据的格式是:key(如句子的id)空格后接数据。

.ark 和.scp 是 kaldi 中两种记录数 据的格式, .ark 是数据(二进制文件),scp 是记录对应 ark 的路径。 .ark 文件一般都是很大的(因为他们里面是真正的数据)。开头的ark:或scp:是要说明的格式,同名的 archive(.ark) 和 script(.scp) 文件代表的同一部分数据,注意,这 些命令行都有前缀”scp:” 或 “ark:”,kaldi 不会自己判断这到底是个 script 还是 archive 形式,这需要我们加前缀告诉 kaldi 这是什么格式的文件。对于 code 而言, 这两种格式对它来说都是一样的。

这两种格式都是‘表(table)’的概念。一个‘表’就是一组有序的事物,前面是 识别字符串(如句子的 id),一个‘表’不是一个 c++的对象,因为对应不同的需 求(写入、迭代、随机读入)我们分别有 c++对象来读入数据。

常见示例:

.scp格式 是 text-only 的格式,每行是个 key(一般是句子的标识符(id))后 接空格,接这个句子特征数据的路径 。
.ark格式 可以是 text 或 binary 格式,(你可以写为 text 格式,命令行要加‘t’, binary 是默认的格式)文件里面数据的格式是:key(如句子的 id)空格后接数据。

比如: raw_mfcc_dev.1.scp里的FNLP0_si1308 /Users/yelong/kaldi/egs/timit/s5/mfcc/raw_mfcc_test.3.ark:13意思是,打开存档(archive)文件,fseek()定位 到 13(字节),然后开始读数据。

wspecifiermeaninig
ark:foo.arkwrite to archive foo.ark
scp:foo.scpwrite to files using mapping in foo.scp
ark:-write archive to stdout
ark,tgzip -c >foo.gz
ark,t:-write text-form archive to stdout
ark,scp:foo.ark,foo.scpwrite archive and scp file (其实就是最上面两个的结合)
rspecifiermeaning
ark:foo.arkRead from archive foo.ark
scp:foo.scpRead as specified in foo.scp
ark:-read archive from stdin
ark:gunzip -c foo.gzunzip and read from foo.gz
ark,s,cs:-read archive from stdin …

最后一个,“s”排序,“cs”它将按照排序顺序被调用。archive上允许内存高效的随机访问。

### 使用 Kaldi 进行语音识别 #### 准备工作 为了利用 Kaldi 工具包执行语音识别任务,需先安装并配置好环境。Kaldi 是专为研究者和专业人士设计的开源工具集[^1]。 #### 获取预训练模型 对于初次使用者来说,可以从官方网站获取已经训练好的模型来快速上手。这些现成的模型能够帮助理解整个流程而无需从头开始训练自己的模型。 #### 数据准备 在实际应用中,通常需要准备好待处理的数据集。这包括音频文件及其对应的转录文本。数据的质量直接影响到最终的结果准确性。 #### 特征提取 通过命令行工具 `compute-mfcc-feats` 或其他指定方式计算梅尔频率倒谱系数(MFCC),这是常见的声学特征之一。此过程会将原始音频转化为适合后续分析的形式: ```bash compute-mfcc-feats --config=mfcc.conf scp:data/train/wav.scp ark:- | copy-feats ark:- ark,scp:exp/mfcc_train.ark,data/train/feats.scp ``` 上述脚本读取波形路径列表(`wav.scp`)作为输入,并保存生成的MFCC特征至目标位置。 #### 训练或加载模型 如果采用已有模型,则跳过训练阶段;若是自定义开发新模型,则要经历一系列复杂的参数调整与优化操作。这里假设使用的是官方提供的预训练模型。 #### 解码过程 完成以上准备工作之后就可以进入解码环节了。借助 lattice-free maximum mutual information (LF-MMI) 等算法实现最优路径搜索从而得到最可能的文字表达形式。具体可以通过如下指令启动解码程序: ```bash gmm-latgen-faster --max-active=7000 --beam=13.0 --lattice-beam=6.0 --acoustic-scale=0.1 --word-symbol-table=exp/dict/words.txt exp/tri3b/final.mdl data/lang/G.fst "ark:sphinx_featurize.sh --feat-type mfcc --data-dir=data/test --output-ark-path=/dev/stdout" ark,t:- | ``` 这段代码片段展示了如何调用 GMM-HMM 模型来进行实时解码的任务。 #### 后处理 最后一步是对输出结果做进一步整理和完善,比如去除冗余符号、拼接断句等,使得最终呈现给用户的文字更加自然流畅。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值