Esempio n. 1
0
def tracker_from_dialogue_file(filename, domain=None):
    dialogue = read_dialogue_file(filename)

    dialogue_topics = set([Topic(t.topic)
                           for t in dialogue.events
                           if isinstance(t, TopicSet)])
    if domain is not None:
        domain = domain
    else:
        domain = TemplateDomain.load("examples/default_domain.yml")
    domain.topics.extend(dialogue_topics)
    tracker = DialogueStateTracker(dialogue.name, domain.slots,
                                   domain.topics, domain.default_topic)
    tracker.update_from_dialogue(dialogue)
    return tracker
Esempio n. 2
0
    def test_persist_and_load(self, trained_policy, default_domain, tmpdir):
        trained_policy.persist(tmpdir.strpath)
        loaded = trained_policy.__class__.load(tmpdir.strpath,
                                               trained_policy.featurizer,
                                               trained_policy.max_history)
        stories = extract_stories_from_file(
            "data/dsl_stories/stories_defaultdomain.md", default_domain)

        for story in stories:
            tracker = DialogueStateTracker("default", default_domain.slots)
            dialogue = story.as_dialogue("default", default_domain)
            tracker.update_from_dialogue(dialogue)
            predicted_probabilities = loaded.predict_action_probabilities(
                tracker, default_domain)
            actual_probabilities = trained_policy.predict_action_probabilities(
                tracker, default_domain)
            assert predicted_probabilities == actual_probabilities
Esempio n. 3
0
def test_tracker_duplicate():
    filename = "data/test_dialogues/inform_no_change.json"
    dialogue = read_dialogue_file(filename)
    dialogue_topics = set(
        [Topic(t.topic) for t in dialogue.events if isinstance(t, TopicSet)])
    domain.topics.extend(dialogue_topics)
    tracker = DialogueStateTracker(dialogue.name, domain.slots, domain.topics,
                                   domain.default_topic)
    tracker.update_from_dialogue(dialogue)
    num_actions = len([
        event for event in dialogue.events
        if isinstance(event, ActionExecuted)
    ])

    # There is always one duplicated tracker more than we have actions,
    # as the tracker also gets duplicated for the
    # action that would be next (but isn't part of the operations)
    assert len(list(tracker.generate_all_prior_states())) == num_actions + 1