示例#1
0
    def create_config(
        cls,
        crp,
        feature_flow,
        extra_config_estimate=None,
        extra_post_config_estimate=None,
        extra_config_normalization=None,
        extra_post_config_normalization=None,
    ):
        # estimate
        config_estimate, post_config_estimate = rasr.build_config_from_mapping(
            crp, {"corpus": "feature-statistics.corpus"})
        config_estimate.feature_statistics.action = "estimate-covariance"
        config_estimate.feature_statistics.covariance_estimator.file = (
            "xml:covariance.matrix")
        config_estimate.feature_statistics.covariance_estimator.shall_normalize = True
        config_estimate.feature_statistics.covariance_estimator.feature_extraction.file = (
            "feature.flow")
        config_estimate.feature_statistics.covariance_estimator.output_precision = 20

        feature_flow.apply_config(
            "feature-statistics.covariance-estimator.feature-extraction",
            config_estimate,
            post_config_estimate,
        )

        config_estimate._update(extra_config_estimate)
        post_config_estimate._update(extra_post_config_estimate)

        # normalization
        (
            config_normalization,
            post_config_normalization,
        ) = rasr.build_config_from_mapping(crp, {})
        config_normalization.feature_statistics.action = (
            "calculate-covariance-diagonal-normalization")
        config_normalization.feature_statistics.covariance_diagonal_normalization.covariance_file = (
            "xml:covariance.matrix")
        config_normalization.feature_statistics.covariance_diagonal_normalization.normalization_file = (
            "xml:normalization.matrix")
        config_normalization.feature_statistics.covariance_diagonal_normalization.output_precision = (
            20)

        config_normalization._update(extra_config_normalization)
        post_config_normalization._update(extra_post_config_normalization)

        return (
            config_estimate,
            post_config_estimate,
            config_normalization,
            post_config_normalization,
        )
示例#2
0
    def create_config(
        cls,
        crp,
        extra_config,
        extra_post_config,
        encoding,
        **kwargs,
    ):
        config, post_config = rasr.build_config_from_mapping(
            crp, {
                "lexicon": "lm-util.lexicon",
                "language_model": "lm-util.lm"
            })
        del (config.lm_util.lm.scale
             )  # scale not considered here, delete to remove ambiguity

        assert config.lm_util.lm.type == "ARPA"

        if post_config.lm_util.lm.image:
            logging.warning(
                "The LM image already exists, but a new one will be recreated."
            )

        config.lm_util.action = "load-lm"
        config.lm_util.lm.image = "lm.image"
        config.lm_util.encoding = encoding
        config.lm_util.batch_size = 100

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#3
0
    def create_config(
        cls,
        crp,
        text_file,
        encoding,
        renormalize,
        extra_config,
        extra_post_config,
        **kwargs,
    ):
        config, post_config = rasr.build_config_from_mapping(
            crp, {
                "lexicon": "lm-util.lexicon",
                "language_model": "lm-util.lm"
            })
        del (config.lm_util.lm.scale
             )  # scale not considered here, delete to remove ambiguity

        config.lm_util.action = "compute-perplexity-from-text-file"
        config.lm_util.file = text_file
        config.lm_util.encoding = encoding
        config.lm_util.batch_size = 100
        config.lm_util.renormalize = renormalize
        config.lm_util.score_file = "word.scores"

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
    def create_config(
        cls,
        crp,
        alignment,
        num_classes,
        buffer_size,
        disregarded_classes,
        class_label_file,
        extra_rasr_config,
        extra_rasr_post_config,
        use_python_control,
        **kwargs,
    ):
        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "acoustic_model":
                "neural-network-trainer.model-combination.acoustic-model",
                "corpus": "neural-network-trainer.corpus",
                "lexicon": "neural-network-trainer.model-combination.lexicon",
            },
            parallelize=(crp.concurrent == 1),
        )

        if use_python_control:
            config.neural_network_trainer.action = "python-control"
            config.neural_network_trainer.feature_extraction.file = "feature.flow"
            config.neural_network_trainer.python_control_enabled = True
            config.neural_network_trainer.python_control_loop_type = "iterate-corpus"
            config.neural_network_trainer.extract_alignments = alignment is not None
            config.neural_network_trainer.soft_alignments = False
        else:
            config.neural_network_trainer.action = "supervised-training"
            config.neural_network_trainer.feature_extraction.file = "dummy.flow"
            config.neural_network_trainer.aligning_feature_extractor.feature_extraction.file = (
                "feature.flow")

        config.neural_network_trainer.single_precision = True
        config.neural_network_trainer.silence_weight = 1.0
        config.neural_network_trainer.weighted_alignment = False
        config.neural_network_trainer.class_labels.disregard_classes = (
            disregarded_classes)
        config.neural_network_trainer.class_labels.load_from_file = class_label_file
        config.neural_network_trainer.class_labels.save_to_file = "class.labels"

        config.neural_network_trainer.estimator = "steepest-descent"
        config.neural_network_trainer.training_criterion = "cross-entropy"
        config.neural_network_trainer.trainer_output_dimension = num_classes
        config.neural_network_trainer.buffer_type = "utterance"
        config.neural_network_trainer.buffer_size = buffer_size
        config.neural_network_trainer.shuffle = False
        config.neural_network_trainer.window_size = 1
        config.neural_network_trainer.window_size_derivatives = 0
        config.neural_network_trainer.regression_window_size = 5

        config._update(extra_rasr_config)
        post_config._update(extra_rasr_post_config)

        return config, post_config
