Ejemplo n.º 1
0
def test_samples(backend_name, spacy_nlp_en):
    interpreter = utilities.interpreter_for(
        spacy_nlp_en, utilities.base_test_conf(backend_name))
    available_intents = ["greet", "restaurant_search", "affirm", "goodbye"]
    samples = [(u"good bye", {
        'intent': 'goodbye',
        'entities': []
    }),
               (u"i am looking for an indian spot", {
                   'intent':
                   'restaurant_search',
                   'entities': [{
                       "start": 20,
                       "end": 26,
                       "value": "indian",
                       "entity": "cuisine"
                   }]
               })]

    for text, gold in samples:
        result = interpreter.parse(text)
        assert result['text'] == text, \
            "Wrong text for sample '{}'".format(text)
        assert result['intent'] in available_intents, \
            "Wrong intent for sample '{}'".format(text)
        assert result['confidence'] >= 0, \
            "Low confidence for sample '{}'".format(text)

        # This ensures the model doesn't detect entities that are not present
        # Models on our test data set are not stable enough to require the entities to be found
        for entity in result['entities']:
            assert entity in gold['entities'], \
                "Wrong entities for sample '{}'".format(text)
Ejemplo n.º 2
0
def test_train_model(pipeline_template, component_builder):
    _config = utilities.base_test_conf(pipeline_template)
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path,
                                                  component_builder)
    assert loaded.pipeline
Ejemplo n.º 3
0
def test_train_model(pipeline_template, component_builder):
    _config = utilities.base_test_conf(pipeline_template)
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path, component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello", time=None) is not None
Ejemplo n.º 4
0
def test_train_named_model(component_builder):
    _config = utilities.base_test_conf("keyword")
    _config['name'] = "my_keyword_model"
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    assert persisted_path.strip("/\\").endswith(
        "my_keyword_model")  # should be saved in a dir named after model
Ejemplo n.º 5
0
def test_samples(backend_name):
    interpreter = utilities.interpreter_for(
        utilities.base_test_conf(backend_name))
    available_intents = ["greet", "restaurant_search", "affirm", "goodbye"]
    samples = [(u"good bye", {
        'intent': 'goodbye',
        'entities': []
    }),
               (u"i am looking for an indian spot", {
                   'intent':
                   'restaurant_search',
                   'entities': [{
                       "start": 20,
                       "end": 26,
                       "value": "indian",
                       "entity": "cuisine"
                   }]
               })]

    for text, gold in samples:
        result = interpreter.parse(text)
        assert result['text'] == text, \
            "Wrong text for sample '{}'".format(text)
        assert result['intent'] in available_intents, \
            "Wrong intent for sample '{}'".format(text)
        assert result['confidence'] >= 0, \
            "Low confidence for sample '{}'".format(text)
        assert result['entities'] == gold['entities'], \
            "Wrong entities for sample '{}'".format(text)
Ejemplo n.º 6
0
def test_train_model_noents(pipeline_template, interpreter_builder):
    _config = utilities.base_test_conf(pipeline_template)
    _config['data'] = "./data/examples/rasa/demo-rasa-noents.json"
    (trained, persisted_path) = utilities.run_train(_config)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path,
                                                  interpreter_builder)
    assert loaded.pipeline
