htk网络和解码源码(四、网络)

(一)         例子

<s> sil

</s>    sil

北京     b eh_l i_l ji i_h ng_h

北方     b eh_l i_l f a_h ng_h

天气     ti aa_h nn_h qi i_h i_l

 

注:调用WriteTLex (tnet, "lex.dot")函数,可以生成相应的网络结构图。

(二)         主要结构

1.      节点

定义:

typedef enum _LexNodeType {

 LN_WORDEND, LN_CON, LN_MODEL

} LexNodeType;

Node的三种类型:

node

内容

对应的layer

LN_WORDEND

Pron(单词)

WE

LN_CON

辅助节点,用于减少边的数量

AB YZ ZS SA

LN_MODEL

Hmm(model)

A BY Z SIL

5 special models: <s> Mod/WE,  </s> Time, </s> Mod/WE

2.      层

定义:

typedef enum _LayerId {

  LAYER_Z=0, LAYER_ZS=1, LAYER_SIL=2, LAYER_SA=3, LAYER_A=4, LAYER_AB=5,

  LAYER_BY=6, LAYER_WE=7, LAYER_YZ=8

} LayerId;

9层结构如下:

层类型

含义

对应的节点类型

LAYER_Z=0

y-z+a

2

LAYER_ZS=1

z+a或者z+sil

1

LAYER_SIL=2

sil/sp

2

LAYER_SA=3

sil+a或者z+a或者time

1

LAYER_A=4

z-a+b或者sil-a+b

2

LAYER_AB=5

a+b

1

LAYER_BY=6

a-b+c b-c+d

2

LAYER_WE=7

word

0

LAYER_YZ=8

y+z

1

 

层对应关系:

wordEndLayerId = LAYER_SA

spSkipLayer = LAYER_ZS

 

(三)         构建步骤

1.      CollectPhoneStats()

收集A, B, AB, YZ;创建LAYER_AB和LAYER_YZ层

对于具有单个发音p的词条(如silience),会把z和p放在SA层和YZ层

节点里面存有两种类型的数据,一类是HLink,对应于三音素;另一类是pronid,对应于pronlist中的下标,可以通过pronid在pronlist里面找到该词条。

2.      CreateAnodes()

创建LAYER_A,z-a+b节点;创建LAYER_SA,z+a节点

3.      CreateZnodes()

创建LAYER_Z,y-z+a节点;创建LAYER_ZS,z+a节点

4.      CreateSILnodes()

创建LAYER_SIL,sil节点用于连接SA和ZS

对于sil节点:对于每一个z+sil,新生成一个silnode,右边连接所有的sil+a。

对于sp节点:对于每一个z+a,新生成一个spnode,右边连接对应的z+a。

5.      CreateBYnodes()

创建LAYER_BY,a-b+c节点;wordend节点也并入到LAYER_BY。

6.      CreateStartEnd()

增加网络的起点和终点

<s>:新建sil的model节点(LAYER_Z);新建<s>的word节点(LAYER_SIL);连接sil+a

</s>:新建sil的model节点(LAYER_A);新建</s>的word节点(LAYER_AB);连接如下

7.      建立lmlatree

1)        AssignWEIds()

对AB层一直到wordend层之间的节点进行编号pronID(word node)和lmlaId(其他node)。

2)        InitLMlaTree()

新建lmlatree,对A层的节点进行编号:如果节点后面只有一条出边,该节点的lmlaIdx设为子节点的lmlaIdx(对应于简单节点);如果节点后面存在多条出边,该节点的lmlaIdx设为++tnet->lmlaCount,同时新建该节点对应的compNode(对应于复杂节点)。

3)        ConvertTLex2Lex ()

初始化lmlatree中的简单节点:将net中的node的loWE和hiWE存放至lmlatree。

Lmlatree的节点结构如下图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值