示例#5
0
    def create_config(cls, crp, feature_flow, alignment_options, word_boundaries,
                      label_scorer, align_node_options,
                      extra_config, extra_post_config, **kwargs):
        """
        :param recipe.rasr.csp.CommonSprintParameters csp:
        :param feature_flow:
        :param rasr.FeatureScorer feature_scorer:
        :param dict[str] alignment_options:
        :param bool word_boundaries:
        :param recipe.rasr.LabelScorer label_scorer:
        :param dict[str] align_node_options:
        :param extra_config:
        :param extra_post_config:
        :return: config, post_config
        :rtype: (rasr.SprintConfig, rasr.SprintConfig)
        """

        alignment_flow = cls.create_flow(feature_flow)
        align_node = 'speech-label-alignment'
        assert label_scorer is not None, 'need label scorer for label aligner'

        # acoustic model + lexicon for the flow nodes
        mapping = { 'corpus'        : 'acoustic-model-trainer.corpus',
                    'lexicon'       : [],
                    'acoustic_model': []
                    }
        for node in alignment_flow.get_node_names_by_filter(align_node):
            mapping['lexicon']       .append('acoustic-model-trainer.aligning-feature-extractor.feature-extraction.%s.model-combination.lexicon'        % node)
            mapping['acoustic_model'].append('acoustic-model-trainer.aligning-feature-extractor.feature-extraction.%s.model-combination.acoustic-model' % node)

        config, post_config = rasr.build_config_from_mapping(crp, mapping, parallelize=True)

        # alignment options for the flow nodes
        alignopt = {}
        if alignment_options is not None:
            alignopt.update(alignment_options)
        for node in alignment_flow.get_node_names_by_filter(align_node):
            node_config = config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction[node]
            # alignment node option
            for k, v in align_node_options.items():
                node_config[k] = v
            # alinger search option
            node_config.aligner = rasr.RasrConfig()
            for k, v in alignopt.items():
                node_config.aligner[k] = v
            # scorer
            label_scorer.apply_config('label-scorer', node_config, node_config)

        alignment_flow.apply_config('acoustic-model-trainer.aligning-feature-extractor.feature-extraction', config, post_config)

        config.action                                                                    = 'dry'
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.file = 'alignment.flow'
        post_config['*'].allow_overwrite                                                 = True

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#6
0
    def create_merge_config(cls, crp, extra_config_merge,
                            extra_post_config_merge, **kwargs):
        config, post_config = rasr.build_config_from_mapping(crp, {})

        config.acoustic_model_trainer.action = "combine-scatter-matrix-accumulators"

        config._update(extra_config_merge)
        post_config._update(extra_post_config_merge)

        return config, post_config
示例#7
0
    def create_merge_config(cls, crp, estimator, extra_config,
                            extra_post_config, **kwargs):
        config, post_config = rasr.build_config_from_mapping(crp, {})
        config.acoustic_model_trainer.action = "combine-mixture-sets"
        config.acoustic_model_trainer.mixture_set_trainer.estimator_type = estimator

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#8
0
    def create_config(
        cls,
        crp,
        old_mixtures,
        feature_flow,
        warping_map,
        warping_factors,
        split_first,
        min_observation_weight,
        extra_warping_args,
        extra_config,
        extra_post_config,
        **kwargs,
    ):
        label_flow = cls.create_flow(feature_flow, warping_map,
                                     extra_warping_args)

        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "corpus":
                "acoustic-model-trainer.corpus",
                "acoustic_model":
                "acoustic-model-trainer.mixture-set-trainer.acoustic-model",
            },
            parallelize=True,
        )

        config.acoustic_model_trainer.action = "accumulate-mixture-set-text-independent"
        config.acoustic_model_trainer.labeling.feature_extraction.file = "label.flow"
        config.acoustic_model_trainer.labeling.labels = warping_factors
        config.acoustic_model_trainer.mixture_set_trainer.split_first = split_first
        config.acoustic_model_trainer.mixture_set_trainer.old_mixture_set_file = (
            old_mixtures)
        config.acoustic_model_trainer.mixture_set_trainer.new_mixture_set_file = (
            "am.acc.$(TASK)")

        config.acoustic_model_trainer.mixture_set_trainer.covariance_tying = "none"
        config.acoustic_model_trainer.mixture_set_trainer.force_covariance_tying = True
        config.acoustic_model_trainer.mixture_set_trainer.minimum_observation_weight = (
            min_observation_weight)
        config.acoustic_model_trainer.mixture_set_trainer.splitter.minimum_mean_observation_weight = (
            min_observation_weight)
        config.acoustic_model_trainer.mixture_set_trainer.splitter.minimum_covariance_observation_weight = (
            min_observation_weight)

        label_flow.apply_config(
            "acoustic-model-trainer.labeling.feature-extraction", config,
            post_config)

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#9
0
    def create_config(
        cls, crp, feature_flow, extra_config, extra_post_config, **kwargs
    ):
        config, post_config = rasr.build_config_from_mapping(
            crp, {"corpus": "extraction.corpus"}, parallelize=True
        )
        config.extraction.feature_extraction.file = "cluster.flow"

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#10
0
    def create_full_sum_loss_config(
        self,
        num_classes,
        sprint_loss_config=None,
        sprint_loss_post_config=None,
        skip_segments=None,
        **kwargs,
    ):
        """

        :param num_classes:
        :param sprint_loss_config:
        :param sprint_loss_post_config:
        :param skip_segments:
        :param kwargs:
        :return:
        :rtype: (RasrConfig, RasrConfig)
        """
        crp = self.crp["loss"]
        mapping = {
            "acoustic_model": "*.model-combination.acoustic-model",
            "corpus": "*.corpus",
            "lexicon": "*.model-combination.lexicon",
        }

        config, post_config = rasr.build_config_from_mapping(
            crp, mapping, parallelize=(crp.concurrent == 1))
        # concrete action in PythonControl called from RETURNN SprintErrorSignals.py derived from Loss/Layers
        config.neural_network_trainer.action = "python-control"
        config.neural_network_trainer.python_control_loop_type = "python-control-loop"
        config.neural_network_trainer.extract_features = False
        # allophone-state transducer
        config["*"].transducer_builder_filter_out_invalid_allophones = True
        config["*"].fix_allophone_context_at_word_boundaries = True
        # Automaton manipulation (RASR): default CTC topology
        config.neural_network_trainer.alignment_fsa_exporter.add_blank_transition = (
            kwargs.get("add_blank_transition", True))
        config.neural_network_trainer.alignment_fsa_exporter.allow_label_loop = (
            kwargs.get("allow_label_loop", True))
        # default blank replace silence
        if kwargs.get("blank_label_index", None) is not None:
            config.neural_network_trainer.alignment_fsa_exporter.blank_label_index = (
                kwargs.get("blank_label_index", None))
            # maybe not needed
        config["*"].allow_for_silence_repetitions = False
        config["*"].number_of_classes = num_classes
        # config['*'].normalize_lemma_sequence_scores = True

        config._update(sprint_loss_config)
        post_config._update(sprint_loss_post_config)
        return config, post_config
