Lattice

我有一张地图,叫Lattice。

它有多个成员叫LNode,数量是nn,成员之间有各种联系叫LArc,也有很多个na。

它们分别被放在列表中,lnodes和larcs。显然,这两个列表的长度分别是nn和na。

这地图,还包含小地图,暂且不表。

为了看到比例更大的地图,需要把LNode进行放大,因为里面包含更多细节信息。要进行扩展,必须依赖的几个条件是,发音字典(每个word可以划分为那几个更小的phone),HMMSet对象(每个phone对应的HMM模型又可以划分为更小的state)以及Mixture,这是hmm对象提供的信息。

ReadLattice函数,返回一个Lattice对象。

它读取一个描述Lattice网络文件wdNet,它里面用lattice语言描写了Lattice对象如何组织起来。例如,如何表示节点、如何表示边,然后函数ReadOneLattice函数为每个节点、边构建相应的对象,构成Lattice对象——词格图。

流程如下:

1)读取wdNet文件头,知道lattice里包含nn个LNode和na个LArc,然后给lattice的lnodes和larcs分配空间。

2)循环读取wdNet文件的每一行,根据标签符号为“I”还是“L”分别建节点和边的实体,且按照“I”和“L”后面接的序号在lnodes和larcs后面添加。

3)且根据“L”行的描述,在LArc对象的相关信息中建立连接,start和end节点对应“I”指示的LNode。

4)每个Lattice词格的LNode节点都含有一个Word数据项,它对应voc->wtab中的一项,表示该节点上面词更详细的信息。

5)Lattice的LNode节点除了这个Word外,还有一个比较重要的数据,就是SubLatDef* sublat。在进行lattice扩展时(由函数ExpandWordNet完成),将会给这个指针附着一个对象PronHolder,它包含了语音HMM模型序列(由发音字典查到该词包含多少个以及什么phone序列,把它们chain起来,并starts和ends分别指向首尾两个phone)。

到此一个完整的由Lattice到phone Netword构建完成。

需要说明的是,还只是完成了Lattice节点LNode内部的phone chain连接。词之间,以及如何构建一个完整的network网络,还有些重要的细节需要处理,例如重排序。

 

 

 

 

 

 

 

你可能感兴趣的:(语音识别,HTK,Lattice,chain模型,语音识别,ASR)