Kaldi语料的两种切分/组织方式及其处理

  • text中每一个文本段由一个音频索引(indexed by utterance)

    使用该方式的egs:librispeech、timit、thchs30、atc_en、atc_cn

    语料的组织形式为:

    一个音频(包含一个语句)对应一个文本(包含一个文本段)

    一个音频(包含一个语句)对应一个文本(包含多个文本段)中的一个文本段

  • text中每一个文本段由一个时间片索引(indexed by segment)

    • 使用该方式的egs:

      tedlium、atc0_comp_LDC94S14A

      时间片由segments文件指定,通常位于data/train, data/test, data/dev中

    • 处理方式:

      以tedlium为例,语料的组织形式为一个音频sph(包含多个语句)对应一个文本stm(包含多个文本段)

      stm,kaldi使用的一种文本组织形式(文本格式),tedlium的例子:

      AaronHuey_2010X 1 AaronHuey_2010X 223.12 232.68 <o,f0,female> we appropriated land for(2) trails and(2) trains to shortcut through the heart of the lakota nation <sil> the treaties were(2) out the window <sil> in response three tribes led by the lakota chief {SMACK} red cloud <sil> (AaronHuey_2010X-223.12-232.68-F0_F-S27)

      stm文件的格式:

      <file-name> <?> <speaker-name> <segment-begin> <segment-end> <LABEL> <TEXT> <segment>

      文本:db/TEDLIUM_release1/$set/stm/*.stm(其中包含了时间片信息)

      音频:db/TEDLIUM_release1/$set/sph/*.sph

      tedlium/s5/run.sh调用了local/prepare_data.sh,其中对stm文件进行格式化,包括去除显式的静音标注和生成segments文件

      segments文件的格式:

      <utterance-id> <recording-id> <segment-begin> <segment-end>

      其中,segment-begin和segment-end以秒为单位。它们指明了一段发音在一段录音中的时间偏移量。"recording-id" 和在"wav.scp"中使用的是同一个标识字符串。再次声明一下,这只是一个任意的标识字符串,你可以随便指定。

      Kaldi中隐含地对静音SIL进行处理,不需要显式标注。但是这并不意味着其他噪声不需要显式标注,如:


BRH


Breath


呼吸


CGH


Cough


咳嗽


NSN


Noise


噪声


SMK


Smack


拍击声


UM


UM



UHH


UH


在特征提取、在线训练、解码时需要判断语料是哪种组织方式,即寻找segments:

../steps/make_*.sh

../steps/nnet2/dump_bottleneck_features.sh

../steps/<online/>nnet*/align.sh

../steps/<online/>nnet*/decode.sh

../steps/online/nnet2/dump_nnet_activations.sh

../steps/online/nnet2/get_egs.sh

../steps/online/nnet2/get_egs*.sh

时间: 2024-08-14 18:09:57

Kaldi语料的两种切分/组织方式及其处理的相关文章

UIImage的两种加载方式

UIImage的两种加载方式 1.有缓存:读取后放入缓存中下次可直接读取,适用于图片较少且频繁使用. [UIImage imageNamed:@"文件名"]: 在缓存中由系统管理,当收到memoryWarning时会释放这些内存资源. 2.无缓存:用完就释放掉,参数传的是全路径,适用于图片较多较大的情况下. NSString *path = [[NSBundlemainBundle] pathForResource: @"1.png"ofType: nil]; [U

android环境下两种md5加密方式

在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来.虽然md5加密经常用,但是md5的加密原理我还真说不上来,对md5的认知目前仅仅停留在会使用的水平,想搞清楚还是要花点时间的,这是md5加密算法的相关介绍.本文主要介绍android平台下两种md5加密方式,分别为基于java语言的md5加密及ndk环境下基于c语言的md5加密. 下面代码为基于java语言的md5加密: public String getMD5

Linux驱动的两种加载方式过程分析

一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新编译和下载内核,效率较低.若采用静态加载的驱动较多,会导致内核容量很大,浪费存储空间. 动态加载利用了Linux的module特性,可以在系统启动后用insmod命令添加模块(.ko),在不需要的时候用rmmod命令卸载模块,采用这种动态加载的方式便于驱动程序的调试,同时可以针对产品的功能需求,进行

Form表单中method=post/get两种数据传输的方式的区别

Form提供了两种数据传输的方式—get和post,Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法,感兴趣的朋友可以了解下,或许对你学习get/post有所帮助 Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响.虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一些差异,但是了解二者的差异在以后的编程也会很有帮助的. Form中的get和post方法

python实现快速排序算法(两种不同实现方式)

# -*- coding: utf-8 -*- """ Created on Fri May 16 17:24:05 2014 @author: lifeix """ #快速排序 import sys import random length = 30 def qsort(arr,left,right): lp = left rp = right if lp == rp:return while True: while arr[lp] >=

Hibernate两种获得sessionFactory方式的区别

Hibernate 可以通过sessionFactory.openSession()和sessionFactory.getCurrentSession()来获得session,下面来浅说一下两者区别. [sessionFactory.openSession()]     通过session工厂sessionFactory.openSession()方法来获得一个session,每次都创建一个新的session出来,并且每次Hibernate都会打开数据库和应用程序的连接. [sessionFac

(总结)Nginx使用的php-fpm的两种进程管理方式及优化

PS:前段时间配置php-fpm的时候,无意中发现原来它还有两种进程管理方式.与Apache类似,它的进程数也是可以根据设置分为动态和静态的. php-fpm目前主要又两个分支,分别对应于php-5.2.x的版本和php-5.3.x的版本.在5.2.x的版本中,php-fpm.conf使用的是xml格式,而在新的5.3.x版本中,则是和php.ini一样的配置风格. 在5.2.x版本中,php-fpm.conf中对于进程管理号称是有两种风格,一种是静态(static)的,一种是类似于apache

Windows Azure VM的两种shut down 方式

今天在调查Azure的价格时,发现下面的语句,来自http://azure.microsoft.com/en-us/pricing/details/virtual-machines/ * If my deployed instance is in the "stopped" state, do I still get billed? If your instance is in the Stopped Deallocated state, it is not billed. If yo

Servlet 两种跳转方式

response.sendRedirect , // 重定向,服务器端将uri返回到客户端,客户端再次发送请求. RequestDispatcher  rd  =  getServletContext().getRequestDispatcher("/login.jsp"); rd.forward(request,response);  //跳转,直接从服务器端访问 uri Servlet 两种跳转方式