示例#11
0
    def create_dump_config(cls, crp, samples_flow, extra_dump_config,
                           extra_dump_post_config, **kwargs):
        dump_flow = cls.create_dump_flow(crp, samples_flow)

        config, post_config = rasr.build_config_from_mapping(
            crp, {"corpus": "extraction.corpus"}, parallelize=True)
        config.extraction.feature_extraction.file = "dump.flow"
        config.extraction.feature_extraction["*"].allow_overwrite = True

        dump_flow.apply_config("extraction.feature-extraction", config,
                               post_config)

        config._update(extra_dump_config)
        post_config._update(extra_dump_post_config)

        return config, post_config
示例#12
0
    def create_config(cls, crp, extra_config, extra_post_config, **kwargs):
        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "acoustic_model": "allophone-tool.acoustic-model",
                "lexicon": "allophone-tool.lexicon",
            },
            parallelize=False,
        )

        config.allophone_tool.acoustic_model.allophones.store_to_file = "allophones"

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#13
0
    def create_accumulate_config(
        cls,
        crp,
        alignment_flow,
        extra_config_accumulate,
        extra_post_config_accumulate,
        **kwargs,
    ):
        """
        :param rasr.crp.CommonRasrParameters crp:
        :param rasr.flow.FlowNetwork alignment_flow:
        :param rasr.config.RasrConfig extra_config_accumulate:
        :param rasr.config.RasrConfig extra_post_config_accumulate:
        :param kwargs:
        :return:
        :rtype: (rasr.config.RasrConfig, rasr.config.RasrConfig)
        """
        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "corpus":
                "acoustic-model-trainer.corpus",
                "lexicon":
                "acoustic-model-trainer.cart-trainer.lexicon",
                "acoustic_model":
                "acoustic-model-trainer.cart-trainer.acoustic-model",
            },
            parallelize=True,
        )

        config.acoustic_model_trainer.action = "accumulate-cart-examples"
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.file = (
            "alignment.flow")
        config.acoustic_model_trainer.cart_trainer.example_file = (
            "cart.acc.xml.$(TASK).gz")

        alignment_flow.apply_config(
            "acoustic-model-trainer.aligning-feature-extractor.feature-extraction",
            config,
            post_config,
        )

        config._update(extra_config_accumulate)
        post_config._update(extra_post_config_accumulate)

        return config, post_config
示例#14
0
    def create_config(
        cls,
        crp,
        old_mixtures,
        feature_flow,
        alignment,
        split_first,
        extra_config,
        extra_post_config,
        **kwargs,
    ):
        alignment_flow = cls.create_flow(feature_flow, alignment)
        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "corpus":
                "acoustic-model-trainer.corpus",
                "lexicon":
                "acoustic-model-trainer.mixture-set-trainer.lexicon",
                "acoustic_model":
                "acoustic-model-trainer.mixture-set-trainer.acoustic-model",
            },
            parallelize=True,
        )

        config.acoustic_model_trainer.action = "accumulate-mixture-set-text-dependent"
        config.acoustic_model_trainer.mixture_set_trainer.split_first = split_first
        config.acoustic_model_trainer.mixture_set_trainer.old_mixture_set_file = (
            old_mixtures)
        config.acoustic_model_trainer.mixture_set_trainer.new_mixture_set_file = (
            "am.acc.$(TASK)")
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.file = (
            "alignment.flow")

        alignment_flow.apply_config(
            "acoustic-model-trainer.aligning-feature-extractor.feature-extraction",
            config,
            post_config,
        )

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#15
0
    def create_estimate_config(cls, crp, extra_config_estimate,
                               extra_post_config_estimate, **kwargs):
        config, post_config = rasr.build_config_from_mapping(crp, {})

        config.acoustic_model_trainer.action = (
            "estimate-scatter-matrices-from-accumulator")
        config.acoustic_model_trainer.scatter_matrix_estimator.between_class_scatter_matrix_file = (
            "between_class_scatter.matrix")
        config.acoustic_model_trainer.scatter_matrix_estimator.within_class_scatter_matrix_file = (
            "within_class_scatter.matrix")
        config.acoustic_model_trainer.scatter_matrix_estimator.total_scatter_matrix_file = (
            "total_scatter.matrix")
        config.acoustic_model_trainer.scatter_matrix_estimator.shall_normalize = True
        config.acoustic_model_trainer.scatter_matrix_estimator.output_precision = 20

        config._update(extra_config_estimate)
        post_config._update(extra_post_config_estimate)

        return config, post_config
