其他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
一个平台无关的程序计时类 Timer
在 timer.h
中。
其他组件类函数有 simple-io-funcs.h
和 hash-list.h
,有更专门的用途。一些额外矩阵代码依赖的的组件函数和宏,多数是有专门用途的,在 kaldi-utils.h
中;这些包括字节交换,内存对齐和编译时的断言(对模板很有用)。