伸展树是一种二叉平衡树,普通搜索树在构造序列不是很理想的情况下,访问复杂度会退化。相比于较高级的一点平衡树,伸展树实现上还是比较简单的,只有左旋和右旋两个操作。这种数据结构的优化思路是利用数据访问的局部性,将上次访问的数据节点旋转到根节点,而不破坏平衡树的结构。

阅读全文 »

GMM的传统建模中,为了避免建模单元参数过多,默认只存储协方差矩阵的对角形式。实际上这里做了一个隐性的假设,就是数据各个维度之间是不相关的,显然,这一点并不成立,但是如果对于每一个GMM建模单元都采取协方差矩阵表示方差的话,模型的整体参数量会急剧增大,所以,对于这一问题,一般有以下两种方式解决:

  • 特征方案,通过去相关算法,使得数据分布更适合用对角矩阵建模,比如DCT和LDA算法
  • 模型方案,根据生成观测的不同状态,使用不同的变换算法

Semi-Tied方法属于第二种,是基于state-specific rotation提出的一种通过在状态之间共享变换矩阵,解决该问题的方式。

阅读全文 »

论文参考经典之作“Speech Recognition With Weighted Finite-State Transducers”,网上随便就能搜到。

阅读全文 »

对于一般决策树而言,每一次的最优划分,是要找到一个标准,使得在这种标准之下进行的划分获取的信息增益最大,这里的信息增益一般表示划分之后信息熵的增量。在ASR中,决策树的划分标准是获取最大似然提升,在GMM模型中,对于一个状态集合$S$,其似然表示为:

阅读全文 »

用Python调用C模块容易发生的就是参数类型不一致的问题,比如,C函数接收传入指针,python端怎么办?这里使用swig作为一种备选方案,处理方式不一定明智简洁,旨在说明可行性。

阅读全文 »

Linux上没装matlab,没有audition,开源的audacity程序没法看语谱(找到看的方法了……),所以当时就简单写了一个,勉强能看。

阅读全文 »

pyfst是对openfst的python API封装,学习fst过程中,实现代价相对较低,安装的时候只要先装openfst,再pip install pyfst就OK了,但是,问题就出在这俩步上

阅读全文 »

用NDK很久了,玩一玩交叉编译,其实使用ndk-buildAndroid.mkApplication.mk文件也可以做这件事,但是因为NDK自带了toolchain的脚本,配置很方便,简单的编译可以依赖cmd了。

阅读全文 »

最近搞项目期间需要频繁的操作数据文件,之前都是用C进行操作,转到java的时候出现了一点小问题:
在Android平台上进行wave的特征重构,重构的wave文件希望使用C直接输入,因为这部分代码在PC上已经验证通过了。Android的话,Application的Context本身提供了openFileInputopenFileOutput,用于创建,写入存在目录/data/data/package_name/files/里面的文件。所以如果希望java能够读取C的输出文件的话,C在JNI部分的输出目录也应该是上面这个。

阅读全文 »