示例#16
0
    def create_config(
        cls,
        crp,
        questions,
        cart_examples,
        variance_clipping,
        generate_cluster_file,
        extra_config,
        extra_post_config,
        **kwargs,
    ):
        """
        :param rasr.crp.CommonRasrParameters crp:
        :param Path|BasicCartQuestions|str questions:
        :param Path cart_examples:
        :param float variance_clipping:
        :param bool generate_cluster_file:
        :param rasr.config.RasrConfig extra_config:
        :param rasr.config.RasrConfig extra_post_config:
        """
        if not type(questions) == str and not tk.is_path(questions):
            questions_path = "questions.xml"
        else:
            questions_path = questions

        config, post_config = rasr.build_config_from_mapping(crp, {},
                                                             parallelize=False)

        config.acoustic_model_trainer.action = "estimate-cart"
        config.acoustic_model_trainer.cart_trainer.training_file = questions_path
        config.acoustic_model_trainer.cart_trainer.example_file = cart_examples
        config.acoustic_model_trainer.cart_trainer.decision_tree_file = (
            "cart.tree.xml.gz")
        if generate_cluster_file:
            config.acoustic_model_trainer.cart_trainer.cluster_file = (
                "cart.cluster.xml.gz")
        config.acoustic_model_trainer.cart_trainer.log_likelihood_gain.variance_clipping = (
            variance_clipping)

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#17
0
    def create_config(
        cls,
        crp,
        feature_flow,
        feature_scorer,
        extra_config,
        extra_post_config,
        **kwargs,
    ):
        """
        :param rasr.crp.CommonRasrParameters crp:
        :param rasr.flow.FlowNetwork feature_flow:
        :param rasr.feature_scorer.FeatureScorer feature_scorer:
        :param rasr.config.RasrConfig|None extra_config:
        :param rasr.config.RasrConfig|None extra_post_config:
        :param kwargs:
        :return:
        :rtype (rasr.config.RasrConfig, rasr.config.RasrConfig)
        """
        config, post_config = rasr.build_config_from_mapping(
            crp, {"corpus": "acoustic-model-trainer.corpus"}, parallelize=True)

        feature_scorer.apply_config(
            "acoustic-model-trainer.average-feature-scorer-activation.mixture-set",
            config,
            post_config,
        )
        feature_flow.apply_config(
            "acoustic-model-trainer.average-feature-scorer-activation.feature-extraction",
            config,
            post_config,
        )

        config.action = "calculate-average-feature-scorer-activation"
        config.acoustic_model_trainer.average_feature_scorer_activation.feature_extraction.file = (
            "feature.flow")
        config.acoustic_model_trainer.average_feature_scorer_activation.output.channel = (
            crp.default_log_channel)

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#18
0
    def create_config(cls, crp, extra_config, extra_post_config, **kwargs):
        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "acoustic_model": "allophone-tool.acoustic-model",
                "lexicon": "allophone-tool.lexicon",
            },
            parallelize=False,
        )

        config.allophone_tool.dump_state_tying.channel = "state-tying-channel"
        config.allophone_tool.channels.state_tying_channel.append = False
        config.allophone_tool.channels.state_tying_channel.compressed = False
        config.allophone_tool.channels.state_tying_channel.file = "state-tying"
        config.allophone_tool.channels.state_tying_channel.unbuffered = False

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#19
0
    def create_merge_config(cls, crp, extra_config_merge,
                            extra_post_config_merge, **kwargs):
        """
        :param rasr.crp.CommonRasrParameters crp:
        :param rasr.config.RasrConfig extra_config_merge:
        :param rasr.config.RasrConfig extra_post_config_merge:
        :param kwargs:
        :return:
        :rtype: (rasr.config.RasrConfig, rasr.config.RasrConfig)
        """
        config, post_config = rasr.build_config_from_mapping(crp, {})

        config.acoustic_model_trainer.action = "merge-cart-examples"
        config.acoustic_model_trainer.cart_trainer.merge_example_files = " ".join(
            "cart.acc.xml.%d.gz" % i for i in range(1, crp.concurrent + 1))
        config.acoustic_model_trainer.cart_trainer.example_file = "cart.sum.xml.gz"

        config._update(extra_config_merge)
        post_config._update(extra_post_config_merge)

        return config, post_config
