The Table concept

表(Table)是一个概念而不是一个实际的C++类。它是一个已知类型的对象的集合,并且用字符串(strings)索引。字符串必须是 tokens(不包含空格的非空字符串)。表的典型实例包括:

  • 特征文件(表示为Matrix<float>)的集合,由语句id (utterance id)索引
  • 转码文本(表示为std::vector<int32>)的集合,由语句id索引
  • 约束的MLLR变换(表示为Matrix<float>)的集合,由说话人id索引

在 Types of data that we write as tables, 我们对这些类型的表有更详细的处理;在这里我们只是解释一般原则和内部机理。表可以存在磁盘(或实际上,在管道里)以两种可能的格式:脚本文件(script file)或存档文件(archive)(见下面的 The Kaldi script-file format 和 The Kaldi archive format)。表相关的类和类型,见 Table types and related functions。

Table可以通过三种方式访问:TableWriter, SequentialTableReader和RandomAccessTableReader(还有RandomAccessTableReaderMapped是一个特例,后面会讲到)。这些都是类模板;它们不是基于 table对象的模板,而是基于 Holder类型(见下面, Holders as helpers to Table classes),可以告诉代码如何读写该类型的对象。为了打开 Table类型,你必须提供一个 wspecifier或 rspecifier的字符串(见下面,Specifying Table formats:wspecifiers and rspecifiers)来告诉代码表在磁盘上是如何存储的,同时提供各种其他指令。我们用一个示例代码来解释,这个代码读取特征,对其进行线性变换然后再写出:

std::string feature_rspecifier = "scp:/tmp/my_orig_features.scp", transform_rspecifier = "ark:/tmp/transforms.ark", feature_wspecifier = "ark,t:/tmp/new_features.ark"; // there are actually more convenient typedefs for the types below, // e.g. BaseFloatMatrixWriter, SequentialBaseFloatMatrixReader, etc. TableWriter<BaseFloatMatrixHolder> feature_writer(feature_wspecifier); SequentialTableReader<BaseFloatMatrixHolder> feature_reader(feature_rspecifier); RandomAccessTableReader<BaseFloatMatrixHolder> transform_reader(transform_rspecifier); for(; !feature_reader.Done(); feature_reader.Next()) { std::string utt = feature_reader.Key(); if(transform_reader.HasKey(utt)) { Matrix<BaseFloat> new_feats(feature_reader.Value()); ApplyFmllrTransform(new_feats, transform_reader.Value(utt)); feature_writer.Write(utt, new_feats); } }

这个设定的优点是访问表的代码可以把表中数据看做 generic maps或 lists。数据类型和读过程中的参数(e.g.容错率)可以通过 rspecifiers和 wspecifiers中的选项进行控制,而不必由调用代码进行处理;上面的例子中,“,t”选项表示以文本形式写数据。

一个理想的表可能是一个字符串到对象的映射。然而,只要我们不在表上做随机访问,即使同一字符串有多个入口(i.e.在写或顺序访问时,它更像是a list of pairs),代码也不会出现问题。

关于 Table类型读写特定类型的类型定义,参考 Specific Table types。

results matching ""

    No results matching ""