def test_should_get_intent_when_filter(self): # Given dataset_stream = io.StringIO(""" --- type: intent name: MakeTea utterances: - make me a cup of tea - i want two cups of tea please - can you prepare one cup of tea ? --- type: intent name: MakeCoffee utterances: - make me a cup of coffee please - brew two cups of coffee - can you prepare one cup of coffee""") dataset = Dataset.from_yaml_files("en", [dataset_stream]).json classifier = LogRegIntentClassifier(random_state=42).fit(dataset) # When text1 = "Make me two cups of tea" res1 = classifier.get_intent(text1, ["MakeCoffee", "MakeTea"]) text2 = "Make me two cups of tea" res2 = classifier.get_intent(text2, ["MakeCoffee"]) text3 = "bla bla bla" res3 = classifier.get_intent(text3, ["MakeCoffee"]) # Then self.assertEqual("MakeTea", res1[RES_INTENT_NAME]) self.assertEqual("MakeCoffee", res2[RES_INTENT_NAME]) self.assertEqual(None, res3[RES_INTENT_NAME])
def test_should_not_get_intent_when_not_fitted(self): # Given intent_classifier = LogRegIntentClassifier() # When / Then self.assertFalse(intent_classifier.fitted) with self.assertRaises(NotTrained): intent_classifier.get_intent("foobar")
def test_empty_vocabulary_should_fit_and_return_none_intent( self, mocked_build_training): # Given dataset_stream = io.StringIO(""" --- type: intent name: dummy_intent_1 utterances: - "[dummy_slot_name:dummy_entity_1](...)" --- type: entity name: dummy_entity_1 automatically_extensible: true use_synonyms: false matching_strictness: 1.0 values: - ... """) dataset = Dataset.from_yaml_files("en", [dataset_stream]).json text = " " noise_size = 6 utterances = [text] + [text] * noise_size utterances = [text_to_utterance(t) for t in utterances] labels = [0] + [1] * noise_size intent_list = ["dummy_intent_1", None] mocked_build_training.return_value = utterances, labels, intent_list # When / Then intent_classifier = LogRegIntentClassifier().fit(dataset) intent = intent_classifier.get_intent("no intent there") self.assertEqual(intent_classification_result(None, 1.0), intent)
def test_should_get_none_intent_when_empty_input(self): # Given dataset_stream = io.StringIO(""" --- type: intent name: my_first_intent utterances: - how are you - hello how are you? - what's up --- type: intent name: my_second_intent utterances: - what is the weather today ? - does it rain - will it rain tomorrow""") dataset = Dataset.from_yaml_files("en", [dataset_stream]).json classifier = LogRegIntentClassifier().fit(dataset) text = "" # When result = classifier.get_intent(text) # Then self.assertEqual(intent_classification_result(None, 1.0), result)
def test_should_get_intent(self): # Given dataset_stream = io.StringIO(""" --- type: intent name: my_first_intent utterances: - how are you - hello how are you? - what's up --- type: intent name: my_second_intent utterances: - what is the weather today ? - does it rain - will it rain tomorrow""") dataset = Dataset.from_yaml_files("en", [dataset_stream]).json classifier = LogRegIntentClassifier(random_state=42).fit(dataset) text = "hey how are you doing ?" # When res = classifier.get_intent(text) intent = res[RES_INTENT_NAME] # Then self.assertEqual("my_first_intent", intent)
def test_intent_classifier_should_get_intent_when_filter(self): # Given dataset = validate_and_format_dataset(BEVERAGE_DATASET) classifier = LogRegIntentClassifier().fit(dataset) # When text1 = "Make me two cups of tea" res1 = classifier.get_intent(text1, ["MakeCoffee", "MakeTea"]) text2 = "Make me two cups of tea" res2 = classifier.get_intent(text2, ["MakeCoffee"]) text3 = "bla bla bla" res3 = classifier.get_intent(text3, ["MakeCoffee"]) # Then self.assertEqual("MakeTea", res1[RES_INTENT_NAME]) self.assertEqual("MakeCoffee", res2[RES_INTENT_NAME]) self.assertEqual(None, res3)
def test_should_get_none_if_empty_dataset(self): # Given dataset = validate_and_format_dataset(get_empty_dataset(LANGUAGE_EN)) classifier = LogRegIntentClassifier().fit(dataset) text = "this is a dummy query" # When intent = classifier.get_intent(text) # Then expected_intent = None self.assertEqual(intent, expected_intent)
def test_should_get_none_intent_when_empty_dataset(self): # Given dataset = get_empty_dataset(LANGUAGE_EN) classifier = LogRegIntentClassifier().fit(dataset) text = "this is a dummy query" # When intent = classifier.get_intent(text) # Then expected_intent = intent_classification_result(None, 1.0) self.assertEqual(intent, expected_intent)
def test_intent_classifier_should_get_intent(self): # Given dataset = validate_and_format_dataset(SAMPLE_DATASET) classifier = LogRegIntentClassifier().fit(dataset) text = "This is a dummy_3 query from another intent" # When res = classifier.get_intent(text) intent = res[RES_INTENT_NAME] # Then expected_intent = "dummy_intent_2" self.assertEqual(intent, expected_intent)
def test_empty_vocabulary_should_fit_and_return_none_intent( self, mocked_build_training): # Given language = LANGUAGE_EN dataset = { "entities": { "dummy_entity_1": { "automatically_extensible": True, "use_synonyms": False, "data": [ { "value": "...", "synonyms": [], } ], "matching_strictness": 1.0 } }, "intents": { "dummy_intent_1": { "utterances": [ { "data": [ { "text": "...", "slot_name": "dummy_slot_name", "entity": "dummy_entity_1" } ] } ] } }, "language": language } dataset = validate_and_format_dataset(dataset) text = " " noise_size = 6 utterances = [text] + [text] * noise_size utterances = [text_to_utterance(t) for t in utterances] labels = [0] + [1] * noise_size intent_list = ["dummy_intent_1", None] mocked_build_training.return_value = utterances, labels, intent_list # When / Then intent_classifier = LogRegIntentClassifier().fit(dataset) intent = intent_classifier.get_intent("no intent there") self.assertEqual(None, intent)
def test_empty_vocabulary_should_fit_and_return_none_intent( self, mocked_build_training): # Given language = LANGUAGE_EN dataset = { "snips_nlu_version": "0.0.1", "entities": { "dummy_entity_1": { "automatically_extensible": True, "use_synonyms": False, "data": [ { "value": "...", "synonyms": [], } ] } }, "intents": { "dummy_intent_1": { "utterances": [ { "data": [ { "text": "...", "slot_name": "dummy_slot_name", "entity": "dummy_entity_1" } ] } ] } }, "language": language } dataset = validate_and_format_dataset(dataset) text = " " noise_size = 6 utterance = [text] + [text] * noise_size labels = [1] + [None] * noise_size intent_list = ["dummy_intent_1", None] mocked_build_training.return_value = utterance, labels, intent_list # When / Then intent_classifier = LogRegIntentClassifier().fit(dataset) intent = intent_classifier.get_intent("no intent there") self.assertEqual(intent, None)