示例#20
0
    def create_config(
        cls,
        crp,
        between_class_scatter_matrix,
        within_class_scatter_matrix,
        reduced_dimension,
        eigenvalue_problem_config,
        generalized_eigenvalue_problem_config,
        extra_config,
        extra_post_config,
    ):
        config, post_config = rasr.build_config_from_mapping(crp, {})

        config.acoustic_model_trainer.action = "estimate-lda"
        config.acoustic_model_trainer.lda_estimator.reduced_dimesion = (
            reduced_dimension  # yes, reduced-dimesion is the correct config parameter
        )
        config.acoustic_model_trainer.lda_estimator.output_precision = 20

        config.acoustic_model_trainer.lda_estimator.between_class_scatter_matrix_file = DelayedAdd(
            "xml:", between_class_scatter_matrix)
        config.acoustic_model_trainer.lda_estimator.within_class_scatter_matrix_file = (
            DelayedAdd("xml:", within_class_scatter_matrix))
        config.acoustic_model_trainer.lda_estimator.projector_matrix_file = (
            "xml:lda.matrix")

        config.acoustic_model_trainer.lda_estimator.results.channel = (
            crp.default_log_channel)
        config.acoustic_model_trainer.lda_estimator.generalized_eigenvalue_problem.condition_numbers.channel = (
            crp.default_log_channel)

        config.acoustic_model_trainer.lda_estimator.eigenvalue_problem = (
            eigenvalue_problem_config)
        config.acoustic_model_trainer.lda_estimator.generalized_eigenvalue_problem = (
            generalized_eigenvalue_problem_config)

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#21
0
    def create_config(cls, crp, extra_config, extra_post_config, **kwargs):
        dump_flow = cls.create_flow(**kwargs)

        mapping = {
            "corpus": "acoustic-model-trainer.corpus",
            "lexicon": [],
            "acoustic_model": [],
        }

        # acoustic model + lexicon for the flow nodes
        for node in dump_flow.get_node_names_by_filter(
                "speech-alignment-dump"):
            mapping["lexicon"].append(
                "acoustic-model-trainer.aligning-feature-extractor.feature-extraction.%s.model-combination.lexicon"
                % node)
            mapping["acoustic_model"].append(
                "acoustic-model-trainer.aligning-feature-extractor.feature-extraction.%s.model-combination.acoustic-model"
                % node)

        config, post_config = rasr.build_config_from_mapping(crp,
                                                             mapping,
                                                             parallelize=True)

        config.acoustic_model_trainer.action = "dry"
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.file = (
            "dump.flow")
        post_config["*"].allow_overwrite = True

        dump_flow.apply_config(
            "acoustic-model-trainer.aligning-feature-extractor.feature-extraction",
            config,
            post_config,
        )

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#22
0
    def create_accumulate_config(
        cls,
        crp,
        alignment_flow,
        extra_config_accumulate,
        extra_post_config_accumulate,
        **kwargs,
    ):
        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "corpus":
                "acoustic-model-trainer.corpus",
                "lexicon":
                "acoustic-model-trainer.scatter-matrices-estimator.lexicon",
                "acoustic_model":
                "acoustic-model-trainer.scatter-matrices-estimator.acoustic-model",
            },
            parallelize=True,
        )

        config.acoustic_model_trainer.action = (
            "estimate-scatter-matrices-text-dependent")
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.file = (
            "alignment.flow")
        config.acoustic_model_trainer.scatter_matrices_estimator.new_accumulator_file = (
            "scatter.acc.$(TASK)")

        alignment_flow.apply_config(
            "acoustic-model-trainer.aligning-feature-extractor.feature-extraction",
            config,
            post_config,
        )

        config._update(extra_config_accumulate)
        post_config._update(extra_post_config_accumulate)

        return config, post_config
示例#23
0
    def create_convert_config(
        cls,
        crp,
        timestamp_flow,
        timestamp_port,
        extra_convert_config,
        extra_convert_post_config,
        **kwargs,
    ):
        convert_flow = cls.create_convert_flow(crp, timestamp_flow,
                                               timestamp_port)

        config, post_config = rasr.build_config_from_mapping(
            crp, {"corpus": "extraction.corpus"}, parallelize=True)
        config.extraction.feature_extraction.file = "convert.flow"
        config.extraction.feature_extraction["*"].allow_overwrite = True

        convert_flow.apply_config("extraction.feature-extraction", config,
                                  post_config)

        config._update(extra_convert_config)
        post_config._update(extra_convert_post_config)

        return config, post_config
示例#24
0
    def create_config(
        cls,
        crp,
        feature_flow,
        feature_scorer,
        denominator_path,
        mem,
        alignment_options,
        short_pauses,
        extra_config,
        extra_post_config,
        **kwargs,
    ):

        alignment_flow = cls.create_flow(feature_flow)

        alignopt = {
            "increase-pruning-until-no-score-difference": True,
            "min-acoustic-pruning": 1000,
            "max-acoustic-pruning": 512000,
            "acoustic-pruning-increment-factor": 2,
            "min-average-number-of-states": 12,
        }

        if alignment_options is not None:
            alignopt.update(alignment_options)

        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "corpus":
                "lattice-processor.corpus",
                "lexicon": [
                    "lattice-processor.topology-reader.model-combination.lexicon",
                    "lattice-processor.rescoring.tdps.model-combination.lexicon",
                    "lattice-processor.rescoring.segmentwise-alignment.model-combination.lexicon",
                ],
                "acoustic_model": [
                    "lattice-processor.rescoring.tdps.model-combination.acoustic-model",
                    "lattice-processor.rescoring.segmentwise-alignment.model-combination.acoustic-model",
                ],
            },
            parallelize=True,
        )
        # Define and name actions
        config.lattice_processor.actions = "read,rescore,write"
        config.lattice_processor.selections = (
            "topology-reader,rescoring,accuracy-writer")

        # Reader
        config.lattice_processor.topology_reader.readers = "total"
        config.lattice_processor.topology_reader.lattice_archive.path = denominator_path

        # rescoring
        config.lattice_processor.rescoring.share_acoustic_model = True
        config.lattice_processor.rescoring.tdp_rescorers = "tdps"
        config.lattice_processor.rescoring.distance_rescorers = "accuracy"
        config.lattice_processor.rescoring.accuracy.spoken_source = "orthography"

        # Parameters for Am::ClassicAcousticModel
        for node in ["tdps", "segmentwise-alignment"]:
            feature_scorer.apply_config(
                "lattice-processor.rescoring.{}.model-combination.acoustic-model.mixture-set"
                .format(node),
                config,
                post_config,
            )

        # rescoring aligner
        config.lattice_processor.rescoring.segmentwise_alignment.port_name = "features"
        config.lattice_processor.rescoring.segmentwise_alignment.alignment_cache.alignment_label_type = (
            "emission-ids")
        config.lattice_processor.rescoring.segmentwise_alignment.alignment_cache.path = (
            "segmentwise-alignment.$(TASK)")
        post_config.lattice_processor.rescoring.segmentwise_alignment.model_acceptor_cache.log.channel = (
            "nil")
        post_config.lattice_processor.rescoring.segmentwise_alignment.aligner.statistics.channel = (
            "nil")
        node = config.lattice_processor.rescoring.segmentwise_alignment.aligner
        for k, v in alignopt.items():
            node[k] = v

        alignment_flow.apply_config(
            "lattice-processor.rescoring.segmentwise-feature-extraction.feature-extraction",
            config,
            post_config,
        )
        config.lattice_processor.rescoring.segmentwise_feature_extraction.feature_extraction.file = (
            "alignment.flow")

        # writer
        config.lattice_processor.accuracy_writer.lattice_archive.path = (
            "accuracy.$(TASK)")

        return config, post_config
