Skip to content
Snippets Groups Projects
Commit c693149c authored by Amit Beka's avatar Amit Beka
Browse files

add LM scaling property


LM scaling is intended to control the ratio between the LM strength and
the acoustic model strength *after* decoding, when the best path in the
lattice is generated.
Setting this to a value higher than 1.0 (default) makes the LM more
prominent in the lattice path weighting, so the best path may be more
aligned with the LM, and not with the acoustic model.

Signed-off-by: default avatarAmit Beka <amit.beka@gmail.com>
parent e78a5086
No related branches found
No related tags found
No related merge requests found
...@@ -71,12 +71,14 @@ enum { ...@@ -71,12 +71,14 @@ enum {
PROP_DO_ENDPOINTING, PROP_DO_ENDPOINTING,
PROP_ADAPTATION_STATE, PROP_ADAPTATION_STATE,
PROP_INVERSE_SCALE, PROP_INVERSE_SCALE,
PROP_LMWT_SCALE,
PROP_LAST PROP_LAST
}; };
#define DEFAULT_MODEL "final.mdl" #define DEFAULT_MODEL "final.mdl"
#define DEFAULT_FST "HCLG.fst" #define DEFAULT_FST "HCLG.fst"
#define DEFAULT_WORD_SYMS "words.txt" #define DEFAULT_WORD_SYMS "words.txt"
#define DEFAULT_LMWT_SCALE 1.0
/* the capabilities of the inputs and outputs. /* the capabilities of the inputs and outputs.
* *
...@@ -195,6 +197,17 @@ static void gst_kaldinnet2onlinedecoder_class_init( ...@@ -195,6 +197,17 @@ static void gst_kaldinnet2onlinedecoder_class_init(
FALSE, FALSE,
(GParamFlags) G_PARAM_READWRITE)); (GParamFlags) G_PARAM_READWRITE));
g_object_class_install_property(
gobject_class,
PROP_LMWT_SCALE,
g_param_spec_float(
"lmwt-scale", "LM weight for scaling output lattice",
"LM scaling for the output lattice, usually in conjunction with inverse-scaling=true",
G_MINFLOAT,
G_MAXFLOAT,
DEFAULT_LMWT_SCALE,
(GParamFlags) G_PARAM_READWRITE));
gst_kaldinnet2onlinedecoder_signals[PARTIAL_RESULT_SIGNAL] = g_signal_new( gst_kaldinnet2onlinedecoder_signals[PARTIAL_RESULT_SIGNAL] = g_signal_new(
"partial-result", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST, "partial-result", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(Gstkaldinnet2onlinedecoderClass, partial_result), G_STRUCT_OFFSET(Gstkaldinnet2onlinedecoderClass, partial_result),
...@@ -270,6 +283,7 @@ static void gst_kaldinnet2onlinedecoder_init( ...@@ -270,6 +283,7 @@ static void gst_kaldinnet2onlinedecoder_init(
filter->feature_info = NULL; filter->feature_info = NULL;
filter->sample_rate = 0; filter->sample_rate = 0;
filter->decoding = false; filter->decoding = false;
filter->lmwt_scale = DEFAULT_LMWT_SCALE;
filter->inverse_scale = FALSE; filter->inverse_scale = FALSE;
// init properties from various Kaldi Opts // init properties from various Kaldi Opts
...@@ -380,6 +394,9 @@ static void gst_kaldinnet2onlinedecoder_set_property(GObject * object, ...@@ -380,6 +394,9 @@ static void gst_kaldinnet2onlinedecoder_set_property(GObject * object,
case PROP_INVERSE_SCALE: case PROP_INVERSE_SCALE:
filter->inverse_scale = g_value_get_boolean(value); filter->inverse_scale = g_value_get_boolean(value);
break; break;
case PROP_LMWT_SCALE:
filter->lmwt_scale = g_value_get_float(value);
break;
case PROP_ADAPTATION_STATE: case PROP_ADAPTATION_STATE:
{ {
if (G_VALUE_HOLDS_STRING(value)) { if (G_VALUE_HOLDS_STRING(value)) {
...@@ -480,6 +497,9 @@ static void gst_kaldinnet2onlinedecoder_get_property(GObject * object, ...@@ -480,6 +497,9 @@ static void gst_kaldinnet2onlinedecoder_get_property(GObject * object,
case PROP_INVERSE_SCALE: case PROP_INVERSE_SCALE:
g_value_set_boolean(value, filter->inverse_scale); g_value_set_boolean(value, filter->inverse_scale);
break; break;
case PROP_LMWT_SCALE:
g_value_set_float(value, filter->lmwt_scale);
break;
case PROP_ADAPTATION_STATE: case PROP_ADAPTATION_STATE:
string_stream.clear(); string_stream.clear();
if (filter->adaptation_state) { if (filter->adaptation_state) {
...@@ -544,6 +564,8 @@ static void gst_kaldinnet2onlinedecoder_final_result( ...@@ -544,6 +564,8 @@ static void gst_kaldinnet2onlinedecoder_final_result(
fst::ScaleLattice(fst::AcousticLatticeScale(inv_acoustic_scale), &clat); fst::ScaleLattice(fst::AcousticLatticeScale(inv_acoustic_scale), &clat);
} }
fst::ScaleLattice(fst::LatticeScale(filter->lmwt_scale, 1.0), &clat);
CompactLatticeShortestPath(clat, &best_path_clat); CompactLatticeShortestPath(clat, &best_path_clat);
Lattice best_path_lat; Lattice best_path_lat;
......
...@@ -61,6 +61,7 @@ struct _Gstkaldinnet2onlinedecoder { ...@@ -61,6 +61,7 @@ struct _Gstkaldinnet2onlinedecoder {
gboolean silent; gboolean silent;
gboolean do_endpointing; gboolean do_endpointing;
gboolean inverse_scale; gboolean inverse_scale;
float lmwt_scale;
GstBufferSource *audio_source; GstBufferSource *audio_source;
gchar* model_rspecifier; gchar* model_rspecifier;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment