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"), )
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), )
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), )
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")
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 [], )