示例#25
0
    def create_config(
        cls,
        crp,
        feature_flow,
        alignment,
        feature_scorer,
        omega,
        filterbank_node,
        extra_config,
        extra_post_config,
        **kwargs,
    ):
        feature_flow = cls.create_flow(feature_flow, alignment, filterbank_node)

        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "acoustic_model": "acoustic-model-trainer.feature-scorer.acoustic-model",
                "corpus": "acoustic-model-trainer.corpus",
                "lexicon": "acoustic-model-trainer.feature-scorer.lexicon",
            },
            parallelize=True,
        )

        config.action = "score-features"

        post_config["*"].segment_map_channel.append = False
        post_config["*"].segment_map_channel.compressed = False
        post_config["*"].segment_map_channel.encoding = "UTF-8"
        post_config["*"].segment_map_channel.file = "$(SCORE-LOGFILE)"
        post_config["*"].segment_map_channel.unbuffered = False

        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.file = (
            "feature_and_alignment.flow"
        )
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.warping_alpha = (
            "$(WARPING-FACTOR)"
        )
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.warping_omega = (
            omega
        )
        config.acoustic_model_trainer.feature_scorer.corpus_key.template = "<segment>"
        post_config.acoustic_model_trainer.feature_scorer.output.channel = (
            "segment-map-channel"
        )

        feature_flow.apply_config(
            "acoustic-model-trainer.aligning-feature-extractor.feature-extraction",
            config,
            post_config,
        )
        feature_scorer.apply_config(
            "acoustic-model-trainer.feature-scorer.acoustic-model.mixture-set",
            config,
            post_config,
        )

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#26
0
    def create_config(
        cls,
        crp,
        raw_denominator_path,
        numerator_path,
        mem,
        search_options,
        extra_config,
        extra_post_config,
        **kwargs,
    ):

        search_opts = {
            "pruning-threshold": 15,
            "pruning-threshold-relative": True
        }

        if search_options:
            search_opts.update(search_options)

        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "corpus":
                "lattice-processor.corpus",
                "lexicon": [
                    "lattice-processor.lattice-reader.model-combination.lexicon",
                    "lattice-processor.merging.model-combination.lexicon",
                ],
                "acoustic_model":
                "lattice-processor.merging.acoustic-model",
                "language_model": [
                    "lattice-processor.lattice-reader.lm",
                    "lattice-processor.merging.lm",
                ],
            },
            parallelize=True,
        )

        # Define and name actions
        config.lattice_processor.actions = (
            "read,linear-combination,prune,graph-error-rate,merge,write")
        config.lattice_processor.selections = (
            "lattice-reader,linear-combination,pruning,ger,merging,lattice-writer"
        )

        # Reader
        config.lattice_processor.lattice_reader.readers = "acoustic,lm"
        config.lattice_processor.lattice_reader.lattice_archive.path = (
            raw_denominator_path)

        # linear-combination
        config["*"].LM_SCALE = crp.language_model_config.scale
        config.lattice_processor.linear_combination.scales = [
            "$[1.0/$(LM-SCALE)]"
        ] * 2

        # pruning
        config.lattice_processor.pruning.threshold = search_opts[
            "pruning-threshold"]
        config.lattice_processor.pruning.threshold_is_relative = search_opts[
            "pruning-threshold-relative"]

        # merging
        config.lattice_processor.merging.fsa_prefix = "acoustic"
        config.lattice_processor.merging.merge_only_if_spoken_not_in_lattice = True
        config.lattice_processor.merging.numerator_lattice_archive.path = numerator_path

        # graph error rate [needs no config]

        # writer
        config.lattice_processor.lattice_writer.lattice_archive.path = (
            "denominator.$(TASK)")

        # additional config
        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#27