Ejemplo n.º 7
0
def test_load_and_persist_without_train(component_builder):
    _config = utilities.base_test_conf("all_components")
    trainer = Trainer(_config, component_builder)
    persistor = create_persistor(_config)
    persisted_path = trainer.persist(_config['path'], persistor, model_name=_config['name'])
    loaded = utilities.load_interpreter_for_model(_config, persisted_path, component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello", time=None) is not None
Ejemplo n.º 8
0
def test_duckling_entity_extractor(component_builder):
    _config = utilities.base_test_conf("all_components")
    _config["duckling_dimensions"] = ["time"]
    duckling = component_builder.create_component("ner_duckling", _config)
    message = Message("Today is the 5th of May. Let us meet tomorrow.")
    duckling.process(message)
    entities = message.get("entities")
    assert len(entities) == 3
Ejemplo n.º 9
0
def test_train_model_multithread(component_builder):
    _config = utilities.base_test_conf("all_components")
    _config['num_threads'] = 2
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path, component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello", time=None) is not None
Ejemplo n.º 10
0
def test_train_model_noents(component_builder):
    _config = utilities.base_test_conf("all_components")
    _config['data'] = "./data/examples/rasa/demo-rasa-noents.json"
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path, component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello", time=None) is not None
Ejemplo n.º 11
0
def test_train_model(pipeline_template, component_builder):
    _config = utilities.base_test_conf(pipeline_template)
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path, component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello") is not None
    assert loaded.parse("Hello today is Monday, again!") is not None
Ejemplo n.º 12
0
def test_train_model_multithread(pipeline_template, interpreter_builder):
    _config = utilities.base_test_conf(pipeline_template)
    _config['num_threads'] = 2
    (trained, persisted_path) = utilities.run_train(_config)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path,
                                                  interpreter_builder)
    assert loaded.pipeline
Ejemplo n.º 13
0
def test_train_model_noents(component_builder):
    _config = utilities.base_test_conf("all_components")
    _config['data'] = "./data/examples/rasa/demo-rasa-noents.json"
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path,
                                                  component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello", time=None) is not None
