Step 10 - Making Tied-State Triphones


A limitation of the creation of a triphone-based acoustic model in step 9 is that it does not deal with with triphones for which there are no examples in the training data.  This problem can be avoided by careful design of the training database, but when building large vocabulary cross-word triphone systems unseen triphones are unavoidable.

Decision tree clustering used here allows previously unseen triphones to be synthesized.  How?  by using a  phonetic decision tree where models are organized in a tree and the parameters you pass are called questions.  The decoder asks a question on phone context and decides what model to use.

A phonetic decision tree is a binary tree in which a yes/no phonetic question is attached to each node.  The question at each node is chosen to maximise the likelihood of the training data, given the final set of state tyings.   Trees are defined by the command TB.  All of the possible phonetic questions must be loaded into HHED using QS commands.   Each question takes the form ``Is the left or right context in the named set?" where the context is the model context as defined by its logical name.


Create a new HTK script file called maketriphones.ded containing the following:

AS sp
MP sil sil sp

The TC edit command directs HDMan to output triphones.

Then execute the HDMan command against the entire lexicon file, not just the training dictionnary we have used thus far:

HDMan -A -D -T 1 -b sp -n fulllist0 -g maketriphones.ded -l flog dict-tri ../lexicon/VoxForgeDict.txt

this creates 2 files:

Next, download the Julia script fixfulllist.jl to your 'voxforge/bin' folder and run it to append the contents of monophones0 to the beginning of to the fulllist0 file, and then to to remove any duplicate entries, and put the result in fulllist: 

julia ../bin/fixfulllist.jl fulllist0 monophones0 fulllist


Next you create a new HTK script called tree.hed (containing the phone context questions HTK will use to select the relevant triphones) in your 'voxforge/tutorial' folder containing the following: tree1.hed (Note: make sure you have a blank line at the end of this file).  copy contents of tree1.hed to tree.hed:

cat tree1.hed > tree.hed

Here is a short description of the commands contained in tree.hed:

  • RO - outlier threshhold
  • 1st "TR" - trace level
  • QS - question - defined by the user (see quests.hed file in HTK distribution - RM demo folder)
(each QS command loads a single question and that question is defined by a set of contexts)
  • 2nd "TR" - enables intermediate level progress reporting
  • TB - clusters one specific set of states - created with the mkclscript.prl command
  • AU - synthesize previously unseen triphones, i.e. use the set of newly created decision trees to make all the triphones included in the list
  • CO - compact the model set: some state definitions will be exactly the same (same means and variances etc.). To save space, only one of these states is kept in the definition, others are added to the tiedlist.
  • ST - save the decision trees in a file

Refer to the HTK book for details on these commands. 

Next download the mkclscript.jl script to your 'voxforge/bin' folder and run it as follows to append the state clusters to the tree.hed file you created above:

julia ../bin/mkclscript.jl monophones0 tree.hed

Note: the mkclscript.jl script automatically adds the following to the end of your tree.hed file:

TR 1
AU "fulllist"
CO "tiedlist"
ST "trees"

Your file should look like this: tree.hed

Next create  3 more folders: hmm13-15

Then execute the HHEd (hmm definition editor) command:

HHEd -A -D -T 1 -H hmm12/macros -H hmm12/hmmdefs -M hmm13 tree.hed triphones1

This command creates 3 files:

 Next run HERest 2 more times: 

HERest -A -D -T 1 -T 1 -C config -I wintri.mlf  -t 250.0 150.0 3000.0 -S train.scp -H hmm13/macros -H hmm13/hmmdefs -M hmm14 tiedlist

This command creates 2 files:

HERest -A -D -T 1 -T 1 -C config -I wintri.mlf  -t 250.0 150.0 3000.0 -S train.scp -H hmm14/macros -H hmm14/hmmdefs -M hmm15 tiedlist

This creates 2 files:

The hmmdefs file in the hmm15 folder, along with the tiedlist file, can now be used with Julius to recognize your speech!


By birdieagle - 11/22/2017 Hi! Can you help me with this?

By Karabi Maity - 7/27/2017 - 2 Replies How can I sove this? Please help.

By nice_libra - 2/6/2017 - 2 Replies when running

By chetto - 12/9/2015 - 7 Replies Hello. When i create hmm13 i got an error like below;

By ibr - 8/13/2015 - 4 Replies hi

By shireen - 5/20/2015 HHEd -A -D -T 1 -H hmm12/macros -H hmm12/hmmdefs -M hmm13 tree.hed triphones1

By Visitor - 5/7/2015 I am facing the same problem

By Visitor - 5/7/2015 I am facing the same issue...Has anyone solve the issue.Kindly, help me

By singhal.surbhi10 - 4/26/2015 Hi,

By miramau1 - 9/20/2014 - 1 Replies Hello,

By dil - 1/24/2014 global.ded

By dil - 1/23/2014 Accuracy is reduced in tied state triphones than tri phone .

By anketvit - 10/8/2013 - 3 Replies When i run command:

By tzoghi - 6/26/2013 hi,

By sandeep.boya - 7/28/2012 I trained models (16 GMM tied-state)using

By srikanth - 7/28/2012

By sandeep.boya - 7/28/2012

By ripul_88 - 7/13/2012 - 1 Replies

By ripul_88 - 7/5/2012 - 1 Replies

By ripul_88 - 7/5/2012 - 2 Replies I run the ommand it shows no error but my fulllist file is not updated as shown in the example...!!!! what to do?

By thaparallawadinishant - 1/8/2012 - 2 Replies hiii all

By nounou - 12/14/2011

By ubaid - 12/8/2011 - 1 Replies hi all frindz

By ubaid akbar - 11/23/2011 - 3 Replies hi

By zorzal - 6/19/2011 - 3 Replies I believe the instructions regarding the use of HDMan to generate "fulllist" are inconsistent with those given in HTKBook, as pointed out by Imene.

By shahab - 4/27/2011 - 1 Replies Hi dear friends,

By Tara - 2/17/2011 - 2 Replies After this command:

By gothrog - 12/20/2010 - 3 Replies Ken, I have received the following error:

By Roola - 9/30/2010 - 4 Replies

By Visitor - 8/30/2010 - 1 Replies hi..