def from_parameters(params: Parameters) -> ResourceRequest:
     return SlurmResourceRequest(
         partition=params.string("partition"),
         num_cpus=params.optional_positive_integer("num_cpus"),
         num_gpus=params.optional_integer("num_gpus"),
         memory=MemoryAmount.parse(params.string("memory"))
         if "memory" in params
         else None,
         job_time_in_minutes=params.optional_integer("job_time_in_minutes"),
     )
Example #2
0
    def from_parameters(
        params: Parameters,
        *,
        graph_logger: Optional[HypothesisLogger] = None
    ) -> "ObjectPursuitLearner":  # type: ignore
        log_word_hypotheses_dir = params.optional_creatable_directory(
            "log_word_hypotheses_dir")
        if log_word_hypotheses_dir:
            logging.info("Hypotheses will be logged to %s",
                         log_word_hypotheses_dir)

        rng = Random()
        rng.seed(params.optional_integer("random_seed", default=0))

        return ObjectPursuitLearner(
            learning_factor=params.floating_point("learning_factor"),
            graph_match_confirmation_threshold=params.floating_point(
                "graph_match_confirmation_threshold"),
            lexicon_entry_threshold=params.floating_point(
                "lexicon_entry_threshold"),
            smoothing_parameter=params.floating_point("smoothing_parameter"),
            hypothesis_logger=graph_logger,
            log_learned_item_hypotheses_to=log_word_hypotheses_dir,
            rng=rng,
            ontology=GAILA_PHASE_1_ONTOLOGY,
            language_mode=params.enum("language_mode",
                                      LanguageMode,
                                      default=LanguageMode.ENGLISH),
        )
Example #3
0
    def from_params(
        params: Parameters,
        *,
        ontology: Optional[Ontology] = None,
        graph_logger: Optional[GraphLogger] = None,
    ) -> "ProposeButVerifyObjectLearner":
        rng = RandomChooser.for_seed(
            params.optional_integer("random_seed", default=0))

        return ProposeButVerifyObjectLearner(
            graph_match_confirmation_threshold=params.floating_point(
                "graph_match_confirmation_threshold", default=0.8),
            graph_logger=graph_logger,
            rng=rng,
            ontology=ontology if ontology else GAILA_PHASE_1_ONTOLOGY,
            language_mode=params.enum("language_mode",
                                      LanguageMode,
                                      default=LanguageMode.ENGLISH),
        )
Example #4
0
def build_object_learner_factory(
        params: Parameters, beam_size: int,
        language_mode: LanguageMode) -> TemplateLearner:
    learner_type = params.string(
        "learner_type",
        valid_options=[
            "subset", "pbv", "cross-situational", "pursuit", "recognizer"
        ],
        default="subset",
    )
    ontology, objects, perception_gen = ONTOLOGY_STR_TO_ONTOLOGY[params.string(
        "ontology",
        valid_options=ONTOLOGY_STR_TO_ONTOLOGY.keys(),
        default="phase2")]

    if learner_type == "subset":
        return SubsetObjectLearnerNew(ontology=ontology,
                                      beam_size=beam_size,
                                      language_mode=language_mode)
    elif learner_type == "pbv":
        chooser = RandomChooser.for_seed(
            params.optional_integer("random_seed", default=0))
        return ProposeButVerifyObjectLearner(
            graph_match_confirmation_threshold=params.floating_point(
                "graph_match_confirmation_threshold", default=0.8),
            rng=chooser,
            ontology=ontology,
            language_mode=language_mode,
        )
    elif learner_type == "cross-situational":
        return CrossSituationalObjectLearner(
            graph_match_confirmation_threshold=params.floating_point(
                "graph_match_confirmation_threshold"),
            lexicon_entry_threshold=params.floating_point(
                "lexicon_entry_threshold"),
            smoothing_parameter=params.floating_point("smoothing_parameter"),
            expected_number_of_meanings=len(
                ontology.nodes_with_properties(THING)),
            ontology=ontology,
            language_mode=language_mode,
        )
    elif learner_type == "pursuit":
        rng = random.Random()
        rng.seed(params.integer("random_seed", default=0))
        return PursuitObjectLearnerNew(
            learning_factor=params.floating_point("learning_factor"),
            graph_match_confirmation_threshold=params.floating_point(
                "graph_match_confirmation_threshold"),
            lexicon_entry_threshold=params.floating_point(
                "lexicon_entry_threshold"),
            rng=rng,
            smoothing_parameter=params.floating_point("smoothing_parameter"),
            ontology=ontology,
            language_mode=language_mode,
        )
    elif learner_type == "recognizer":
        object_recognizer = ObjectRecognizer.for_ontology_types(
            objects,
            determiners=ENGLISH_DETERMINERS,
            ontology=ontology,
            language_mode=language_mode,
            perception_generator=perception_gen,
        )
        return ObjectRecognizerAsTemplateLearner(
            object_recognizer=object_recognizer, language_mode=language_mode)
    else:
        raise RuntimeError("Object learner type invalid")
