精华内容
下载资源
问答
  • kaldi tutorial 中文翻译

    千次阅读 2017-07-17 15:05:43
    kaldi教程 pdf.id transition-id ,tree ali对齐

    数据准备
    这部分基本略过了,比较简单。
    从data/lang说起。 data/lang是由prepare_lang.sh 生成的。
    首先生成的是 words.txt 和 phones.txt,这是openfst格式的symbol tables(后来我就喜欢直接写英文了,与其费心思翻译为合适的中文,不如直接用原词来得原汁原味),它们是字符串(字符串是指标注文本的单位,)到整数的映射,下面这个是日语识别中的部分words.txt:
    0
    a 1
    b 2
    ch 3
    d 4
    e 5
    f 6
    g 7
    h 8
    i 9
    j 10
    k 11
    m 12
    n 13
    再看phones文件夹下以.csl为后缀的文件,分别有disambig.csl nonsilence.csl optional_silence.csl silence.csl,它们的内容都是以冒号作为分割。他们是后续命令行中偶尔会用到的选项。
    看phones.txt,在data/lang/下。这个是 phone symbol table,也包含了标准FST脚本中的“消歧符号”,这些符号就是1,2,3,。。。。我们在此加了个0符号,代替了语言模型中的epsilon transitions。
    L.fst文件是编译后的FST格式的词典(lexicon)。想看里面有什么信息,输入:(from s5/)
    fstprint –isymbols=data/lang/phones.txt –osymbols=data/lang/words.txt data/lang/L.fst | head

    然后下面是对应的输出:
    

    0 1 0.693147182
    0 1 sil 0.693147182
    1 2 a a 0.693147182
    1 1 a a 0.693147182
    1 1 b b 0.693147182
    1 2 b b 0.693147182
    1 1 ch ch 0.693147182
    1 2 ch ch 0.693147182
    1 1 d d 0.693147182
    1 2 d d 0.693147182

    G.fst是个描述这种语言语法结构的FST,下面是这个G.fst的内容:
    

    0 2 21 21 0.000315946876
    0 1 29 0 8.03088665
    1 29 25 25 12.1202555
    1 28 6 6 8.34519005
    1 27 15 15 6.83906889
    1 26 28 28 5.35383272
    1 25 19 19 3.59180236
    1 24 16 16 5.82719803
    1 23 26 26 4.43024254
    1 22 17 17 4.63756752
    我觉得这应该就是对应词、或phone出现次数统计后算的概率。

    提取特征
    这一段是提取训练特征,首先跑对应的命令,然后来看生成的文件。
    看看 exp/make_mfcc/train/make_mfcc.1.log ,首先给出的跑过的命令行,(kaldi总是在log最上面显示命令行,)
    split_scp.pl就是把scp分成几个小的scp(.ark 和.scp是kaldi中两种记录数据的格式, .ark是数据(二进制文件),scp是记录对应ark的路径)
    .ark文件一般都是很大的(因为他们里面是真正的数据),可以通过下面这条命令来看:
    copy-feats ark:mfcc/raw_mfcc_train.1.ark ark,t:- | head

    以下是对应的输出:
    

    NF089001 [
    53.54222 -31.82449 -9.899872 -0.02364012 -5.681367 2.072489 -19.41396 -15.6856 14.83652 25.04876 -11.34208 1.64803 9.309975
    49.06616 -28.41237 1.188962 -0.5514585 -14.60496 -6.065259 -12.19813 -17.75549 -9.185356 4.032361 -9.320414 1.339788 12.23572
    48.10678 -24.78042 8.86155 -4.958602 -4.843619 1.443337 -8.813286 0.4328361 -3.807028 0.8784758 9.743609 7.107668 9.02508
    63.17915 -21.53388 -22.33113 5.595533 -12.11316 -4.990936 -14.4953 -10.58425 2.666025 -0.3021607 -11.49867 -1.502062 3.861568
    70.48519 -19.16981 -25.84126 10.23085 -15.72831 -5.344745 -22.62867 -12.71542 0.8277165 -4.167449 -19.62204 -5.533485 2.644755
    52.99891 -16.45959 0.7519462 -4.386663 3.804989 -1.37611 -24.83507 5.490471 -3.33739 -8.404724 -17.6997 -0.2677126 5.236793
    54.01795 -19.39126 -3.082492 -1.624617 -8.421985 -11.15252 -18.0968 -11.92423 -6.684193 -11.88862 -8.570399 -3.803415 5.675081
    55.33753 -18.44497 -9.369541 -7.717715 -8.041488 -11.45842 -19.81938 -12.43418 -1.97697 -4.627994 -7.774594 4.451687 7.557387
    55.72844 -20.32559 -12.32121 -9.614379 -2.77022 -8.572324 -14.91047 -6.382179 -7.155323 -7.767553 -17.01464 1.11917 -2.572359

     同名的archive(.ark) 和 script(.scp) 文件代表的同一部分数据,注意,这些命令行都有前缀"scp:" 或 "ark:",kaldi不会自己判断这到底是个script还是archive形式,这需要我们加前缀告诉kaldi这是什么格式的文件。对于code而言,这两种格式对它来说都是一样的。
    这两种格式都是‘表(table)’的概念。一个‘表’就是一组有序的事物,前面是识别字符串(如句子的id),一个‘表’不是一个c++的对象,因为对应不同的需求(写入、迭代、随机读入)我们分别有c++对象来读入数据。
    .scp格式是text-only的格式,每行是个key(一般是句子的标识符(id))后接空格,接这个句子特征数据的路径 。
    .ark格式可以是text或binary格式,(你可以写为text格式,命令行要加‘t’,binary是默认的格式)文件里面数据的格式是:key(如句子的id)空格后接数据。
    

    下面是关于script和archive的几点说明:
    用于说明如何读表的字符串叫做“rspecifier”,如ark:gunzip -c my/dir/foo.ark.gz|
    用于说明如何写入表的字符串叫做“wspecifier”,如ark,t:foo.ark
    archive可以合并成大的archive,仍然有效
    code可以读入这两种格式通过顺序读入或随机读入。用户级的code只知道它是在迭代还是查找,并不知道它接触的数据格式是什么(是script还是archive)
    通过随机读入(random access)来读取archive数据,内存使用效率较低,要想高效的随机读入archive,那么生成时就生成对应的ark和scp文件,读入时通过scp文件读入。
    这部分更多信息在官网(google输入kaldi)Kaldi I/O mechanisms中。

    训练单音子系统(monophone)
    输入:
    gmm-copy –binary=false exp/mono/0.mdl - | less

    下面是对应的输出:




    2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

    0 0 0 0.75 1 0.25
    1 1 1 0.75 2 0.25
    2 2 2 0.75 3 0.25
    3



    1

    0 0 0 0.5 1 0.5
    1 1 1 0.5 2 0.5
    2 2 2 0.75 3 0.25
    3


    84
    1 0 0
    1 1 1
    1 2 2
    2 0 3
    2 1 4
    2 2 5
    3 0 6
    3 1 7
    3 2 8
    4 0 9
    4 1 10
    4 2 11
    5 0 12
    5 1 13
    5 2 14
    6 0 15
    6 1 16
    6 2 17
    7 0 18
    7 1 19
    7 2 20
    8 0 21
    8 1 22
    8 2 23
    9 0 24
    9 1 25
    9 2 26
    10 0 27
    10 1 28
    10 2 29
    11 0 30
    11 1 31
    11 2 32
    12 0 33
    12 1 34
    12 2 35
    13 0 36
    13 1 37
    13 2 38
    14 0 39
    14 1 40
    14 2 41
    15 0 42
    15 1 43
    15 2 44
    16 0 45
    16 1 46
    16 2 47
    17 0 48
    17 1 49
    17 2 50
    18 0 51
    18 1 52
    18 2 53
    19 0 54
    19 1 55
    19 2 56
    20 0 57
    20 1 58
    20 2 59
    21 0 60
    21 1 61
    21 2 62
    22 0 63
    22 1 64
    22 2 65
    23 0 66
    23 1 67
    23 2 68
    24 0 69
    24 1 70
    24 2 71
    25 0 72
    25 1 73
    25 2 74
    26 0 75
    26 1 76
    26 2 77
    27 0 78
    27 1 79
    27 2 80
    28 0 81
    28 1 82
    28 2 83


    [ 0 -0.6931472 -0.6931472 -0.6931472 -0.6931472 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 -0.2876821 -1.386294 ]


    39 84
    [ -94.49178 ]
    [ 1 ]
    [
    -0.005838452 -0.0107621 0.007483369 0.002269829 0.01010145 0.001220717 -0.002948278 0.004102771 -0.009732663 0.005548568 -0.00846673 0.003018271 0.002561719 -0.001072273 -0.0003676935 0.0009567018 0.0004904701 0.001004559 0.0006702438 0.002065411 0.001736847 -0.0004884294 -0.0001839283 0.000573744 -6.096664e-06 0.0008038587 0.000548786 0.0005939789 -0.001607142 -0.0008620437 0.0002163016 -0.0002253224 0.0009042169 0.0007718542 0.0001247094 -0.0003084296 -0.001637235 0.0004870822 0.002509772 ]
    [
    0.002302196 0.004163655 0.005391662 0.002574274 0.003217114 0.002863562 0.005842444 0.004294651 0.003149447 0.005013018 0.004209091 0.00450796 0.006656926 0.06917789 0.07472826 0.08657464 0.05778877 0.05123304 0.05053843 0.08058306 0.07275081 0.0605317 0.07780149 0.07870268 0.08504011 0.1153897 0.4811986 0.4609138 0.5185907 0.3938675 0.3216299 0.3013106 0.4305585 0.4167711 0.3496516 0.4075994 0.4405422 0.4886224 0.6218032 ]


    [ -94.49178 ]
    [ 1 ]
    [
    -0.005838452 -0.0107621 0.007483369 0.002269829 0.01010145 0.001220717 -0.002948278 0.004102771 -0.009732663 0.005548568 -0.00846673 0.003018271 0.002561719 -0.001072273 -0.0003676935 0.0009567018 0.0004904701 0.001004559 0.0006702438 0.002065411 0.001736847 -0.0004884294 -0.0001839283 0.000573744 -6.096664e-06 0.0008038587 0.000548786 0.0005939789 -0.001607142 -0.0008620437 0.0002163016 -0.0002253224 0.0009042169 0.0007718542 0.0001247094 -0.0003084296 -0.001637235 0.0004870822 0.002509772 ]
    [
    0.002302196 0.004163655 0.005391662 0.002574274 0.003217114 0.002863562 0.005842444 0.004294651 0.003149447 0.005013018 0.004209091 0.00450796 0.006656926 0.06917789 0.07472826 0.08657464 0.05778877 0.05123304 0.05053843 0.08058306 0.07275081 0.0605317 0.07780149 0.07870268 0.08504011 0.1153897 0.4811986 0.4609138 0.5185907 0.3938675 0.3216299 0.3013106 0.4305585 0.4167711 0.3496516 0.4075994 0.4405422 0.4886224 0.6218032 ]


    [ -94.49178 ]
    [ 1 ]

    首先给出的topo的信息,有一个phone和其他phone的topology不同,通过对比phones.txt,可知这个不同的phone是sil(代表silence),topo文件的惯例是第一个状态是初始状态(概率为1),最后一个状态是结束状态(概率为1)在这里面,明显,-1是初始状态,0,1,2是HMM中间的转移状态,3是结束状态。
    

    .mdl文件的惯例是包含两部分信息:一部分的类型是Transition Model(转换模型),包含拓扑信息(topo),作为HMMtopology的一个成员变量,另一部分是相关模型类型(叫AmGmm),这种类型的文件不是‘表’,写入是binary or text,取决于命令行选项 –binary=true or –binary=false,‘表’就是指script和archive。
    看上面个数据,会发现,0.mdl是初始化模型,所以参数都是初始化的,这个模型训练40次,所以40.mdl中的概率是最终的参数。
    以上信息更多见官网 HMM topology and transition modeling。

    再提重要的一点:在kaldi中p.d.f.’s使用数字标识符表示的,从0开始(这些数字我们叫做pdf-ids),在HTK中他们没有名字。.mdl文件没有足够的信息能在context-dependent phones 和 pdf-ids间建立映射,为看这个,看tree文件,输入:
    copy-tree –binary=false exp/mono/tree - | less

    以下是输出:
    ContextDependency 1 0 ToPdf TE 0 29 ( NULL TE -1 3 ( CE 0 CE 1 CE 2 )
    TE -1 3 ( CE 3 CE 4 CE 5 )
    TE -1 3 ( CE 6 CE 7 CE 8 )
    TE -1 3 ( CE 9 CE 10 CE 11 )
    TE -1 3 ( CE 12 CE 13 CE 14 )
    TE -1 3 ( CE 15 CE 16 CE 17 )
    TE -1 3 ( CE 18 CE 19 CE 20 )
    TE -1 3 ( CE 21 CE 22 CE 23 )
    TE -1 3 ( CE 24 CE 25 CE 26 )
    TE -1 3 ( CE 27 CE 28 CE 29 )
    TE -1 3 ( CE 30 CE 31 CE 32 )
    TE -1 3 ( CE 33 CE 34 CE 35 )
    TE -1 3 ( CE 36 CE 37 CE 38 )
    TE -1 3 ( CE 39 CE 40 CE 41 )
    TE -1 3 ( CE 42 CE 43 CE 44 )
    TE -1 3 ( CE 45 CE 46 CE 47 )
    TE -1 3 ( CE 48 CE 49 CE 50 )
    TE -1 3 ( CE 51 CE 52 CE 53 )
    TE -1 3 ( CE 54 CE 55 CE 56 )
    TE -1 3 ( CE 57 CE 58 CE 59 )
    TE -1 3 ( CE 60 CE 61 CE 62 )
    TE -1 3 ( CE 63 CE 64 CE 65 )
    TE -1 3 ( CE 66 CE 67 CE 68 )
    TE -1 3 ( CE 69 CE 70 CE 71 )
    TE -1 3 ( CE 72 CE 73 CE 74 )
    TE -1 3 ( CE 75 CE 76 CE 77 )
    TE -1 3 ( CE 78 CE 79 CE 80 )
    TE -1 3 ( CE 81 CE 82 CE 83 )
    )
    EndContextDependency

    这是个monophone的tree,所以非常trivial,因为它没有任何分支,CE是constant eventmap(代表树的叶子们),TE指table eventmap,(代表查询表之类的东东),这里没有SE,指split eventmap(代表树的分支)因为这是个monophone。“TE 0 29”是一个table eventmap从key 0开始分裂的开始(key 0指在长度为1(因为是monophone)的phone-context向量的第0个音子位置)。接着,在括号内,有29个event map。第一个是NULL,代表一个指向eventmap的0指针,因为phone-id0是为‘epsilon’保留的。“TE -1 3 ( CE 75 CE 76 CE 77 ) ”这个字符串代表一个table eventmap从key-1开始分裂,这个key代表在topo文件中说过的pdfclass,在这里就是HMM状态。这个phone有3个状态,所以分配给这个key的值可以取0,1,2。在括号内是三个constant eventmap,每个代表树的一个叶子。
    现在看exp/mono/ali.1.gz,输入:
    copy-int-vector “ark:gunzip -c exp/mono/ali.1.gz|” ark,t:- | head -n 2

    以下是对应的输出:
    NF089001 2 1 1 1 4 3 3 6 5 5 2 1 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 6 5 5 5 5 5 62 61 61 61 64 63 63 63 66 65 65 56 58 57 57 60 14 13 13 16 15 18 17 17 17 140 142 141 141 141 141 141 141 144 80 79 82 84 80 79 79 79 79 82 81 81 81 84 83 86 85 85 88 87 90 89 89 89 89 56 55 55 55 55 55 55 58 57 57 57 60 59 68 67 67 70 72 32 31 34 33 33 36 35 35 35 35 35 80 79 79 79 79 79 79 79 79 79 79 79 82 84 50 49 52 51 51 54 53 53 53 8 7 7 7 7 7 10 9 12 11 11 11 11 2 4 3 3 3 6 5 5 5 56 55 55 55 55 55 55 55 55 55 58 60 32 34 36 35 35 35 35 35 35 35 35 80 79 82 81 81 84 83 8 7 7 7 7 7 7 7 10 9 9 9 9 12 11 56 55 55 55 58 57 57 57 60 59 59 2 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 6
    NF089002 2 4 3 6 5 5 5 5 5 5 2 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 6 5 5 5 5 62 61 61 61 61 61 61 64 63 66 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 140 142 144 140 142 144 143 44 43 46 45 48 47 86 85 88 87 87 90 89 89 89 89 80 82 81 84 83 56 55 55 55 58 57 57 60 59 59 59 59 20 19 19 19 22 21 24 23 23 23 56 55 55 55 55 55 55 55 55 55 58 57 57 60 59 59 59 122 121 121 121 121 121 121 121 121 121 124 123 123 126 125 56 58 60 59 20 19 19 19 19 22 21 21 24 23 23 56 55 55 55 55 55 58 60 62 61 61 61 61 61 61 64 66 65 65 65 65 56 55 55 55 55 55 58 57 57 57 57 60 59 59 2 1 1 1 1 1 1 4 3 3 3 3 6 5 128 130 132 131 131 131 86 85 85 85 88 87 87 87 87 87 87 87 87 87 90 89 140 142 144 68 67 67 67 67 67 67 70 72 158 157 160 162 161 161 86 85 88 87 87 87 87 87 87 87 87 87 87 90 140 142 144 44 43 43 43 46 48 47 32 34 33 36 35 35 35 35 35 35 35 35 56 55 55 58 60 59 62 61 61 61 61 61 64 66 65 140 142 144 134 133 133 133 136 135 135 135 135 138 137 137 137 140 142 144 143 143 143 143 143 143 143 143 143 2 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 6
    这是对训练数据做的维特比alignement(对齐)。每句话是一行,再看看上面 exp/mono/tree文件,p.d.f. id 数值最大的是83,而这里的数值远大于这个,是因为,alignment文件用的不是
    p.d.f. id,这里用的是更细分的标识符(identifier),称作“transition-id”,这些id将phone和它们在拓扑原型结构中的转移概率也编码进来了。若想知道“transition-id”是什么,输入:
    show-transitions data/lang/phones.txt exp/mono/0.mdl

    以下是对应的输出:
    Transition-state 1: phone = sil hmm-state = 0 pdf = 0
    Transition-id = 1 p = 0.5 [self-loop]
    Transition-id = 2 p = 0.5 [0 -> 1]
    Transition-state 2: phone = sil hmm-state = 1 pdf = 1
    Transition-id = 3 p = 0.5 [self-loop]
    Transition-id = 4 p = 0.5 [1 -> 2]
    Transition-state 3: phone = sil hmm-state = 2 pdf = 2
    Transition-id = 5 p = 0.75 [self-loop]
    Transition-id = 6 p = 0.25 [2 -> 3]
    Transition-state 4: phone = a hmm-state = 0 pdf = 3
    Transition-id = 7 p = 0.75 [self-loop]
    Transition-id = 8 p = 0.25 [0 -> 1]
    Transition-state 5: phone = a hmm-state = 1 pdf = 4
    Transition-id = 9 p = 0.75 [self-loop]
    Transition-id = 10 p = 0.25 [1 -> 2]
    Transition-state 6: phone = a hmm-state = 2 pdf = 5
    Transition-id = 11 p = 0.75 [self-loop]
    Transition-id = 12 p = 0.25 [2 -> 3]
    Transition-state 7: phone = b hmm-state = 0 pdf = 6
    Transition-id = 13 p = 0.75 [self-loop]
    Transition-id = 14 p = 0.25 [0 -> 1]
    Transition-state 8: phone = b hmm-state = 1 pdf = 7
    Transition-id = 15 p = 0.75 [self-loop]
    Transition-id = 16 p = 0.25 [1 -> 2]
    Transition-state 9: phone = b hmm-state = 2 pdf = 8
    Transition-id = 17 p = 0.75 [self-loop]
    Transition-id = 18 p = 0.25 [2 -> 3]
    Transition-state 10: phone = ch hmm-state = 0 pdf = 9
    Transition-id = 19 p = 0.75 [self-loop]
    Transition-id = 20 p = 0.25 [0 -> 1]
    Transition-state 11: phone = ch hmm-state = 1 pdf = 10
    Transition-id = 21 p = 0.75 [self-loop]
    Transition-id = 22 p = 0.25 [1 -> 2]
    Transition-state 12: phone = ch hmm-state = 2 pdf = 11
    Transition-id = 23 p = 0.75 [self-loop]
    Transition-id = 24 p = 0.25 [2 -> 3]

    …..

    Transition-state 82: phone = z hmm-state = 0 pdf = 81
    Transition-id = 163 p = 0.75 [self-loop]
    Transition-id = 164 p = 0.25 [0 -> 1]
    Transition-state 83: phone = z hmm-state = 1 pdf = 82
    Transition-id = 165 p = 0.75 [self-loop]
    Transition-id = 166 p = 0.25 [1 -> 2]
    Transition-state 84: phone = z hmm-state = 2 pdf = 83
    Transition-id = 167 p = 0.75 [self-loop]
    Transition-id = 168 p = 0.25 [2 -> 3]

    显然,上面这个是训练前的初始状态
    为了增加可读性,输入:
    show-alignments data/lang/phones.txt exp/mono/40.mdl exp/mono/40.occs | less
    (.occs文件是指occupation counts)
    以下是对应的输出:
    Transition-state 1: phone = sil hmm-state = 0 pdf = 0
    Transition-id = 1 p = 0.934807 count of pdf = 1.13866e+06 [self-loop]
    Transition-id = 2 p = 0.0651934 count of pdf = 1.13866e+06 [0 -> 1]
    Transition-state 2: phone = sil hmm-state = 1 pdf = 1
    Transition-id = 3 p = 0.889584 count of pdf = 672302 [self-loop]
    Transition-id = 4 p = 0.110416 count of pdf = 672302 [1 -> 2]
    Transition-state 3: phone = sil hmm-state = 2 pdf = 2
    Transition-id = 5 p = 0.7137 count of pdf = 259284 [self-loop]
    Transition-id = 6 p = 0.2863 count of pdf = 259284 [2 -> 3]
    Transition-state 4: phone = a hmm-state = 0 pdf = 3
    Transition-id = 7 p = 0.713307 count of pdf = 390711 [self-loop]
    Transition-id = 8 p = 0.286693 count of pdf = 390711 [0 -> 1]
    Transition-state 5: phone = a hmm-state = 1 pdf = 4
    Transition-id = 9 p = 0.594051 count of pdf = 275931 [self-loop]
    Transition-id = 10 p = 0.405949 count of pdf = 275931 [1 -> 2]
    Transition-state 6: phone = a hmm-state = 2 pdf = 5
    Transition-id = 11 p = 0.594987 count of pdf = 276569 [self-loop]
    Transition-id = 12 p = 0.405013 count of pdf = 276569 [2 -> 3]
    Transition-state 7: phone = b hmm-state = 0 pdf = 6
    Transition-id = 13 p = 0.590539 count of pdf = 19660 [self-loop]
    Transition-id = 14 p = 0.409461 count of pdf = 19660 [0 -> 1]
    Transition-state 8: phone = b hmm-state = 1 pdf = 7
    Transition-id = 15 p = 0.417553 count of pdf = 13821 [self-loop]

    这个用的是40.mdl,得到的概率都是模型最后用的转移概率
    要想了解更多关于HMM拓扑结构,转移标识符(transition-ids),转移模型之类的,看官网 HMM topology and transition modeling这部分。

    接下来看看训练是如何进行的,输入:
    

    grep Overall exp/mono/log/acc.{?.?,?.??,??.?,??.??}.log

    以下是输出的最后一部分:
    exp/mono/log/acc.35.10.log:LOG (gmm-acc-stats-ali:main():gmm-acc-stats-ali.cc:115)
    exp/mono/log/acc.37.12.log:LOG (gmm-acc-stats-ali:main():gmm-acc-stats-ali.cc:115) Overall avg like per frame (Gaussian only) = -99.1242 over 595815 frames.
    exp/mono/log/acc.38.10.log:LOG (gmm-acc-stats-ali:main():gmm-acc-stats-ali.cc:115) Overall avg like per frame (Gaussian only) = -99.0045 over 666753 frames.
    exp/mono/log/acc.38.11.log:LOG (gmm-acc-stats-ali:main():gmm-acc-stats-ali.cc:115) Overall avg like per frame (Gaussian only) = -95.769 over 793715 frames.
    exp/mono/log/acc.38.12.log:LOG (gmm-acc-stats-ali:main():gmm-acc-stats-ali.cc:115) Overall avg like per frame (Gaussian only) = -99.0953 over 595815 frames.
    exp/mono/log/acc.39.10.log:LOG (gmm-acc-stats-ali:main():gmm-acc-stats-ali.cc:115) Overall avg like per frame (Gaussian only) = -98.9901 over 666753 frames.
    exp/mono/log/acc.39.11.log:LOG (gmm-acc-stats-ali:main():gmm-acc-stats-ali.cc:115) Overall avg like per frame (Gaussian only) = -95.7472 over 793715 frames.
    exp/mono/log/acc.39.12.log:LOG (gmm-acc-stats-ali:main():gmm-acc-stats-ali.cc:115) Overall avg like per frame (Gaussian only) = -99.0786 over 595815 frames.

    你可以看到每次迭代的声学似然概率。

    展开全文
  • css3的transition过渡

    2017-03-03 10:34:00
    它的中文翻译就是过渡,转变,变迁,在css中,用来设置元素或对象变换时的过渡。 由一个样式变成另一个样式的过程。 他有四个值: transition-property 设置对象中参与过渡的属性 transition-duration 设置对象...
    transition
    它的中文翻译就是过渡,转变,变迁,在css中,用来设置元素或对象变换时的过渡。
    由一个样式变成另一个样式的过程。
    他有四个值:
    transition-property    设置对象中参与过渡的属性
    transition-duration   设置对象过渡的持续时间
    transition-timing-function     设置对象过渡的动画类型
    linear:线性过渡。
    ease:平滑过渡。(默认值)
    ease-in:由慢到快。
    ease-out:由快到慢。
    ease-in-out:由慢到快再到慢。
    transition-delay   设置对象等待多长时间才过渡
     
    例:transition: border-color 0.5s ease-in 1s,background-color 0.5s ease-in 1s,color 0.5s ease-in 1s;
           transition:all 0.5s ease-in 1s;
           
           transition-property:all;
           transition-duration:5s;
           transition-timing-function:ease-in;
           transition-delay:1s;
     

    转载于:https://www.cnblogs.com/baixuemin/p/6495043.html

    展开全文
  • 随着IOS 7 和 iPhone5s 占有比例越来越高,64 位的编程 或 对现有项目64位的转换就显得尤为重要了,为了迎合市场的需要,小弟找来官方文档想好好研究一下,小弟...所以就萌生了决定翻译它,但断断续续持续了一个多月

    PDF地址 :http://download.csdn.net/detail/songhongri/6433813


    随着IOS 7 和 iPhone5s 占有比例越来越高,64 位的编程 或 对现有项目64位的转换就显得尤为重要了,为了迎合市场的需要,小弟找来官方文档想好好研究一下,小弟不才,英语不好,但正好又想做点什么,干点以前没干过的,所以就萌生了决定翻译它,但断断续续持续了一个多月才完成。(很遗憾没有占上第一个坑)

    发现苹果给出的最新文档和翻译时的文档有出入,下面是截图



    Xcode用32位和64位的二进制文件来构建你的应用。这种结合的二进制的需要iOS 6或更高版本的最小部署环境。64位二进制仅运行在iOS 7或更高版本。如果是一个已经存在的应用程序,你应该先更新你的应用到iOS 7,然后部署到64位处理器上。通过更新到iOS 7,你可以移除过时的代码路径和使用最新的句子。如果你正在创建一个新的应用,选中iOS 7环境和编译你的应用程序的32位和64位版本。当IOS 程序在64 位的设备上运行时,IOS 包含区分 32位和 64 位的框架。当一个设备上的所有应用程序都支持 64 位的话,IOS 将不会加载32 位相关的库文件,这就意味着系统将消耗更小的内存,启动APP的速度也将快很多,内存的减少即使没给app 性能上带来太大的提高,由于所有的内置app都支持 64 位的运行环境,它也将会让每一个运行在64 位的设备上的应用程序受益,特别是那些需要在后台进行处理的应用程序。


    在开始构建 64 位的app的时候,尽量修复 和 64 位相关的警告,例如:

    1.确保所有的方法调用都有一个合适的原形。

    2.避免由于将一个 64 位的数据应用到32 位置上而将 其切断

    3.确保你64位的APP  所有的计算 都是正常工作的。

    4.在 32 位 和64 位中app 中使用相同的数据结构 (例如当你写一个文件到ICoud)

     

    一定要拿真机测试你的64 位应用程序,因为只有在真机上运行才能发现一些改变。当你运行你的程序的时候,请分析你的性能和内存使用情况,提高它们是很有必要的。


    下面 表格1-1 将会描述所有整型数据的一些改变,其中高亮的部分是LP64 和 ILP32 的不通之处。 


    Table 1-1 Size and alignment of integer data typesin OS X and iOS

    Integer data type

    ILP32 size

    ILP32 alignment

    LP64 size

    LP64 alignment

    char

    1 byte

    1 byte

    1 byte

    1 byte

    BOOL, bool

    1 byte

    1 byte

    1 byte

    1 byte

    short

    2 bytes

    2 bytes

    2 bytes

    2 bytes

    int

    4 bytes

    4 bytes

    4 bytes

    4 bytes

    long

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    long long

    8 bytes

    4 bytes

    8 bytes

    8 bytes

    pointer

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    size_t

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    NSInteger

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    CFIndex

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    fpos_t

    8 bytes

    4 bytes

    8 bytes

    8 bytes

    off_t

    8 bytes

    4 bytes

    8 bytes

    8 bytes

     

     

     

     

     


    表格1-2 将描述浮点型数据的一些改变

    Floating-point type

    ILP32 size

    LP64 size

    float

    4 bytes

    4 bytes

    double

    8 bytes

    8 bytes

    CGFloat

    4 bytes

    8 bytes

     

    转换64位需要注意事项的总结

    1.    不要将64 位的长整型 转换成 32位的整型

    2.    不要将64位的指针转换成 32 的整型

    int *c = something passed in as an argument....

     

    int *d = (int *)((int)c + 4); // Incorrect.

     

    int *d = c + 1; // Correct!

     











    3.    避免因为数学计算引起的指针和长整型类型的截断

    4.    修复因数据大小引起的标准性问题

    5.    确保 32 位和64位共用的数据有相同的数据结构。

    6.    重写汇编语言来满足64位的操作码和运行环境

    7.    避免将可变的参数的方法和不可变的方法进行转换


    你永远不要假设NSInteger 和 int 是同样大小的,如下面有很少一些特许的例子需要看一下:

    1.    从NSNumber 类型对象转换过来或转换成NSNumber 的时候

    2.    用NSCode 类进行编码和解码的时候,如果你在64位的设备上将NSInteger 编码,然后在32位的设备上解码,如果值的范围超出了32位解码方法将会抛出异常。你应该 使用严格的整型数据类型代替

    (参考“使用严格的整型数据类型”)

    3.    使用框架中用NSInteger 定义的常量,例如 NSNotFound ,在64位中,它的值是比 int 类型最大值是大的,所以截取它的值经常导致错误。

    CGFloat 变成了64位。和NSInteger 一样,你也不要假设CGFloat 和 float 或者 double 一样,所以坚持使用CGFloat类型吧。


    // Incorrect.

    CGFloat value = 200.0;

    CFNumberCreate(kCFAllocatorDefault, kCFNumberFloatType, &value);

    // Correct!

    CGFloat value = 200.0;

    CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &value);


    好吧 ,大致内容就写这么多吧,要想获取更多内容请看《IOS 7 64位改变指南.pdf》



    展开全文
  • transform、transition、 translate...translation: 中文翻译 translation: 即不是css属性,也不是属性值 transform: css 属性名 transition : css 属性名 translate: css属性值 transition 设置元素 –...

    transform、transition、 translate、 translation四个英语单词长得太像,我这个英语渣必须好好区分一下。

    translation: 中文为 翻译
    translation: 即不是css属性,也不是属性值

    • transform: css 属性名
    • transition : css 属性名
    • translate: css属性值

    transition 设置元素 – 过渡效果

    重点强调在时间(transition的值,以s为单位)上的过渡视效过程
    
    <!DOCTYPE html>
    <html>
    <head>
    <style> 
    div
    {
    width:100px;
    height:100px;
    background:blue;
    transition:width 2s;
    -moz-transition:width 2s; /* Firefox 4 */
    -webkit-transition:width 2s; /* Safari and Chrome */
    -o-transition:width 2s; /* Opera */
    }
    div:hover
    {
    top: 100px;
    }
    </style>
    </head>
    <body>
    <div></div>
    <p>请把鼠标指针移动到蓝色的 div 元素上,就可以看到过渡效果。</p>
    <p><b>注释:</b>本例在 Internet Explorer 中无效。</p>
    </body>
    </html>
    

    transform 设置元素 – 2D/3D转换

    浏览器会直接显示转换后的效果,不像transition这个属性那样有动画效果

    <!DOCTYPE html>
    <html>
    <head>
    <style> 
    div
    {
    margin:30px;
    width:200px;
    height:100px;
    background-color:yellow;
    /* Rotate div */
    transform:rotate(9deg);
    -ms-transform:rotate(9deg); /* Internet Explorer */
    -moz-transform:rotate(9deg); /* Firefox */
    -webkit-transform:rotate(9deg); /* Safari 和 Chrome */
    -o-transform:rotate(9deg); /* Opera */
    }
    </style>
    </head>
    <body>
    <div>Hello World</div>
    </body>
    </html>
    

    translate()方法 – 完成位移

    translate()方法详细用法参考 位移translate()方法

    在CSS3中,我们可以使用translate()方法将元素沿着水平方向(X轴)和垂直方向(Y轴)移动。它是一个属性值,和属性transform配合 完成2d/3d转换。

    translate 作为 html 5的属性

    注意和translate 作为transform的translate完全不是一个东西

    1. 定义:translate 是指标签属性,不是css3样式规则transform的translate,说它的定义吧:规定是否应该翻译元素内容。只需了解:translate是HTML5中的新属性
    2. 语法: <tag translate="no | yes">内容</tag>
    3. 实例:<div translate="no">我是汉字我骄傲</div> ,主要用于一些翻译插件等,当它们识别到**translate=“no”**将不会翻译此元素的内容。
    4. 兼容性: 目前所有浏览器都不兼容
      在这里插入图片描述
    展开全文
  • transform的中文翻译是变换、变形,是css3的一个属性,和其他width,height属性一样 translate 是transform的属性值,是指元素进行2D变换,2D变换就是指,元素以当前位置(0,0)按照x轴的方向移动多少,按照y轴的...
  • 代码基本一模一样,只有略微的修改,加了一些注释,以及将其中大多数英文翻译成了中文。 此篇 API 均为 Android 5.0(API 级别 21) 以上才可支持。 此demo一共分为四部分: 1.1 普通过渡 Transition; ...
  • 这里不讲最基础的东西比如这些...其实要区别一些属性的最好方法就是看翻译翻译中文很多就顾名思义了! transform转变 transform并不是一个动态属性,他是一个静态的属性。专注于改变元素基于默认位置的以下值。...
  • transform的中文翻译是变换、变形,是css3的一个属性,和其他width,height属性一样 translate 是transform的属性值,是指元素进行2D变换,2D变换就是指,元素以当前位置(0,0)按照x轴的方向移动多少,按照y轴的...
  • 代码基本一模一样,只有略微的修改,加了一些注释,以及将其中大多数英文翻译成了中文。 此篇 API 均为 Android 5.0(API 级别 21) 以上才可支持。 此demo一共分为四部分: 1.1 普通过渡 Tran
  • 英文文献及中文翻译 学生姓名 学号 学 院 专 业 指导教师 第 第 PAGE #页共4页 On JSP / SERVLET automatically gen erated charts WEB application methods Summary We define a chart called Web-transition ...
  • Unity UGUI Button 中文详解-Chinar

    千次阅读 多人点赞 2019-05-20 01:45:36
    本文提供全流程,中文翻译。 Unity ugui完整系列教程 (Chinar中文图解) 动态添加监听事件 Presentation 介绍 1.1 Attribute 属性 1.2 Transition Setting 过渡类型详解 1.2.1 Color Tint 颜色过渡 1.2.2 Sprotes ...
  • | 序号 | 是否完成 | 对应小节名称 | 中文标题 | 翻译贡献者 | 校对贡献者 | 校对认领者 | | --- | --- | --- | --- | --- | --- | --- | | 1 | 是 | Global Config | 全局配置 | -lizhihua | | | | 2 | 是 | Global...
  • 进入css3动画世界(二) 今天主要来讲transition和transform入门,以后会用这两种属性配合做...从中文翻译来讲,这是一个过渡属性,而这个属性的属性值有四种: transition: property duration timing-function ...
  • 但是这个项目文档没有中文翻译对照,其次变换类型不是很多。 为了避免麻烦,没有使用React Transition Group,最后发现项目组用的前端UI库Material-UI中封装了过渡组件,官方文档写的已经很详细了:Transitions
  • IATF16949 2016版标准

    2018-12-22 20:16:01
    IATF16949 2016版标准,中文翻译版。 2016年10月初,国际汽车工作组(IATF)已正式发布汽车行业新版质量管理标准IATF 16949:2016。该标准将继续帮助组织提升其质量管理体系(QMS),以应对汽车行业由于复杂的供应链...
  • 因为最近在做EA的模型搭建,查阅资料的时候,发现这篇示例说明比较实用,但是英文版理解起来比较慢,中文版在火龙果网站有,但是机翻增加了理解难度,因此,我打算整理一下中文版的翻译,作为学习记录。 火龙果网站...
  • 先更新第二章的答案,习惯中文的童鞋请左转百度翻译 Solution for chapter 2 The transition from blocked to running is conceivable. Suppose that a process is blocked on I/O and the I/O fini...
  • Unity在中土大陆的大肆推广能从广泛的中文翻译资料中看出。所以,手册才是王道。 游戏动画中的一个常见任务是在两个或更多相似运动之间混合。最佳的已知示例可能是根据角色速度混合行走和奔跑动画。另一个示例是...
  • CSS3的@keyframes用法详解: ...keyframes翻译中文,是"关键帧"的意思,如果用过flash应该对这个比较好理解,当然不会flash也没有任何问题。 使用transition属性也能够实现过渡动画效果,但是略显粗糙...
  • CSS3的@keyframes用法详解:

    千次阅读 2017-06-16 15:24:35
    CSS3的@keyframes用法详解: ...keyframes翻译中文,是"关键帧"的意思,如果用过flash应该对这个比较好理解,当然不会flash也没有任何问题。 使用transition属性也能够实现过渡动画效果,但是略显粗糙,因为不能够
  • 基本知识:keyframes翻译中文,是"关键帧"的意思,如果用过flash应该对这个比较好理解,当然不会flash也没有任何问题。使用transition属性也能够实现过渡动画效果,但是略显粗糙,因为不能够更为精细的控制动...
  • vue中使用animate.css库

    千次阅读 2019-02-24 17:20:09
    keyframes翻译中文,是&quot;关键帧&quot;的意思,使用transition属性也能够实现过渡动画效果,但是略显粗糙,因为不能够更为精细的控制动画过程,比如只能够在指定的时间段内总体控制某一属性的过渡,而...
  • 添加中文特定赞助菜单</li><li><code>feat</code> 添加 <code>/guide/migration/transition.md</code> 之前丢失这个(待翻译,官方库刚迁移的)</li><li>...
  • <div><h2>3月份前端资源分享 <h4>1. Javascript ...<ul><li>翻译的 Todd Motto: AngularJS 风格指南</a></li><li><a href="http://www.reqianduan.com/1722.html">Angular代码规范</a></li><li><a href=...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

transition中文翻译