kaldi ark加载和写入模块

kaldiio的Python项目详细描述


卡尔迪奥

pypi支持的python版本构建状态codecov

用于读取和写入kaldi ark文件的纯python模块

简介

什么是ark和scp?

kaldi io是一个用纯python语言实现的io实用程序,用于kaldi中使用的几种文件格式,它们被命名为arkscparkscp用于存档kaldi中定义的一些对象,通常是kaldi的矩阵对象。

在本节中,我们将介绍arkscp的基本概念。关于文件io的详细信息,请参见http://kaldi asr.org/doc/io.html" rel="nofollow">http://kaldi asr.org/doc/io.html

kaldi:ark和copy中文件io的基本功能

ark是保存任何kaldi对象的存档格式。这个库主要支持kaldimatrix/kaldivector。 这是kaldimatrix的ark文件的一个例子:ark文件

如果您有kaldi,您可以将其转换为以下文本格式

# copy-feats <read-specifier> <write-specifier>
copy-feats ark:test.ark ark,t:text.ark

复制功能设计为与unix命令行具有高度相关性:

  1. ark可以在unix管道之间来回刷新。

     cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
    

    -表示标准输入流或输出流。

  2. unix命令可以用作读取说明符wsspecifier

     copy-feats ark:'gunzip -c some.ark.gz |' ark:some.ark
    
  3. < > >

    scp文件

    scp是一个文本文件,例如,

    uttid1 /some/where/feats.ark:123
    uttid2 /some/where/feats.ark:156
    uttid3 /some/where/feats.ark:245
    

    第一列uttid1表示话语id,第二列/some/where/feats.ark:123是kaldi格式的矩阵/向量的文件路径。冒号后面的数字是文件对象的起始地址。

    scp格式看起来非常简单,但有几个强大的功能。

    1. arkscp之间的相互转换

       copy-feats scp:foo.scp ark:foo.ark  # scp -> ark
       copy-feats ark:foo.ark ark,scp:bar.ark,bar.scp  # ark -> ark,scp
      
    2. unix命令可用于直接文件的insead路径< /P>

      例如,以下文件相当于第一个scp。

       uttid1 cat /some/where/feats.ark:123 |
       uttid2 cat /some/where/feats.ark:156 |
       uttid3 cat /some/where/feats.ark:245 |
      
    3. < > >

      wav.scp

      wav.scp是描述wave文件路径的scp

      uttid1 /some/path/a.wav
      uttid2 /some/path/b.wav
      uttid3 /some/path/c.wav
      

      wav.scp也可以作为普通scp文件嵌入unix命令。这通常用于转换kaldi配方中的文件格式。

      uttid1 sph2pipe -f wav /some/path/a.wv1 | 
      uttid2 sph2pipe -f wav /some/path/b.wv1 |
      uttid3 sph2pipe -f wav /some/path/c.wv1 |
      

      功能

      Kaldio支持:

      • 存档格式的读/写:ark、scp
        • 二进制/文本-浮点/双矩阵:dm,fm
        • 二进制/文本-浮点/双矢量:dv,fv
        • 加载用压缩矩阵:cm,cm~2,cm~3
        • 用于写入的压缩矩阵:支持所有压缩方法:1,2,3,4,5,6,7
        • 二进制/文本表示int vector,通常用于ali文件。
      • 通过管道读/写:例如"ark:cat feats.ark"
      • 阅读wav.scp/wav.ark

      不支持以下内容

      • 写入现有的SCP文件
      • NNET2/NNET3 EGS
      • 点阵文件

      类似项目

      安装

      pip install kaldiio
      

      用法

      kaldio没有区分每个kaldi对象的api,即。 kaldi matrixkaldi vector,不取决于它是二进制的还是文本的,还是压缩的, 可以由同一个api处理。

      readhelper

      readhelper支持对scpark的顺序访问。如果您需要随机访问,请使用kaldio.load\u scp

      • 读取矩阵scp
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      0
      • 阅读gziped ark
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      1
      • 读取wav.scp
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      2

      -v2.11.0:删除了wav选项。您可以加载wav.scp而无需任何附加参数。

      • 读取wav.scp和段
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      3
      • 从stdin中读取
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      4

      写入帮助

      • 使用scp在方舟中写入矩阵
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      5
      • 写入压缩矩阵
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      6
      • 以文本形式编写矩阵
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      7
      • 用gziped ark书写
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      8
      • 将矩阵写入stdout
      # copy-feats <read-specifier> <write-specifier>
      copy-feats ark:test.ark ark,t:text.ark
      
      9

      更多低级API

      writehelperreadhelper是以下api的高级包装器,用于支持kaldi样式的参数。

      装载柜

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      0
      • 加载ark可以加载ark的矩阵和矢量,也可以是文本和二进制。

      加载SCP

      加载scp创建"惰性dict",即 访问元素时,数据会加载到内存中。

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      1

      load\u scp创建的对象是类似于dict的对象,因此它具有dict的方法。

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      2

      按顺序加载(从v2.13.0开始)

      按顺序加载scpATOR"与加载柜相同。 如果不需要对每个元素进行随机访问 用它来迭代整个数据, 那么这个方法的执行速度可能比加载scp快。

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      3

      加载波形scp

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      4
      • v2.11.0:加载wav_scp现在不推荐使用。使用加载scp

      装载材料

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      5
      • 加载矩阵可以加载kaldi矩阵、kaldi向量和波

      保存方舟

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      6

      保存材料

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      7
      • 保存矩阵可以同时保存kaldi矩阵和kaldi向量

      像kaldi一样打开

      kaldio.open_like_kaldi是一个很有用的工具,如果您熟悉kaldi。此功能可以执行如下操作,

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      8

      例如,如果有gziped对齐文件,则可以将其加载为:

       cat test.ark | copy-feats ark:- ark,t:- | less # Show the contents in the ark
      
      9

      解析说明符

       copy-feats ark:'gunzip -c some.ark.gz |' ark:some.ark
      
      0

      欢迎加入QQ群-->: 979659372 Python中文网_新手群

      推荐PyPI第三方库


热门话题
java Slick2D鼠标单击在Windows 10中不起作用   java在多线程中使用titan graph的最佳实践是什么?   java以编程方式访问清单。主类MF   安卓区分对JavaSpring后端的web和本机应用程序请求   java StringTemplate getInstanceOf返回null   java InvalidDataAccessApiUsageException:未找到线程绑定请求:   编码在Java中只对查询键和参数进行url编码的最佳方法是什么?   java如何使用mavenjarplugin从自定义jar文件中排除METAINF文件夹   Java:引发异常后程序未崩溃   安卓如何通过文件名找到/res/raw文件夹中文件的资源id?   html Selenium Java与HTML5的拖放   java是否可以在不同的对象中使用单个输入?   java谷歌应用引擎cron作业后端   java如何将列表项的信息传递给新的列表活动?   java是否可以要求junit在进行测试之前运行一个命令?   在异常中提供附加信息的java可持续方法?   java可编辑JComboBox:使用快捷方式启动操作时获取当前值   java运行时错误“名称错误:applicationarbre/Main”   继承java如何获取超类方法来修改子类字段