0
    def create_config(
        cls,
        crp,
        feature_flow,
        feature_scorer,
        search_parameters,
        lm_lookahead,
        lookahead_options,
        mem,
        model_combination_config,
        model_combination_post_config,
        extra_config,
        extra_post_config,
        **kwargs,
    ):

        lm_gc = recognition.AdvancedTreeSearchLmImageAndGlobalCacheJob(
            crp, feature_scorer, extra_config, extra_post_config)
        lm_gc.rqmt["mem"] = mem

        if search_parameters is None:
            search_parameters = {}

        default_search_parameters = {
            "beam-pruning": 15,
            "beam-pruning-limit": 100000,
            "word-end-pruning": 0.5,
            "word-end-pruning-limit": 10000,
        }
        default_search_parameters.update(search_parameters)
        search_parameters = default_search_parameters

        la_opts = {
            "history_limit": 1,
            "tree_cutoff": 30,
            "minimum_representation": 1,
            "cache_low": 2000,
            "cache_high": 3000,
            "laziness": 15,
        }
        if lookahead_options is not None:
            la_opts.update(lookahead_options)

        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "corpus": "speech-recognizer.corpus",
                "lexicon": "speech-recognizer.model-combination.lexicon",
                "acoustic_model":
                "speech-recognizer.model-combination.acoustic-model",
                "language_model": "speech-recognizer.model-combination.lm",
            },
            parallelize=True,
        )

        # Parameters for Speech::Recognizer
        config.speech_recognizer.search_type = "advanced-tree-search"

        # Parameters for Speech::DataSource or Sparse::DataSource
        config.speech_recognizer.feature_extraction.file = "feature.flow"
        feature_flow.apply_config("speech-recognizer.feature-extraction",
                                  config, post_config)

        # Parameters for Am::ClassicAcousticModel
        feature_scorer.apply_config(
            "speech-recognizer.model-combination.acoustic-model.mixture-set",
            config,
            post_config,
        )

        # Parameters for Speech::Model combination (besides AM and LM parameters)
        config.speech_recognizer.model_combination.pronunciation_scale = 3.0
        config.speech_recognizer.model_combination._update(
            model_combination_config)
        post_config.speech_recognizer.model_combination._update(
            model_combination_post_config)

        # Search parameters
        config.speech_recognizer.recognizer.create_lattice = True
        config.speech_recognizer.store_lattices = True

        config.speech_recognizer.recognizer.beam_pruning = search_parameters[
            "beam-pruning"]
        config.speech_recognizer.recognizer.beam_pruning_limit = search_parameters[
            "beam-pruning-limit"]
        config.speech_recognizer.recognizer.word_end_pruning = search_parameters[
            "word-end-pruning"]
        config.speech_recognizer.recognizer.word_end_pruning_limit = search_parameters[
            "word-end-pruning-limit"]

        config.speech_recognizer.recognizer.lm_lookahead = rasr.RasrConfig()
        config.speech_recognizer.recognizer.lm_lookahead._value = lm_lookahead
        config.speech_recognizer.recognizer.optimize_lattice = "simple"
        if lm_lookahead:
            config.speech_recognizer.recognizer.lm_lookahead_laziness = la_opts[
                "laziness"]
            config.speech_recognizer.recognizer.lm_lookahead.history_limit = la_opts[
                "history_limit"]
            config.speech_recognizer.recognizer.lm_lookahead.tree_cutoff = la_opts[
                "tree_cutoff"]
            config.speech_recognizer.recognizer.lm_lookahead.minimum_representation = (
                la_opts["minimum_representation"])
            post_config.speech_recognizer.recognizer.lm_lookahead.cache_size_low = (
                la_opts["cache_low"])
            post_config.speech_recognizer.recognizer.lm_lookahead.cache_size_high = (
                la_opts["cache_high"])

        post_config.speech_recognizer.global_cache.read_only = True
        post_config.speech_recognizer.global_cache.file = lm_gc.out_global_cache
        post_config.speech_recognizer.model_combination.lm.image = lm_gc.lm_image

        # Lattice writer options
        config.speech_recognizer.lattice_archive.path = "raw-denominator.$(TASK)"
        post_config.speech_recognizer.lattice_archive.info = True

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#28
0
    def create_config(
        cls,
        crp,
        feature_flow,
        feature_scorer,
        alignment_options,
        extra_config,
        extra_post_config,
        **kwargs,
    ):
        alignment_flow = cls.create_flow(feature_flow)

        alignopt = {
            "increase-pruning-until-no-score-difference": True,
            "min-acoustic-pruning": 500,
            "max-acoustic-pruning": 10000,
            "acoustic-pruning-increment-factor": 2,
        }
        if alignment_options is not None:
            alignopt.update(alignment_options)

        mapping = {
            "corpus": "acoustic-model-trainer.corpus",
            "lexicon": [],
            "acoustic_model": [],
        }

        # acoustic model + lexicon for the flow nodes
        for node in alignment_flow.get_node_names_by_filter(
                "speech-alignment"):
            mapping["lexicon"].append(
                "acoustic-model-trainer.aligning-feature-extractor.feature-extraction.%s.model-combination.lexicon"
                % node)
            mapping["acoustic_model"].append(
                "acoustic-model-trainer.aligning-feature-extractor.feature-extraction.%s.model-combination.acoustic-model"
                % node)

        config, post_config = rasr.build_config_from_mapping(crp,
                                                             mapping,
                                                             parallelize=True)

        # alignment options for the flow nodes
        for node in alignment_flow.get_node_names_by_filter(
                "speech-alignment"):
            node_config = config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction[
                node]

            node_config.aligner = rasr.RasrConfig()
            for k, v in alignopt.items():
                node_config.aligner[k] = v
            feature_scorer.apply_config(
                "model-combination.acoustic-model.mixture-set", node_config,
                node_config)

            node_config.store_lattices = True
            node_config.lattice_archive.path = "numerator.$(TASK)"

        alignment_flow.apply_config(
            "acoustic-model-trainer.aligning-feature-extractor.feature-extraction",
            config,
            post_config,
        )

        config.action = "dry"
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.file = (
            "alignment.flow")
        post_config["*"].allow_overwrite = True

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
    def create_config(
        cls,
        crp,
        feature_flow,
        feature_scorer,
        lattice_cache,
        global_scale,
        confidence_threshold,
        weight_scale,
        ref_alignment_path,
        extra_config,
        extra_post_config,
        **kwargs,
    ):
        alignment_flow = cls.create_flow(
            feature_flow,
            lattice_cache,
            global_scale,
            confidence_threshold,
            weight_scale,
            ref_alignment_path,
        )
        mapping = {
            "corpus": "acoustic-model-trainer.corpus",
            "lexicon": [],
            "acoustic_model": [],
        }

        # acoustic model + lexicon for the flow nodes
        for node_type in [
                "model-combination",
                "alignment-weights-by-tied-state-alignment-weights",
        ]:
            for node in alignment_flow.get_node_names_by_filter(node_type):
                mapping["lexicon"].append(
                    "acoustic-model-trainer.aligning-feature-extractor.feature-extraction.%s.model-combination.lexicon"
                    % node)
                mapping["acoustic_model"].append(
                    "acoustic-model-trainer.aligning-feature-extractor.feature-extraction.%s.model-combination.acoustic-model"
                    % node)

        config, post_config = rasr.build_config_from_mapping(crp,
                                                             mapping,
                                                             parallelize=True)

        for node_type in [
                "model-combination",
                "alignment-weights-by-tied-state-alignment-weights",
        ]:
            for node in alignment_flow.get_node_names_by_filter(node_type):
                node_config = config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction[
                    node]
                node_post_config = post_config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction[
                    node]
                feature_scorer.apply_config(
                    "model-combination.acoustic-model.mixture-set",
                    node_config,
                    node_post_config,
                )

        alignment_flow.apply_config(
            "acoustic-model-trainer.aligning-feature-extractor.feature-extraction",
            config,
            post_config,
        )

        config.action = "dry"
        config.acoustic_model_trainer.aligning_feature_extractor.feature_extraction.file = (
            "alignment.flow")
        post_config["*"].allow_overwrite = True

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config
示例#30
0
    def create_config(
        cls,
        crp,
        lattice_path,
        pruning_threshold,
        phone_coverage,
        nonword_phones,
        max_arcs_per_second,
        max_arcs_per_segment,
        output_format,
        pronunciation_scale,
        extra_config,
        extra_post_config,
    ):
        config, post_config = rasr.build_config_from_mapping(
            crp,
            {
                "corpus": "flf-lattice-tool.corpus",
                "lexicon": "flf-lattice-tool.lexicon",
            },
            parallelize=True,
        )

        config.flf_lattice_tool.network.initial_nodes = "segment"

        config.flf_lattice_tool.network.segment.type = "speech-segment"
        config.flf_lattice_tool.network.segment.links = (
            "0->archive-reader:1 0->archive-writer:1"
        )

        config.flf_lattice_tool.network.archive_reader.type = "archive-reader"
        config.flf_lattice_tool.network.archive_reader.format = "flf"
        config.flf_lattice_tool.network.archive_reader.path = lattice_path
        config.flf_lattice_tool.network.archive_reader.links = "0->prune:0"

        config.flf_lattice_tool.network.prune.type = "prune-posterior"
        config.flf_lattice_tool.network.prune.threshold = pruning_threshold
        config.flf_lattice_tool.network.prune.nonword_phones = nonword_phones
        config.flf_lattice_tool.network.prune.min_phone_coverage = phone_coverage
        if max_arcs_per_second is not None:
            config.flf_lattice_tool.network.prune.max_arcs_per_second = (
                max_arcs_per_second
            )
        if max_arcs_per_segment is not None:
            config.flf_lattice_tool.network.prune.max_arcs_per_segment = (
                max_arcs_per_segment
            )
        config.flf_lattice_tool.network.prune.links = "apply-pruning"

        config.flf_lattice_tool.network.apply_pruning.type = "copy"
        config.flf_lattice_tool.network.apply_pruning.trim = True
        config.flf_lattice_tool.network.apply_pruning.normalize = True
        config.flf_lattice_tool.network.apply_pruning.info = True
        config.flf_lattice_tool.network.apply_pruning.links = "archive-writer"

        config.flf_lattice_tool.network.archive_writer.type = "archive-writer"
        config.flf_lattice_tool.network.archive_writer.path = (
            "pruned_lattice.cache.$(TASK)"
        )
        config.flf_lattice_tool.network.archive_writer.format = output_format
        config.flf_lattice_tool.network.archive_writer.flf.partial.keys = "am lm"
        config.flf_lattice_tool.network.archive_writer.flf.partial.add = False
        config.flf_lattice_tool.network.archive_writer.links = "sink"
        if output_format == "lattice-processor":
            config.flf_lattice_tool.network.archive_writer.lattice_processor.pronunciation_scale = (
                pronunciation_scale
            )

        config.flf_lattice_tool.network.sink.type = "sink"
        config.flf_lattice_tool.network.sink.warn_on_empty_lattice = True
        config.flf_lattice_tool.network.sink.error_on_empty_lattice = False

        config._update(extra_config)
        post_config._update(extra_post_config)

        return config, post_config