Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

Open source TOD Models #4438

Merged
merged 208 commits into from
Mar 24, 2022
Merged
Changes from 1 commit
Commits
Show all changes
208 commits
Select commit Hold shift + click to select a range
e365e48
[TOD] Core converesation structure, serialization, const tokens
Nov 15, 2021
c939174
[Tod] Agents, teacher metrics, and tests for these
Nov 16, 2021
3bf655f
[TOD] Tod json structure to teacher task
Nov 16, 2021
6cb4b86
[TOD] Core converesation structure, serialization, const tokens
Nov 15, 2021
1480def
fix test by adding init folder
Nov 16, 2021
de84801
[Tod] Agents, teacher metrics, and tests for these
Nov 16, 2021
638eb28
[TOD] World, world metrics, script, tests
Nov 16, 2021
0e3f492
hmmm... hoping stacks don't bite me. (change that was kept in upper d…
Nov 16, 2021
0643a62
Merge branch 'simpler_tod_1_core_only' into simpler_tod_2_agents_teac…
Nov 16, 2021
37aced2
minor, remove commented out print
Nov 16, 2021
4f91279
Merge branch 'simpler_tod_2_agents_teachers' into simpler_tod_3_world
Nov 16, 2021
b05930f
comment
Nov 16, 2021
5086e85
more comment updates (not sure if it actually helps clarity..)
Nov 16, 2021
1e30035
Merge branch 'simpler_tod_3_world' into simpler_tod_4_tod_json
Nov 16, 2021
9a25fc5
[TOD][Dataset][Easy] Google SGD in TOD Conversations format
Nov 16, 2021
faa2356
[TOD][Dataset][Easyish] Google Simulation Splits
Nov 16, 2021
9426997
[TOD][Datasets][Easy] MetalWoz
Nov 16, 2021
9b2116c
[TOD][Datasets][Easy] MSR E2E into TOD Conversations format
Nov 16, 2021
61f7041
[TOD][Datasets][Easy] Multidogo -> TOD Conversations format
Nov 16, 2021
e8efc52
[TOD][Datasets][Easyish] MultiWoz V2.2 in Conversations Format
Nov 16, 2021
c17c3cc
lint
Nov 16, 2021
728c9bd
[TOD][Datasets][Easy] Taskmaster(1) in Conversations format
Nov 16, 2021
54890b4
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Nov 16, 2021
45e9259
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Nov 16, 2021
9284135
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Nov 16, 2021
5c226bd
[TOD][Datasets][Easy] Taskmaster2 to TOD Conversations format
Nov 16, 2021
50f1aaf
[TOD][Datasets][Easy] Taskmaster3 (TicketTalk) to TOD Structured format
Nov 16, 2021
51ed1a9
Merge branch 'main' into simpler_tod_1_core_only
Nov 16, 2021
a6508be
Merge branch 'simpler_tod_1_core_only' into simpler_tod_2_agents_teac…
Nov 16, 2021
eebc36b
Merge branch 'simpler_tod_2_agents_teachers' into simpler_tod_3_world
Nov 16, 2021
3675781
use same version of black as in the pre-commit hook
Nov 16, 2021
086c91c
Merge branch 'simpler_tod_2_agents_teachers' into simpler_tod_3_world
Nov 16, 2021
0bc961e
use same version of black as in the pre-commit hook
Nov 16, 2021
ed26407
Merge branch 'simpler_tod_3_world' into simpler_tod_4_tod_json
Nov 16, 2021
677df09
Merge branch 'simpler_tod_4_tod_json' into simpler_tod_5a_google_sgd
Nov 16, 2021
24ee898
black with version from pre-commit hook
Nov 16, 2021
3ca7ae3
Merge branch 'simpler_tod_4_tod_json' into simpler_tod_5a_google_sgd
Nov 16, 2021
3145e0e
Shouldn't worry about tod_json being in task_list
Nov 16, 2021
1b2a3fb
Merge branch 'simpler_tod_4_tod_json' into simpler_tod_5a_google_sgd
Nov 16, 2021
f44b17b
add to task list; run lint with right version of black
Nov 16, 2021
43474c4
Merge branch 'simpler_tod_5a_google_sgd' into simpler_tod_5b_google_s…
Nov 16, 2021
d290ecd
Merge branch 'simpler_tod_5b_google_sgd_sim_splits' into simpler_tod_…
Nov 17, 2021
7c3ccf5
lint with right version
Nov 17, 2021
ab19cc2
lint
Nov 17, 2021
8c76a56
Merge branch 'simpler_tod_5c_metalwoz' into simpler_tod_5d_msr_e2e
Nov 17, 2021
724b255
add to task list
Nov 17, 2021
c79422c
lint right version
Nov 17, 2021
353fab1
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Nov 17, 2021
c86760c
add to task list
Nov 17, 2021
625e632
right lint
Nov 17, 2021
ebd09b4
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Nov 17, 2021
dcadadb
task_list
Nov 17, 2021
fff653f
right lint
Nov 17, 2021
406a84d
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Nov 17, 2021
bbc10ca
right lint
Nov 17, 2021
14e0f7d
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Nov 17, 2021
4b01553
right lint
Nov 17, 2021
66f2695
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Nov 17, 2021
f0b387f
task_list + remove unnecessary line
Nov 17, 2021
e8e366f
add init
Nov 17, 2021
e354c39
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Nov 17, 2021
f637a29
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Nov 17, 2021
ca898c5
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Nov 17, 2021
ded9298
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Nov 17, 2021
0354b94
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Nov 17, 2021
127c2a6
[TOD] Projects folder for tod_simulator + scripts + documentation
Nov 17, 2021
2fb7387
init files, an extra comment
Nov 17, 2021
5492c49
[TOD] Add zoo models for TOD pre-training; update README
Nov 19, 2021
efbeacd
add to model_list.py, more documentation
Nov 19, 2021
168b5a3
run precommit linter
Nov 19, 2021
dfc4989
Merge branch 'main' into simpler_tod_2_agents_teachers
Nov 29, 2021
2f15448
address eric comments; add new readme + more documentation
Nov 30, 2021
abd1c7e
Merge branch 'simpler_tod_2_agents_teachers' into simpler_tod_3_world
Nov 30, 2021
5d0197d
minor wording change
Nov 30, 2021
39792a8
Merge branch 'simpler_tod_2_agents_teachers' into simpler_tod_3_world
Nov 30, 2021
76bfa89
add more documtnation to world tests (following comment on teacher te…
Nov 30, 2021
73c5c7a
minor comment update
Nov 30, 2021
f6acccb
Merge branch 'simpler_tod_3_world' into simpler_tod_4_tod_json
Nov 30, 2021
dc4b70e
Merge branch 'simpler_tod_4_tod_json' into simpler_tod_5a_google_sgd
Nov 30, 2021
1299b68
Merge branch 'simpler_tod_5a_google_sgd' into simpler_tod_5b_google_s…
Nov 30, 2021
58965d3
Merge branch 'simpler_tod_4_tod_json' into simpler_tod_5c_metalwoz
Nov 30, 2021
55aa3ca
Merge branch 'simpler_tod_5b_google_sgd_sim_splits' into simpler_tod_…
Nov 30, 2021
6517301
Merge branch 'simpler_tod_5c_metalwoz' into simpler_tod_5d_msr_e2e
Nov 30, 2021
c344740
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Nov 30, 2021
0b846d7
make build file less dumb; minor bug in agents.py
Nov 30, 2021
65d0a42
remove + rerun regression test data for multidogo
Dec 1, 2021
1ae8fc6
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Dec 1, 2021
7f5c171
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Dec 1, 2021
cefb41a
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Dec 1, 2021
6e91da7
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Dec 1, 2021
3373327
Merge branch 'simpler_tod_5i_taskmaster3' into simpler_tod_6_project
Dec 1, 2021
a0bab16
repond to comments about ugly/internal-only formatting
Dec 1, 2021
bf023ab
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 1, 2021
7e0f9b0
update comments to be more descriptive
Dec 1, 2021
a1aba6a
see what happens if I bump up the build # (hoping tests work)
Dec 1, 2021
c9ef957
make the multidogo test not take forever
Dec 1, 2021
7ab9d70
update to respect actual count of episodes (I think this might have i…
Dec 1, 2021
c6c728d
Merge branch 'main' into simpler_tod_2_agents_teachers
Dec 1, 2021
b3283d0
Merge branch 'simpler_tod_2_agents_teachers' into simpler_tod_3_world
Dec 1, 2021
85ab0fd
Merge branch 'simpler_tod_3_world' into simpler_tod_4_tod_json
Dec 1, 2021
0969aa1
Merge branch 'simpler_tod_4_tod_json' into simpler_tod_5a_google_sgd
Dec 1, 2021
1869cee
Merge branch 'simpler_tod_5a_google_sgd' into simpler_tod_5b_google_s…
Dec 1, 2021
609f930
Merge branch 'simpler_tod_5b_google_sgd_sim_splits' into simpler_tod_…
Dec 1, 2021
1da3858
Merge branch 'simpler_tod_5c_metalwoz' into simpler_tod_5d_msr_e2e
Dec 1, 2021
01f37d2
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Dec 1, 2021
0e1251e
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Dec 1, 2021
992980f
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Dec 1, 2021
76ecf7a
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Dec 1, 2021
a1d0451
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Dec 1, 2021
7eceb21
Merge branch 'simpler_tod_5i_taskmaster3' into simpler_tod_6_project
Dec 1, 2021
5a6e96f
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 1, 2021
0580ff0
Merge branch 'main' into simpler_tod_2_agents_teachers
Dec 2, 2021
e00accf
Merge branch 'simpler_tod_2_agents_teachers' into simpler_tod_3_world
Dec 2, 2021
701da8d
Merge branch 'simpler_tod_3_world' into simpler_tod_4_tod_json
Dec 2, 2021
d519dc2
Merge branch 'simpler_tod_4_tod_json' into simpler_tod_5a_google_sgd
Dec 2, 2021
c7c1c64
Merge branch 'simpler_tod_5a_google_sgd' into simpler_tod_5b_google_s…
Dec 2, 2021
828f44f
Merge branch 'simpler_tod_5b_google_sgd_sim_splits' into simpler_tod_…
Dec 2, 2021
3c209ab
Merge branch 'simpler_tod_5c_metalwoz' into simpler_tod_5d_msr_e2e
Dec 2, 2021
564f5c8
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Dec 2, 2021
00f2c5f
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Dec 2, 2021
c746e70
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Dec 2, 2021
81f2b51
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Dec 2, 2021
82dcb1f
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Dec 2, 2021
42604f1
Merge branch 'simpler_tod_5i_taskmaster3' into simpler_tod_6_project
Dec 2, 2021
72809ba
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 2, 2021
9466144
regen after changing tod teacher logic to respect episode/examples le…
Dec 2, 2021
1392d99
regen after changing tod teacher logic to respect episode/examples le…
Dec 2, 2021
77dccb7
regen after changing tod teacher logic to respect episode/examples le…
Dec 2, 2021
98aa5f7
regen after changing tod teacher logic to respect episode/examples le…
Dec 2, 2021
8291321
regen after changing tod teacher logic to respect episode/examples le…
Dec 2, 2021
1d3d0c6
regen after changing tod teacher logic to respect episode/examples le…
Dec 2, 2021
66958f2
regen after changing tod teacher logic to respect episode/examples le…
Dec 2, 2021
71b5af8
Merge branch 'simpler_tod_5a_google_sgd' into simpler_tod_5b_google_s…
Dec 2, 2021
9da65a6
Merge branch 'simpler_tod_5b_google_sgd_sim_splits' into simpler_tod_…
Dec 2, 2021
8956db7
Merge branch 'simpler_tod_5c_metalwoz' into simpler_tod_5d_msr_e2e
Dec 2, 2021
e946dff
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Dec 2, 2021
47651f0
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Dec 2, 2021
a3d75b6
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Dec 2, 2021
346f686
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Dec 2, 2021
a93523c
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Dec 2, 2021
441962d
Merge branch 'simpler_tod_5i_taskmaster3' into simpler_tod_6_project
Dec 2, 2021
a8eec8c
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 2, 2021
7b24acf
Merge branch 'main' into simpler_tod_3_world
Dec 18, 2021
e3fa063
Merge branch 'simpler_tod_3_world' into simpler_tod_4_tod_json
Dec 18, 2021
2384563
Merge branch 'simpler_tod_4_tod_json' into simpler_tod_5a_google_sgd
Dec 18, 2021
d9ba7e4
Merge branch 'main' into simpler_tod_5a_google_sgd
Dec 22, 2021
acd6ffe
not sure why this comment keeps not being merged correctly ugh...
Dec 22, 2021
a753a6d
Merge branch 'simpler_tod_5a_google_sgd' into simpler_tod_5b_google_s…
Dec 22, 2021
66d8bf8
Merge branch 'simpler_tod_5b_google_sgd_sim_splits' into simpler_tod_…
Dec 22, 2021
6900517
Merge branch 'simpler_tod_5c_metalwoz' into simpler_tod_5d_msr_e2e
Dec 22, 2021
235fbee
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Dec 22, 2021
ef899c3
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Dec 22, 2021
c9c8f3a
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Dec 22, 2021
d8ca410
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Dec 22, 2021
e42cee2
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Dec 22, 2021
d7ffa79
Merge branch 'simpler_tod_5i_taskmaster3' into simpler_tod_6_project
Dec 22, 2021
9099bfb
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 22, 2021
0f49cb5
noticed a different in episode lengths between old version of this da…
Dec 22, 2021
0fb3ecb
Merge branch 'main' into simpler_tod_5b_google_sgd_sim_splits
Dec 22, 2021
c2c1fa6
Merge branch 'main' into simpler_tod_5g_taskmaster1
Dec 22, 2021
66e09ee
Merge branch 'simpler_tod_5b_google_sgd_sim_splits' into simpler_tod_…
Dec 22, 2021
f556628
Merge branch 'simpler_tod_5c_metalwoz' into simpler_tod_5d_msr_e2e
Dec 22, 2021
3e43ef9
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Dec 22, 2021
a72fe98
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Dec 22, 2021
f092c7f
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Dec 22, 2021
0b6a8f7
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Dec 22, 2021
feb93d6
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Dec 22, 2021
d03aad0
Merge branch 'simpler_tod_5i_taskmaster3' into simpler_tod_6_project
Dec 22, 2021
d2104ff
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 22, 2021
adff949
regen after changing tod teacher logic to respect episode/examples le…
Dec 22, 2021
d724cd8
regen after changing tod teacher logic to respect episode/examples le…
Dec 22, 2021
b4e5c1f
regen after changing tod teacher logic to respect episode/examples le…
Dec 22, 2021
21a05d2
regen after changing tod teacher logic to respect episode/examples le…
Dec 22, 2021
e9ea6ac
regen after changing tod teacher logic to respect episode/examples le…
Dec 22, 2021
534b984
regen after changing tod teacher logic to respect episode/examples le…
Dec 22, 2021
89a58a3
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Dec 22, 2021
b139888
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Dec 22, 2021
f0ecc98
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Dec 22, 2021
7c14c10
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Dec 22, 2021
f6af363
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Dec 22, 2021
e514d76
Merge branch 'simpler_tod_5i_taskmaster3' into simpler_tod_6_project
Dec 22, 2021
d252eba
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 22, 2021
00ae154
Merge branch 'main' into simpler_tod_5c_metalwoz
Dec 22, 2021
9816384
Merge branch 'simpler_tod_5c_metalwoz' into simpler_tod_5d_msr_e2e
Dec 22, 2021
1b4a0ca
Merge branch 'simpler_tod_5d_msr_e2e' into simpler_tod_5e_multidogo
Dec 22, 2021
69eeeff
Merge branch 'simpler_tod_5e_multidogo' into simpler_tod_5f_multiwoz_v22
Dec 22, 2021
7522f30
Merge branch 'simpler_tod_5f_multiwoz_v22' into simpler_tod_5g_taskma…
Dec 22, 2021
7d5c3d6
Merge branch 'simpler_tod_5g_taskmaster1' into simpler_tod_5h_taskmas…
Dec 22, 2021
71c4aac
Merge branch 'simpler_tod_5h_taskmaster2' into simpler_tod_5i_taskmas…
Dec 22, 2021
05d29eb
Merge branch 'simpler_tod_5i_taskmaster3' into simpler_tod_6_project
Dec 22, 2021
cb14e6b
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 22, 2021
bf8f81a
Merge branch 'main' into simpler_tod_6_project
Dec 23, 2021
885132f
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Dec 23, 2021
e2b69db
Merge branch 'main' into simpler_tod_6_project
Jan 6, 2022
f4ea0c8
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Jan 6, 2022
fbb7117
fixes
Mar 23, 2022
556c743
remove some scripts that aren't worth releasing
Mar 23, 2022
e6251be
Merge branch 'main' into simpler_tod_6_project
Mar 23, 2022
e6e8de7
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Mar 23, 2022
944342a
a few fixes
Mar 23, 2022
eedf99b
clean up from later improvements
Mar 23, 2022
b4be56a
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Mar 23, 2022
aec9adc
run linter
Mar 23, 2022
25f767f
run linter
Mar 23, 2022
a91705f
Merge branch 'simpler_tod_6_project' into simpler_tod_7_open_source_m…
Mar 23, 2022
9b1501e
remove name
Mar 23, 2022
0d759ae
regen multiwoz tests cause I did a quick fix for that here too
Mar 24, 2022
7f284bd
Merge branch 'main' into simpler_tod_7_open_source_models
Mar 24, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[TOD][Datasets][Easy] Multidogo -> TOD Conversations format
Title. I only include System + UserSimulator Teachers here since that's all we need right now from dataset.

Datasets added in this substack:
* Google SGD
   * Google SGD Simulation Splits (In-domain, Out-domain)
* MetalWoz
* **MSR_E2E**
* Multidogo
* MultiWoz V2.2
* Taskmaster
* Taskmaster2
* Taskmaster3 (TicketTalk)

Test plan:
Regression test, `parlai dd` of dataset
Moya Chen committed Nov 16, 2021
commit 61f704112457257a3cb22604e11d7b739d3be74c
5 changes: 5 additions & 0 deletions parlai/tasks/multidogo/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/usr/bin/env python3

# Copyright (c) Facebook, Inc. and its affiliates.
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
162 changes: 162 additions & 0 deletions parlai/tasks/multidogo/agents.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
#!/usr/bin/env python3

# Copyright (c) Facebook, Inc. and its affiliates.
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

"""
MultiDoGo implementation for ParlAI.
NOTE: There is still missing data in the open source version of this; implementation is not complete. See https://github.com/awslabs/multi-domain-goal-oriented-dialogues-dataset/issues/1
"""

from typing import Optional
from parlai.core.params import ParlaiParser
import copy
import json
import os
from parlai.core.opt import Opt
from parlai.utils.data import DatatypeHelper
import parlai.core.tod.tod_core as tod
import parlai.core.tod.tod_agents as tod_agents
import parlai.tasks.multidogo.build as build_
from parlai.tasks.multidogo.build import get_processed_multidogo_folder
from parlai.tasks.multidogo.build import (
DOMAINS,
SENTENCE_INTENT,
TURN_INTENT,
TURN_AND_SENTENCE_INTENT,
)

INTENT_ANNOTATION_TYPES = [SENTENCE_INTENT, TURN_INTENT, TURN_AND_SENTENCE_INTENT]


class MultidogoParser(tod_agents.TodStructuredDataParser):
@classmethod
def add_cmdline_args(
cls, parser: ParlaiParser, partial_opt: Optional[Opt] = None
) -> ParlaiParser:
parser = super().add_cmdline_args(parser, partial_opt)
parser.add_argument(
"--multidogo-domains",
nargs="+",
default=DOMAINS,
choices=DOMAINS,
help="Uses last passed in configuration.",
)
parser.add_argument(
"--intent-type",
default=TURN_INTENT,
choices=INTENT_ANNOTATION_TYPES,
help="Sets the type of intent classification labels. Sentence annotations represented as a list with adjacent entries of the same type deduped.",
)
return parser

def __init__(self, opt: Opt, shared=None):
self.fold = DatatypeHelper.fold(opt["datatype"])
self.dpath = os.path.join(opt["datapath"], "multidogo")
opt["datafile"] = self.fold
build_.build(opt)
super().__init__(opt, shared)

def setup_episodes(self, fold):
result = []
domains = self.opt.get("multidogo_domains", DOMAINS)
intent_type = self.opt.get("intent-type", TURN_INTENT)
for _conv_id, domain, conversation in self._iterate_over_conversations(
domains, intent_type
):
if len(conversation) == 0 or not (
all(["role" in turn for turn in conversation.values()])
):
continue
rounds = []
prev_role = conversation["0"]["role"]
if prev_role == "customer":
user_utt = [conversation["0"]["text"]]
api_call = conversation["0"].get("slots", {})
api_resp = {}
sys_utt = []
else:
user_utt = ["__SILENCE__"]
api_call = {}
api_resp = conversation["0"].get("slots", {})
sys_utt = [conversation["0"]["text"]]
all_calls = api_call
api_call = {tod.STANDARD_API_NAME_SLOT: domain}
for i in range(1, len(conversation)):
turn = conversation[str(i)]
if prev_role == "agent" and prev_role != turn["role"]:
rounds.append(
tod.TodStructuredRound(
user_utt="\n".join(user_utt),
api_call_machine=api_call,
api_resp_machine=api_resp,
sys_utt="\n".join(sys_utt),
)
)
user_utt = []
api_call = {tod.STANDARD_API_NAME_SLOT: domain}
api_resp = {}
sys_utt = []
prev_role = turn["role"]
slot = turn.get("slots", {})
if prev_role == "customer":
user_utt.append(turn["text"])
api_call.update(slot)
all_calls.update(slot)
else:
api_resp.update(slot)
sys_utt.append(turn["text"])

rounds.append(
tod.TodStructuredRound(
user_utt=user_utt,
api_call_machine=api_call,
api_resp_machine=api_resp,
sys_utt=sys_utt,
)
)
goal_calls = copy.deepcopy(all_calls)
goal_calls[tod.STANDARD_API_NAME_SLOT] = domain
result.append(
tod.TodStructuredEpisode(
domain=domain,
api_schemas_machine=[
{
tod.STANDARD_API_NAME_SLOT: domain,
tod.STANDARD_OPTIONAL_KEY: all_calls.keys(),
}
],
goal_calls_machine=[goal_calls],
rounds=rounds,
)
)
return result

def _iterate_over_conversations(self, domains, intent):
for domain in domains:
data_folder = get_processed_multidogo_folder(
self.dpath, domain, self.fold, intent
)
for filename in os.listdir(data_folder):
if filename.endswith(".json"):
with open(data_folder + "/" + filename) as f:
data = json.load(f)
for conv_id, value in data.items():
yield conv_id, domain, value

def get_id_task_prefix(self):
return "Multidogo"


class SystemTeacher(MultidogoParser, tod_agents.TodSystemTeacher):
pass


class UserSimulatorTeacher(MultidogoParser, tod_agents.TodUserSimulatorTeacher):
pass


class DefaultTeacher(SystemTeacher):
pass
323 changes: 323 additions & 0 deletions parlai/tasks/multidogo/build.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,323 @@
#!/usr/bin/env python3

# Copyright (c) Facebook, Inc. and its affiliates.
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

import parlai.core.build_data as build_data
from parlai.core.build_data import DownloadableFile

import csv
from itertools import islice
from pathlib import Path
import os
import json
import re

DEBUG_MISSING_RAW_CONVERSATIONS = False # Unnecessary once Amazon fixes multidogo

RESOURCE = DownloadableFile(
"https://github.com/awslabs/multi-domain-goal-oriented-dialogues-dataset/archive/master.zip",
"raw_data.zip",
"fb59c7261da2d30d9d24b9af309ebb4bf0e5b39f97d718201a7160e591e76a3c",
zipped=True,
)

RAW_DATA_PREFIX = "multi-domain-goal-oriented-dialogues-dataset-master/data/"

RAW_DATA_ANNOTATED_DATA_PATH = "paper_splits"
RAW_DATA_UNANNOTATED_DATA_PATH = "unannotated"

TURN_INTENT = "turn"
SENTENCE_INTENT = "sentence"
TURN_AND_SENTENCE_INTENT = "both"

RAW_DATA_SENTENCE_INTENT_PATH = "splits_annotated_at_sentence_level"
RAW_DATA_TURN_INTENT_PATH = "splits_annotated_at_turn_level"

RAW_DATA_INTENT_BY_TYPE_PATH = {
TURN_INTENT: RAW_DATA_TURN_INTENT_PATH,
SENTENCE_INTENT: RAW_DATA_SENTENCE_INTENT_PATH,
}

DOMAINS = ["airline", "fastfood", "finance", "insurance", "media", "software"]

DATATYPE_TO_RAW_DATA_FILE_NAME = {
"test": "test.tsv",
"train": "train.tsv",
"valid": "dev.tsv",
}

PROCESSED = "processed/"


def _preprocess(opt, datapath, datatype):
"""
MultiDoGo conversations take place between an "agent" and a customer". Labeled
customer data is stored in one set of files while the agent data is in another.
There is a common conversation ID between the two, but the conversations are not
listed in a consistent way between the documents. Since we'll have to do work to
associate the data between the files anyway, we might as well process the data into
a new file that'll be easier to deal with.
Stores the data as <multidogo_data_path>/processed/<domain>/<datatype>.txt.
Will skip preprocessing if this file already exists.
"""
domains = opt.get("domains", DOMAINS)
intent_type = opt.get("intent_type", TURN_INTENT)

for domain in domains:
# to see which domain/datatype combo we've built, use a dummy file to mark
built_file = _get_processed_multidogo_built_file(
datapath, domain, datatype, intent_type
)
if os.path.isfile(built_file):
continue
print(
f" Preprocessing '{domain}' data for '{datatype}' with '{intent_type}' intent labels."
)

out_dir = get_processed_multidogo_folder(
datapath, domain, datatype, intent_type
)
Path(out_dir).mkdir(parents=True, exist_ok=True)

# The agent responses for *all* datatypes are in one file.
# We need to iterate through the datatype file to know which lines
# we'll actually need... so build a quick lookup table to know which
# lines in the tsv file we'll need to care about so we're not scanning
# through the whole thing a bunch
unannotated_id_map = _build_conversation_span_map(
_get_unannotated_tsv_data(datapath, domain)
)

# Actually do the work of collating all of the conversations + annotations
# For turn + sentence intent labels, we do two passes, one for sentence
# then one for turn so that we do not add two sets of labels for the
# same conversation ID. We can use this forced structure to do the
# separate categories of turn intent and sentence intent labels. We
# also do a bit of chuking
file_idx = 0
seen_conversations_set = set()
if intent_type == TURN_AND_SENTENCE_INTENT or intent_type == SENTENCE_INTENT:
file_idx, seen_conversations_set = _aggregate_and_write_conversations(
intent_type,
SENTENCE_INTENT,
datapath,
domain,
datatype,
unannotated_id_map,
start_file_idx=file_idx,
skip_ids=set(),
)

if intent_type == TURN_AND_SENTENCE_INTENT or intent_type == TURN_INTENT:
_, _ = _aggregate_and_write_conversations(
intent_type,
TURN_INTENT,
datapath,
domain,
datatype,
unannotated_id_map,
start_file_idx=file_idx,
skip_ids=seen_conversations_set,
)

# mark that we've built this combinations
open(built_file, "a").close()


def get_processed_multidogo_folder(datapath, domain, datatype, intent_type):
return os.path.join(datapath, PROCESSED, domain, intent_type, datatype)


def _get_processed_multidogo_built_file(datapath, domain, datatype, intent_type):
return os.path.join(
get_processed_multidogo_folder(datapath, domain, datatype, intent_type),
".build",
)


# unannotated data is UNANNOTATED_DATA_PROFIX + <domain> + '.tsv'
# annotated data is ANNOTATED_DATA_PATH + <annotations type> + <domain> + '/' + <datatype> + '.tsv'
def _get_unannotated_tsv_data(datapath, domain):
file_name = os.path.join(
datapath, RAW_DATA_PREFIX, RAW_DATA_UNANNOTATED_DATA_PATH, domain + ".tsv"
)
return csv.reader(open(file_name, "r"), delimiter=",") # comma-separated tsv, lol


def _get_annotated_tsv_data(datapath, domain, datatype, annotation_type):
file_name = os.path.join(
datapath,
RAW_DATA_PREFIX,
RAW_DATA_ANNOTATED_DATA_PATH,
RAW_DATA_INTENT_BY_TYPE_PATH[annotation_type],
domain,
DATATYPE_TO_RAW_DATA_FILE_NAME[datatype],
)
return csv.reader(open(file_name, "r"), delimiter="\t")


def _build_conversation_span_map(unannotated_tsv_object):
result = {} # conversationId to (start line, length) map
start = 0
prev_conversation_id = ""
length = 0
for i, row in enumerate(unannotated_tsv_object):
conversation_id = row[0][
4:-2
] # do substring cause conversationId has extra filler in unannotated
if conversation_id != prev_conversation_id:
result[prev_conversation_id] = (start, length)
start = i
prev_conversation_id = conversation_id
length = 0
length += 1
result[conversation_id] = (start, length)
return result


def _get_slots_map(utterance, slot_string):
values = slot_string.split(" ")
cleaned = re.sub(r"[^\w\s]", "", utterance)
words = cleaned.split(" ")
result = {}
for i in range(len(words)):
if values[i] != "O":
result[values[i]] = words[i]
return result


def _aggregate_and_write_conversations(
raw_intent_type,
fetch_intent_type,
datapath,
domain,
datatype,
unannotated_id_map,
skip_ids,
start_file_idx=0,
):
conversations_to_write = {} # conversationId -> list of turns
seen_conversations = set()
out_dir = get_processed_multidogo_folder(
datapath, domain, datatype, raw_intent_type
)
file_idx = start_file_idx
intent_tsv = _get_annotated_tsv_data(datapath, domain, datatype, fetch_intent_type)
next(intent_tsv) # don't need the header in the first line
for labeled_line in intent_tsv:
conversation_id = labeled_line[0]
if conversation_id in skip_ids:
continue
if conversation_id not in seen_conversations:
# new conversation, add text of conversation to conversations_to_write
conversations_to_write[conversation_id] = {}
found_raw_conversation = _add_utterances(
unannotated_id_map,
conversation_id,
conversations_to_write,
datapath,
domain,
)
seen_conversations.add(conversation_id)
if not found_raw_conversation:
if DEBUG_MISSING_RAW_CONVERSATIONS:
print(f"Could not find raw conversations for {conversation_id}")
skip_ids.add(conversation_id)
conversations_to_write.pop(conversation_id, None)
continue
if fetch_intent_type == SENTENCE_INTENT:
_get_sentence_labels_and_slots_map(labeled_line, conversations_to_write)
elif fetch_intent_type == TURN_INTENT:
_get_turn_labels_and_slots_map(labeled_line, conversations_to_write)
else:
raise KeyError(
"Invalid `fetch_intent_type`. This case should never be hit. Something is broken in the `build.py` file."
)
# Don't forget to dump out last file
with open(f"{out_dir}/{file_idx}.json", "w+") as out_file:
json.dump(conversations_to_write, out_file, indent=4)
file_idx += 1
# Return necessary outputs for next pass
return file_idx, seen_conversations


def _add_utterances(
unannotated_id_map, conversation_id, conversations_to_write, datapath, domain
):
try:
start, length = unannotated_id_map[conversation_id]
except KeyError:
return False
conversation_text = islice(
_get_unannotated_tsv_data(datapath, domain), start, start + length
)

for line in conversation_text:
# Format of unannotated: conversationId,turnNumber,utteranceId,utterance,authorRole
conversations_to_write[conversation_id] = {
**conversations_to_write[conversation_id],
int(line[1]): {"text": line[3], "role": line[4]},
}
return True


def _get_sentence_labels_and_slots_map(labeled_line, output):
# Sentence tsv format: conversationId turnNumber sentenceNumber utteranceId utterance slot-labels intent
conversation_id = labeled_line[0]
turn_number = int(float(labeled_line[1])) # cause a few got saved as float.
if conversation_id not in output:
raise RuntimeError("Should never happen; raw conversation text should be here")
if turn_number not in output[conversation_id]:
output[conversation_id][turn_number] = {}
output[conversation_id][turn_number] = {
**output[conversation_id][turn_number],
"slots": _get_slots_map(labeled_line[4], labeled_line[5]),
}
if "intents" not in output[conversation_id][turn_number]:
output[conversation_id][turn_number]["intents"] = []
output[conversation_id][turn_number]["intents"].append(labeled_line[6])


def _get_turn_labels_and_slots_map(labeled_line, output):
# Turn tsv format: conversationId turnNumber utteranceId utterance slot-labels intent
conversation_id = labeled_line[0]
turn_number = int(float(labeled_line[1])) # cause a few got saved as float
if conversation_id not in output:
raise RuntimeError("Should never happen; raw conversation text should be here")
if turn_number not in output[conversation_id]:
output[conversation_id][turn_number] = {}
output[conversation_id][turn_number] = {
**output[conversation_id][turn_number],
"slots": _get_slots_map(labeled_line[3], labeled_line[4]),
"intents": [labeled_line[5]],
}


def build(opt):
# get path to data directory
datapath = os.path.join(opt["datapath"], "multidogo")
# define version if any
version = "v1.1"

# check if data had been previously downloaded
if not build_data.built(datapath, version_string=version):
print("[building data: " + datapath + "]")

# make a clean directory if needed
if build_data.built(datapath):
# an older version exists, so remove these outdated files.
build_data.remove_dir(datapath)
build_data.make_dir(datapath)

# Download the data.
RESOURCE.download_file(datapath)

# mark the data as built
build_data.mark_done(datapath, version_string=version)

# do preprocessing on the data to put it into FBDialogueData format
for fold in ["train", "valid", "test"]:
_preprocess(opt, datapath, fold)
15 changes: 15 additions & 0 deletions parlai/tasks/multidogo/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/usr/bin/env python3

# Copyright (c) Facebook, Inc. and its affiliates.
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

from parlai.utils.testing import AutoTeacherTest


class TestSystemTeacher(AutoTeacherTest):
task = "multidogo:SystemTeacher"


class TestUserSimulatorTeacher(AutoTeacherTest):
task = "multidogo:UserSimulatorTeacher"
47 changes: 47 additions & 0 deletions parlai/tasks/multidogo/test/multidogo_SystemTeacher_test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
acts:
- - domain: airline
episode_done: false
eval_labels:
- 'APIS: '
id: Multidogo_SystemTeacher
slots: {}
text: 'APIS: '
type: 'APIS: '
- - domain: airline
episode_done: false
eval_labels:
- 'APICALL: api_name = airline'
id: Multidogo_SystemTeacher
slots:
api_name: airline
text: 'USER: HELLO ROBIN'
type: 'APICALL: '
- - domain: airline
episode_done: false
eval_labels:
- 'SYSTEM: Hello! Good morning. You''ve reached LMT Airways. How may I assist
you today?'
id: Multidogo_SystemTeacher
slots: {}
text: 'APIRESP: '
type: 'SYSTEM: '
- - domain: airline
episode_done: false
eval_labels:
- 'APICALL: api_name = airline'
id: Multidogo_SystemTeacher
slots:
api_name: airline
text: 'USER: I NEED BOARDING PASS '
type: 'APICALL: '
- - domain: airline
episode_done: false
eval_labels:
- 'SYSTEM: Awesome! I''d be glad to help you with that. May I know your last name
please?'
id: Multidogo_SystemTeacher
slots: {}
text: 'APIRESP: '
type: 'SYSTEM: '
num_episodes: 2316
num_examples: 43104
49 changes: 49 additions & 0 deletions parlai/tasks/multidogo/test/multidogo_SystemTeacher_train.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
acts:
- - domain: airline
episode_done: false
id: Multidogo_SystemTeacher
labels:
- 'APIS: '
slots: {}
text: 'APIS: '
type: 'APIS: '
- - domain: airline
episode_done: false
id: Multidogo_SystemTeacher
labels:
- 'APICALL: api_name = airline'
slots:
api_name: airline
text: 'USER: __SILENCE__'
type: 'APICALL: '
- - domain: airline
episode_done: false
id: Multidogo_SystemTeacher
labels:
- 'SYSTEM: Welcome to High flying customer service! You''re connected to our customer
associate! Good morning! My name is Sam, How may I help you?'
slots: {}
text: 'APIRESP: '
type: 'SYSTEM: '
- - domain: airline
episode_done: false
id: Multidogo_SystemTeacher
labels:
- 'APICALL: api_name = airline'
slots:
api_name: airline
text: 'USER: HI,GOOD MORNING
I WANTS TO BOOK A TICKET FOR FLIGHT'
type: 'APICALL: '
- - domain: airline
episode_done: false
id: Multidogo_SystemTeacher
labels:
- 'SYSTEM: Absolutely!! I''d be happy to book your tickets, I''d request to please
share your details with me. May I know your full name please?'
slots: {}
text: 'APIRESP: '
type: 'SYSTEM: '
num_episodes: 15616
num_examples: 290050
47 changes: 47 additions & 0 deletions parlai/tasks/multidogo/test/multidogo_SystemTeacher_valid.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
acts:
- - domain: airline
episode_done: false
eval_labels:
- 'APIS: '
id: Multidogo_SystemTeacher
slots: {}
text: 'APIS: '
type: 'APIS: '
- - domain: airline
episode_done: false
eval_labels:
- 'APICALL: api_name = airline'
id: Multidogo_SystemTeacher
slots:
api_name: airline
text: 'USER: HI GOOD MORNING'
type: 'APICALL: '
- - domain: airline
episode_done: false
eval_labels:
- 'SYSTEM: Welcome to High flying customer service! You''re connected to our customer
associate! Good morning! My name is Sam, How may I help you?'
id: Multidogo_SystemTeacher
slots: {}
text: 'APIRESP: '
type: 'SYSTEM: '
- - domain: airline
episode_done: false
eval_labels:
- 'APICALL: api_name = airline'
id: Multidogo_SystemTeacher
slots:
api_name: airline
text: 'USER: I WANT TO BOOK A TICKET IN FLIGHT'
type: 'APICALL: '
- - domain: airline
episode_done: false
eval_labels:
- 'SYSTEM: Absolutely!! I''d be happy to book your tickets, I''d request to please
share your details with me. May I know your full name please?'
id: Multidogo_SystemTeacher
slots: {}
text: 'APIRESP: '
type: 'SYSTEM: '
num_episodes: 1590
num_examples: 29662
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
acts:
- - domain: airline
episode_done: false
eval_labels:
- 'USER: HELLO ROBIN'
id: Multidogo_UserSimulatorTeacher
text: 'GOAL: api_name = airline ; booking_confirmation_number = 523 ; email_address
= gmailcom ; name = mohan'
type: 'USER: '
- - domain: airline
episode_done: false
eval_labels:
- 'USER: I NEED BOARDING PASS '
id: Multidogo_UserSimulatorTeacher
slots: {}
text: 'SYSTEM: Hello! Good morning. You''ve reached LMT Airways. How may I assist
you today?'
type: 'USER: '
- - domain: airline
episode_done: false
eval_labels:
- 'USER: MOHAN'
id: Multidogo_UserSimulatorTeacher
slots: {}
text: 'SYSTEM: Awesome! I''d be glad to help you with that. May I know your last
name please?'
type: 'USER: '
- - domain: airline
episode_done: false
eval_labels:
- 'USER: CONFIRMATION NUMBER : moh523'
id: Multidogo_UserSimulatorTeacher
slots: {}
text: 'SYSTEM: Alright Mohan! Could you please share the booking confirmation
number?'
type: 'USER: '
- - domain: airline
episode_done: false
eval_labels:
- 'USER: Mohan283@gmail.com'
id: Multidogo_UserSimulatorTeacher
slots: {}
text: 'SYSTEM: Great! May I have your email address please?'
type: 'USER: '
num_episodes: 2316
num_examples: 43104
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
acts:
- - domain: airline
episode_done: false
id: Multidogo_UserSimulatorTeacher
labels:
- 'USER: __SILENCE__'
text: 'GOAL: api_name = airline ; arrival_city = singapore ; departure_city =
thailand ; email_address = kavigmailcom ; name = kavisri ; number_of_passengers
= five'
type: 'USER: '
- - domain: airline
episode_done: false
id: Multidogo_UserSimulatorTeacher
labels:
- 'USER: HI,GOOD MORNING
I WANTS TO BOOK A TICKET FOR FLIGHT'
slots: {}
text: 'SYSTEM: Welcome to High flying customer service! You''re connected to our
customer associate! Good morning! My name is Sam, How may I help you?'
type: 'USER: '
- - domain: airline
episode_done: false
id: Multidogo_UserSimulatorTeacher
labels:
- 'USER: KAVISRI'
slots: {}
text: 'SYSTEM: Absolutely!! I''d be happy to book your tickets, I''d request to
please share your details with me. May I know your full name please?'
type: 'USER: '
- - domain: airline
episode_done: false
id: Multidogo_UserSimulatorTeacher
labels:
- 'USER: THAILAND AND SINGAPORE'
slots: {}
text: 'SYSTEM: It''s nice meeting you kavisri! Could you please share your departure
and arrival city?'
type: 'USER: '
- - domain: airline
episode_done: false
id: Multidogo_UserSimulatorTeacher
labels:
- 'USER: OK'
slots: {}
text: 'SYSTEM: Perfect! I hope you enjoy the trip! As I''ve checked with my system
here, there is one flight of Jet airways operating on 09/20/2018, The timings
are, 6:00 Am to 8:00 Am and it is costing you $170 per head. '
type: 'USER: '
num_episodes: 15616
num_examples: 290050
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
acts:
- - domain: airline
episode_done: false
eval_labels:
- 'USER: HI GOOD MORNING'
id: Multidogo_UserSimulatorTeacher
text: 'GOAL: api_name = airline ; arrival_city = chennai ; departure_city = mumbai
; email_address = gmailcom ; name = viswa ; start_date = 92018'
type: 'USER: '
- - domain: airline
episode_done: false
eval_labels:
- 'USER: I WANT TO BOOK A TICKET IN FLIGHT'
id: Multidogo_UserSimulatorTeacher
slots: {}
text: 'SYSTEM: Welcome to High flying customer service! You''re connected to our
customer associate! Good morning! My name is Sam, How may I help you?'
type: 'USER: '
- - domain: airline
episode_done: false
eval_labels:
- 'USER: VISWA '
id: Multidogo_UserSimulatorTeacher
slots: {}
text: 'SYSTEM: Absolutely!! I''d be happy to book your tickets, I''d request to
please share your details with me. May I know your full name please?'
type: 'USER: '
- - domain: airline
episode_done: false
eval_labels:
- 'USER: MUMBAI TO CHENNAI'
id: Multidogo_UserSimulatorTeacher
slots: {}
text: 'SYSTEM: Great! It''s nice meeting you Viswa! Could you please share your
departure and arrival city?'
type: 'USER: '
- - domain: airline
episode_done: false
eval_labels:
- 'USER: 09/20/2018'
id: Multidogo_UserSimulatorTeacher
slots: {}
text: 'SYSTEM: That''s amazing! I recently visited chennai, It''s such a beautiful
place! I hope you enjoy the trip! May I know your preferred date please?'
type: 'USER: '
num_episodes: 1590
num_examples: 29662