Example #5
0
def curriculum_from_params(params: Parameters,
                           language_mode: LanguageMode = LanguageMode.ENGLISH):
    str_to_train_test_curriculum: Mapping[str, Tuple[
        CURRICULUM_BUILDER, Optional[CURRICULUM_BUILDER]]] = {
            "m6-deniz": (make_m6_curriculum, None),
            "each-object-by-itself": (
                build_each_object_by_itself_curriculum_train,
                build_each_object_by_itself_curriculum_test,
            ),
            "pursuit": (
                build_pursuit_curriculum,
                build_each_object_by_itself_curriculum_test,
            ),
            "m6-preposition": (build_m6_prepositions_curriculum, None),
            "m9-objects": (build_gaila_phase1_object_curriculum, None),
            "m9-attributes": (build_gaila_phase1_attribute_curriculum, None),
            "chinese-classifiers": (build_classifier_curriculum, None),
            "m9-relations": (build_gaila_phase1_relation_curriculum, None),
            "m9-events": (build_gaila_phase1_verb_curriculum, None),
            "m9-debug":
            (build_debug_curriculum_train, build_debug_curriculum_test),
            "m9-complete": (build_gaila_phase_1_curriculum, None),
            "m13-imprecise-size": (make_imprecise_size_curriculum, None),
            "m13-imprecise-temporal":
            (make_imprecise_temporal_descriptions, None),
            "m13-subtle-verb-distinction":
            (make_subtle_verb_distinctions_curriculum, None),
            "m13-object-restrictions":
            (build_functionally_defined_objects_curriculum, None),
            "m13-functionally-defined-objects": (
                build_functionally_defined_objects_train_curriculum,
                build_functionally_defined_objects_curriculum,
            ),
            "m13-generics": (build_generics_curriculum, None),
            "m13-complete": (build_gaila_m13_curriculum, None),
            "m13-verbs-with-dynamic-prepositions": (
                make_verb_with_dynamic_prepositions_curriculum,
                None,
            ),
            "m13-shuffled": (build_m13_shuffled_curriculum,
                             build_gaila_m13_curriculum),
            "m13-relations": (make_prepositions_curriculum, None),
            "actions-and-generics-curriculum":
            (build_actions_and_generics_curriculum, None),
            "m15-object-noise-experiments": (
                build_object_learner_experiment_curriculum_train,
                build_each_object_by_itself_curriculum_test,
            ),
            "m18-integrated-learners-experiment": (
                integrated_pursuit_learner_experiment_curriculum,
                integrated_pursuit_learner_experiment_test,
            ),
        }

    curriculum_name = params.string("curriculum",
                                    str_to_train_test_curriculum.keys())
    language_generator = (
        integrated_experiment_language_generator(language_mode)
        if curriculum_name == "m18-integrated-learners-experiment" else
        phase2_language_generator(language_mode))

    if params.has_namespace("pursuit-curriculum-params"):
        pursuit_curriculum_params = params.namespace(
            "pursuit-curriculum-params")
    else:
        pursuit_curriculum_params = Parameters.empty()
    use_path_instead_of_goal = params.boolean("use-path-instead-of-goal",
                                              default=False)

    (training_instance_groups,
     test_instance_groups) = str_to_train_test_curriculum[curriculum_name]

    num_samples = params.optional_positive_integer("num_samples")
    # We need to be able to accept 0 as the number of noise objects but optional_integer doesn't currently
    # support specifying a range of acceptable values: https://github.com/isi-vista/vistautils/issues/142
    num_noise_objects = params.optional_integer("num_noise_objects")

    if curriculum_name == "pursuit":
        return (
            training_instance_groups(
                num_samples,
                num_noise_objects,
                language_generator,
                pursuit_curriculum_params=pursuit_curriculum_params,
            ),
            test_instance_groups(num_samples, num_noise_objects,
                                 language_generator)
            if test_instance_groups else [],
        )

    # optional argument to use path instead of goal
    elif use_path_instead_of_goal and curriculum_name in [
            "m13-complete",
            "m13-shuffled",
            "m13-verbs-with-dynamic-prepositions",
    ]:
        return (
            training_instance_groups(
                num_samples,
                num_noise_objects,
                language_generator,
                use_path_instead_of_goal,
            ),
            test_instance_groups(num_samples, num_noise_objects,
                                 language_generator)
            if test_instance_groups else [],
        )
    elif curriculum_name in (
            "m15-object-noise-experiments",
            "m18-integrated-learners-experiment",
    ):
        return (
            training_instance_groups(
                num_samples,
                num_noise_objects,
                language_generator,
                params=params.namespace_or_empty("train_curriculum"),
            ),
            test_instance_groups(
                5,
                0,
                language_generator,
                params=params.namespace_or_empty("test_curriculum"),
            ) if test_instance_groups else [],
        )
    return (
        training_instance_groups(num_samples, num_noise_objects,
                                 language_generator),
        test_instance_groups(num_samples, num_noise_objects,
                             language_generator)
        if test_instance_groups else [],
    )