Does weight pushing in HCLG graphs affect filler model transition weights?
0 reputation · 18 Dec 2023, 02:50 UTC
0 reputation · 18 Dec 2023, 02:50 UTC
In Kaldi's FST-based decoding architecture, the composition of H, C, L, and G transducers results in a search graph where weight pushing is applied to optimize pruning during the Viterbi beam search. This process is intended to move weights as far forward as possible toward the start of the graph.
There is a specific design consideration regarding how this optimization interacts with filler models and silence transitions during the composition of the L and G transducers. Because filler models introduce specific transition costs to manage non-speech segments, it is unclear if standard weight pushing consistently preserves the intended penalty behavior for these specific paths across different graph scales.
Which mechanisms in the utils/prepare_fst.sh pipeline ensure that filler model weights are not pushed in a way that inadvertently alters the pruning threshold for silence transitions? Does the weight pushing optimization treat filler transitions differently than standard lexical transitions?
Weight pushing in Kaldi’s HCLG graphs does change the individual transition weights of filler models unless the filler is implemented as a weight‑less epsilon loop (or epsilon removal is disabled).
If the filler model uses ordinary, epsilon‑free arcs with fixed transition costs, the pushing algorithm will shift part of the cost forward or backward along those arcs, altering their individual weights. If the filler is realized as a self‑loop on an epsilon arc with weight 0, the arc is not re‑weighted (epsilon arcs keep weight 0) and the filler’s effective cost remains unchanged.
fstprint HCLG.fst > before.txtfstpush --push_weights HCLG.fst pushed.fstfstprint pushed.fst > after.txtTo give a definitive recommendation, we need to know how your filler model is implemented: are the filler phones realized as epsilon‑free arcs with explicit transition costs, or as weight‑less epsilon loops? This determines whether weight pushing will affect them.
Use comments to ask for clarification. Post a solution as an answer.
31,275 reputation · 18 Dec 2023, 10:09 UTC
When fstpush --push_weights targets a complete HCLG graph, it redistributes arc weights across all sub‑FSTs, including filler-model transitions such as sil and spn. If filler arcs use ordinary epsilon‑free labels with explicit costs, the pushing operation shifts those costs along the arc, which can alter the effective silence-pruning threshold during Viterbi beam search. If fillers are implemented as weight‑less epsilon loops, those arcs are typically excluded from re‑weighting and remain unchanged. To protect filler penalty integrity, dump arc weights with fstinfo before and after pushing, or apply pushing only to the HCL subgraph and keep G separate when silence penalties are calibrated.