def test_mitie(): from rasa_nlu.featurizers.mitie_featurizer import MITIEFeaturizer filename = os.environ.get('MITIE_FILE') if (filename and os.path.isfile(filename)): ftr = MITIEFeaturizer(os.environ.get('MITIE_FILE')) sentence = "Hey how are you today" vecs = ftr.create_bow_vecs([sentence]) assert np.allclose(vecs[0][:5], np.array([0., -4.4551446, 0.26073121, -1.46632245, -1.84205751]), atol=1e-5)
class MITIESklearnInterpreter(Interpreter): def __init__(self, intent_classifier_file=None, entity_extractor_file=None, feature_extractor_file=None, **kwargs): if entity_extractor_file: self.extractor = named_entity_extractor(entity_extractor_file) # ,metadata["feature_extractor"]) with open(intent_classifier_file, 'rb') as f: self.classifier = cloudpickle.load(f) self.featurizer = MITIEFeaturizer(feature_extractor_file) self.tokenizer = MITIETokenizer() def get_entities(self, tokens): d = {} entities = self.extractor.extract_entities(tokens) for e in entities: _range = e[0] d[e[1]] = " ".join(tokens[i] for i in _range) return d def get_intent(self, text): """Returns the most likely intent and its probability for the input text. :param text: text to classify :return: tuple of most likely intent name and its probability""" if self.classifier: X = self.featurizer.create_bow_vecs([text]) intent_ids, probabilities = self.classifier.predict(X) intents = self.classifier.transform_labels_num2str(intent_ids) intent, score = intents[0], probabilities[0] else: intent, score = "None", 0.0 return intent, score def parse(self, text): tokens = self.tokenizer.tokenize(text) intent, probability = self.get_intent(tokens) entities = self.get_entities(tokens) return {'text': text, 'intent': intent, 'entities': entities, 'confidence': probability}