其他Kaldi组件

本页给出了 Kaldi 代码中用到的各种类型的组件函数。

这里不包括已经在其他章节分析了的重要组件,如 matrix library, I/O, logging and error reporting, and command-line parsing。

Text utilities

text-utils.h 中是各种操作字符串的函数,多用于解析命令行。重要的几个包括模板函数 CnoverStringToInteger()和为 float 和 double 重载后的 ConvertStringToReal()。还有模板 SplitStringToIntegers()输出时整型向量,和 SplitStringToVectors()将字符串切分成字符串向量。

STL utilities

stl-utils.h 中是操作STL类型的模板函数。常用的一个是 SortAndUniq(),给向量排序并去重(对任意类型)。函数 CopySetToVector() 复制 set 中元素到 vector 中,属于在sets, vectors 和 maps 之间移动数据的一大类函数中的一个(见 stl-utils.h 中的列表)。还有哈希函数类 VectorHasher(用于整型向量)和 StringHasher(用于字符串);它们和STL的 unordered_map 和 unordered_set 模板一起使用。另一个常用函数是 DeletePointers(),删除 std::vector 类型的指针,将其设置为 NULL。

Math utilities

kaldi-math.h 中除了提供一些标准 #defines 以防它们不在系统头文件 math.h 中,还有其他的数学通用函数。这些包括比较重要的:

  • 随机数生成函数:RandInt(), RandGuass(), RandPoisson()
  • LogAdd()LogSub()
  • 测试和判断数学上近似相等的函数,i.e.ApproxEqual(),AssertEqual(),AssertGeq(), AssertLeq()

Other utilities

const-integer-set.h 包含了一个存储整型集合的,允许快速查询的 ConstIntegerSet类。需要说明的是该对象在初始化后不能再被改动。这用在了e.g.决策树代码中。根据集合中的整数类型,它们作为 vector 或整型向量被存储。

一个平台无关的程序计时类 Timertimer.h中。

其他组件类函数有 simple-io-funcs.hhash-list.h,有更专门的用途。一些额外矩阵代码依赖的的组件函数和宏,多数是有专门用途的,在 kaldi-utils.h中;这些包括字节交换,内存对齐和编译时的断言(对模板很有用)。