Ejemplo n.º 14
0
def test_load_and_persist_without_train(component_builder):
    _config = utilities.base_test_conf("all_components")
    trainer = Trainer(_config, component_builder)
    persistor = create_persistor(_config)
    persisted_path = trainer.persist(_config['path'], persistor, model_name=_config['name'])
    loaded = utilities.load_interpreter_for_model(_config, persisted_path, component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello") is not None
    assert loaded.parse("Hello today is Monday, again!") is not None
Ejemplo n.º 15
0
def test_train_model_noents(component_builder):
    _config = utilities.base_test_conf("all_components")
    _config['data'] = "./data/examples/mynlu/demo-mynlu-noents.json"
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path, component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello") is not None
    assert loaded.parse("Hello today is Monday, again!") is not None
Ejemplo n.º 16
0
def test_train_model_multithread(component_builder):
    _config = utilities.base_test_conf("all_components")
    _config['num_threads'] = 2
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path,
                                                  component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello", time=None) is not None
Ejemplo n.º 17
0
def test_train_with_empty_data(component_builder):
    _config = utilities.base_test_conf("all_components")
    trainer = Trainer(_config, component_builder)
    trainer.train(TrainingData())
    persistor = create_persistor(_config)
    persisted_path = trainer.persist(_config['path'], persistor, model_name=_config['name'])
    loaded = utilities.load_interpreter_for_model(_config, persisted_path, component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello") is not None
    assert loaded.parse("Hello today is Monday, again!") is not None
Ejemplo n.º 18
0
def test_duckling_entity_extractor_and_synonyms(component_builder):
    _config = utilities.base_test_conf("all_components")
    _config["duckling_dimensions"] = ["number"]
    duckling = component_builder.create_component("ner_duckling", _config)
    synonyms = component_builder.create_component("ner_synonyms", _config)
    message = Message("He was 6 feet away")
    duckling.process(message)
    synonyms.process(
        message
    )  # checks that the synonym processor can handle entities that have int values
    assert message is not None
Ejemplo n.º 19
0
def test_train_with_empty_data(component_builder):
    _config = utilities.base_test_conf("all_components")
    trainer = Trainer(_config, component_builder)
    trainer.train(TrainingData())
    persistor = create_persistor(_config)
    persisted_path = trainer.persist(_config['path'],
                                     persistor,
                                     model_name=_config['name'])
    loaded = utilities.load_interpreter_for_model(_config, persisted_path,
                                                  component_builder)
    assert loaded.pipeline
    assert loaded.parse("hello", time=None) is not None
Ejemplo n.º 20
0
def test_train_spacy_sklearn_finetune_ner(interpreter_builder):
    _config = utilities.base_test_conf("spacy_sklearn")
    _config['fine_tune_spacy_ner'] = True
    (trained, persisted_path) = utilities.run_train(_config)
    assert trained.pipeline
    loaded = utilities.load_interpreter_for_model(_config, persisted_path,
                                                  interpreter_builder)
    result = loaded.parse(u"I am living in New York now.")
    entities = result['entities']
    # Although the model is trained on restaurant entities, we can use the entities (`GPE`, `DATE`)
    # from spacy since we are fine tuning. This should even be the case if the rasa-entity training data changes!
    assert {
        u'start': 15,
        u'end': 23,
        u'value': u'New York',
        u'entity': u'GPE'
    } in entities
Ejemplo n.º 21
0
def test_duckling_entity_extractor(component_builder):
    _config = utilities.base_test_conf("all_components")
    _config["duckling_dimensions"] = ["time"]
    duckling = component_builder.create_component("ner_duckling", _config)
    message = Message("Today is the 5th of May. Let us meet tomorrow.")
    duckling.process(message)
    entities = message.get("entities")
    assert len(entities) == 3

    # Test duckling with a defined date
    message = Message(
        "Let us meet tomorrow.",
        time="1381536182000")  # 1381536182000 == 2013/10/12 02:03:02
    duckling.process(message)
    entities = message.get("entities")
    assert len(entities) == 1
    assert entities[0]["text"] == "tomorrow"
    assert entities[0]["value"] == "2013-10-13T00:00:00.000Z"
Ejemplo n.º 22
0
def test_samples(pipeline_template, component_builder):
    _conf = utilities.base_test_conf(pipeline_template)
    _conf["data"] = "./data/examples/rasa/demo-rasa.json"

    interpreter = utilities.interpreter_for(component_builder, _conf)
    available_intents = [
        "greet", "restaurant_search", "affirm", "goodbye", "None"
    ]
    samples = [("good bye", {
        'intent': 'goodbye',
        'entities': []
    }),
               ("i am looking for an indian spot", {
                   'intent':
                   'restaurant_search',
                   'entities': [{
                       "start": 20,
                       "end": 26,
                       "value": "indian",
                       "entity": "cuisine"
                   }]
               })]

    for text, gold in samples:
        result = interpreter.parse(text)
        assert result['text'] == text, \
            "Wrong text for sample '{}'".format(text)
        assert result['intent']['name'] in available_intents, \
            "Wrong intent for sample '{}'".format(text)
        assert result['intent']['confidence'] >= 0, \
            "Low confidence for sample '{}'".format(text)

        # This ensures the model doesn't detect entities that are not present
        # Models on our test data set are not stable enough to require the entities to be found
        for entity in result['entities']:
            del entity["extractor"]
            assert entity in gold['entities'], \
                "Wrong entities for sample '{}'".format(text)
Ejemplo n.º 23
0
def test_handles_pipeline_with_non_existing_component(component_builder):
    _config = utilities.base_test_conf("spacy_sklearn")
    _config['pipeline'].append("my_made_up_component")
    with pytest.raises(Exception) as execinfo:
        utilities.run_train(_config, component_builder)
    assert "Failed to find component" in str(execinfo.value)
Ejemplo n.º 24
0
def test_handles_pipeline_with_non_existing_component(component_builder):
    _config = utilities.base_test_conf("spacy_sklearn")
    _config['pipeline'].append("my_made_up_component")
    with pytest.raises(Exception) as execinfo:
        utilities.run_train(_config, component_builder)
    assert "Failed to find component" in str(execinfo.value)
Ejemplo n.º 25
0
def test_train_model_empty_pipeline(component_builder):
    _config = utilities.base_test_conf(
        pipeline_template=None)  # Should return an empty pipeline
    with pytest.raises(ValueError):
        utilities.run_train(_config, component_builder)
Ejemplo n.º 26
0
def test_train_model_empty_pipeline(component_builder):
    _config = utilities.base_test_conf(pipeline_template=None)   # Should return an empty pipeline
    with pytest.raises(ValueError):
        utilities.run_train(_config, component_builder)
Ejemplo n.º 27
0
def test_train_named_model(component_builder):
    _config = utilities.base_test_conf("keyword")
    _config['name'] = "my_keyword_model"
    (trained, persisted_path) = utilities.run_train(_config, component_builder)
    assert trained.pipeline
    assert persisted_path.strip("/\\").endswith("my_keyword_model")    # should be saved in a dir named after model