其他分享
首页 > 其他分享> > OfficialKaldi(十四)| 从命令行角度来看Kaldi的 I / O

OfficialKaldi(十四)| 从命令行角度来看Kaldi的 I / O

作者:互联网

此页面从命令行工具用户的角度描述了Kaldi中的I / O机制。

有关更多代码级概述,请参见Kaldi I / O机制

总览

非表I / O

我们首先描述“非表” I / O。这是指仅包含一个或两个对象的文件或流(例如,声学模型文件;转换矩阵),而不是由字符串索引的对象的集合。

为了说明上述概念,请确保$ KALDI_ROOT / src / bin在路径上,其中$ KALDI_ROOT是存储库的顶部,然后键入以下内容:

  回声'[0 1]'| 复制矩阵--

它将打印出一条日志消息和一些与该矩阵相对应的二进制数据。现在尝试:

  回声'[0 1]'| 复制矩阵--binary = false--

输出将如下所示:

#复制矩阵--binary = false--
复制矩阵--binary = false--
 [
  0 1]
LOG(copy-matrix:main():copy-matrix.cc:68)复制到-

尽管看起来矩阵和日志消息混合在一起,但是日志消息属于标准错误,因此不会传递到管道中。为了避免看到日志消息,您可以通过在命令行中添加2> / dev / null将stderr重定向到/ dev / null。

可以使用管道或使用Kaldi I / O的文件流机制连接Kaldi程序。这是一个管道示例:

回声'[0 1]'| 复制矩阵--| 复制矩阵--binary = false--

这将以文本形式输出矩阵(第一个copy-matrix命令转换为二进制形式,第二个转换为文本形式,这毫无意义)。您可以通过以下操作以更复杂的方式完成同一件事:

  复制矩阵'echo [0 1] |' '| copy-matrix --binary = false--'

这里没有理由这样做,但是当程序具有多个输入或输出,因此已经使用了stdin或stdout时,它有时会很有用。对于表尤其有用(请参阅下一节)。

表I / O

Kaldi具有特殊的I / O机制,用于处理由字符串索引的对象的集合。这样的示例是通过说话者ID索引的特征矩阵,或通过说话者ID索引的说话者自适应转换矩阵。索引集合的字符串必须为非空且无空格。有关更深入的讨论,请参见表概念

表可能以两种形式存在:“存档”或“脚本文件”。不同之处在于,存档实际上包含数据,而脚本文件指向数据的位置。

从表中读取的程序期望一个称为“ rspecifier”的字符串,该字符串表示如何读取索引数据,而写入表中的程序期望一个称为“ wspecifier”的字符串来写入它。这些是用于指定需要脚本文件还是归档文件的字符串,以及文件位置以及各种选项。rspecifier的常见类型包括“ ark:-”,这意味着从标准输入中以存档形式读取数据,或“ scp:foo.scp”,这意味着脚本文件foo.scp表示从何处读取数据。需要牢记的几点是:

表I / O(带范围)

现在可以从scp文件中指定矩阵的行范围和列范围。转储功能文件时,通常将它们表示为看起来像如下的scp文件:

 utt-00001 /some/dir/feats.scp:0
 utt-00002 /some/dir/feats.scp:16402
 ...

您可以通过添加行和列范围来修改此scp文件,其格式类似于MATLAB(除了从零开始的索引)。因此,例如,如果将其修改为:

 utt-00001 /some/dir/feats.scp:0[0:9]
 utt-00001 /some/dir/feats.scp:0[10:19]
 ...

前两行代表utt-00001的第0至9行以及第10至19行。您可以用类似的方式表示列索引:

 utt-00001 /some/dir/feats.scp:0[:,0:12]
 utt-00001 /some/dir/feats.scp:0[:,13:25]
 ...

将是该文件的0到12列以及13到25列。您还可以结合使用行索引和列索引:例如,

 utt-00001 /some/dir/feats.scp:0[10:19,0:12]

说话者对说话者和说话者对说话的地图。

许多Kaldi程序会使用发声到说话者和发话者到说话者的地图-称为“ utt2spk”或“ spk2utt”的文件。这些通常由命令行选项–utt2spk和–spk2utt指定。utt2spk映射具有以下格式

utt1 spk_of_utt1
utt2 spk_of_utt2
...

并且spk2utt映射具有以下格式

spk1 utt1_of_spk1 utt2_of_spk1 utt3_of_spk1
spk2 utt1_of_spk2 utt2_of_spk2
...

这些文件用于说话人调整,例如,查找哪个说话人对应于话语,或遍历说话人。由于大多数原因与设置Kaldi示例脚本的方式以及将数据分为多个部分的方式有关,因此重要的是要确保发话者对讲者图中的讲话者处于排序顺序(请参阅数据准备)。)。无论如何,这些文件实际上都被视为存档,因此,您将看到命令行选项,例如–utt2spk = ark:data / train / utt2spk。您将看到这些文件符合以下格式的通用存档格式:“ <key1> <data> <newline> <key2> <data> <newline>”,在这种情况下,数据为文本格式。在代码级别,utt2spk文件被视为包含字符串的表,而spk2utt文件被视为包含字符串列表的表。

标签:文件,--,OfficialKaldi,矩阵,命令行,Kaldi,foo,scp
来源: https://www.cnblogs.com/AIBigTruth/p/14119227.html