Giter VIP home page Giter VIP logo

pptod's Introduction

Multi-Task Pre-Training for Plug-and-Play Task-Oriented Dialogue System

Authors: Yixuan Su, Lei Shu, Elman Mansimov, Arshit Gupta, Deng Cai, Yi-An Lai, and Yi Zhang

Code of our PPTOD paper: Multi-Task Pre-Training for Plug-and-Play Task-Oriented Dialogue System

News:

  • [2022/02/24] PPTOD is accepted to the main conference of ACL 2022!
  • [2021/09/29] PPTOD is publicly released!

Introduction:

Pre-trained language models have been recently shown to benefit task-oriented dialogue (TOD) systems. Despite their success, existing methods often formulate this task as a cascaded generation problem which can lead to error accumulation across different sub-tasks and greater data annotation overhead. In this study, we present PPTOD, a unified model that seamlessly supports both task-oriented dialogue understanding and response generation in a plug-and-play fashion. In addition, we introduce a new dialogue multi-task pre-training strategy that allows the model to learn the primary TOD task completion skills from heterogeneous dialog corpora. We extensively test our model on three benchmark TOD tasks, including end-to-end dialogue modelling, dialogue state tracking, and intent classification. Results show that PPTOD creates new state-of-the-art on all evaluated tasks in both full training and low-resource scenarios. Furthermore, comparisons against previous SOTA methods show that the responses generated by PPTOD are more factually correct and semantically coherent as judged by human annotators.

Alt text

Main Results:

The following table shows our models performances on end-to-end dialogue modelling (Inform, Success, BLEU, and Combined Score) on MultiWOZ 2.0. It also shows the dialogue state tracking (DST) results on MultiWOZ 2.0 and intent classification accuracy on Banking77.

Inform Success BLEU Combined Score DST Joint Accuracy Intent Classification Accuracy
PPTOD-small 87.80 75.30 19.89 101.44 51.50 93.27
PPTOD-base 89.20 79.40 18.62 102.92 53.37 93.86
PPTOD-large 82.60 74.10 19.21 97.56 53.89 94.08

Citation:

If you find our paper and resources useful, please kindly cite our paper:

@article{su2021multitask,
   author = {Yixuan Su and
             Lei Shu and
             Elman Mansimov and
             Arshit Gupta and
             Deng Cai and
             Yi{-}An Lai and
             Yi Zhang},
   title     = {Multi-Task Pre-Training for Plug-and-Play Task-Oriented Dialogue System},
   booktitle = "Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (ACL)",
   publisher = "Association for Computational Linguistics",
   year      = {2022},
   url       = {https://arxiv.org/abs/2109.14739}
}

Example Usage:

In the following, we provide an example of how to use PPTOD to address different TOD tasks without fine-tuning on any downstream task! We assume you have downloaded the pptod-small checkpoint and have it in the "./checkpoints/small/" directory (you can find instructions below).

# load the pre-trained PPTOD-small
import torch
from transformers import T5Tokenizer
model_path = r'./checkpoints/small/'
tokenizer = T5Tokenizer.from_pretrained(model_path)
from E2E_TOD.modelling.T5Model import T5Gen_Model
from E2E_TOD.ontology import sos_eos_tokens
special_tokens = sos_eos_tokens
model = T5Gen_Model(model_path, tokenizer, special_tokens, dropout=0.0, 
        add_special_decoder_token=True, is_training=False)
model.eval()
# prepare some pre-defined tokens and task-specific prompts
sos_context_token_id = tokenizer.convert_tokens_to_ids(['<sos_context>'])[0]
eos_context_token_id = tokenizer.convert_tokens_to_ids(['<eos_context>'])[0]
pad_token_id, sos_b_token_id, eos_b_token_id, sos_a_token_id, eos_a_token_id, \
sos_r_token_id, eos_r_token_id, sos_ic_token_id, eos_ic_token_id = \
tokenizer.convert_tokens_to_ids(['<_PAD_>', '<sos_b>', 
'<eos_b>', '<sos_a>', '<eos_a>', '<sos_r>','<eos_r>', '<sos_d>', '<eos_d>'])
bs_prefix_text = 'translate dialogue to belief state:'
bs_prefix_id = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(bs_prefix_text))
da_prefix_text = 'translate dialogue to dialogue action:'
da_prefix_id = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(da_prefix_text))
nlg_prefix_text = 'translate dialogue to system response:'
nlg_prefix_id = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(nlg_prefix_text))
ic_prefix_text = 'translate dialogue to user intent:'
ic_prefix_id = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(ic_prefix_text))
# an example dialogue context
dialogue_context = "<sos_u> can i reserve a five star place for thursday night at 3:30 for 2 people <eos_u> <sos_r> i'm happy to assist you! what city are you dining in? <eos_r> <sos_u> seattle please. <eos_u>"
context_id = tokenizer.convert_tokens_to_ids(tokenizer.tokenize(dialogue_context))
# predict belief state 
input_id = bs_prefix_id + [sos_context_token_id] + context_id + [eos_context_token_id]
input_id = torch.LongTensor(input_id).view(1, -1)
x = model.model.generate(input_ids = input_id, decoder_start_token_id = sos_b_token_id,
            pad_token_id = pad_token_id, eos_token_id = eos_b_token_id, max_length = 128)
print (model.tokenized_decode(x[0]))
# the predicted result is
# <sos_b> [restaurant] rating five star date thursday night start time 3:30 number of people 2 city seattle <eos_b>
# predict dialogue act
input_id = da_prefix_id + [sos_context_token_id] + context_id + [eos_context_token_id]
input_id = torch.LongTensor(input_id).view(1, -1)
x = model.model.generate(input_ids = input_id, decoder_start_token_id = sos_a_token_id,
            pad_token_id = pad_token_id, eos_token_id = eos_a_token_id, max_length = 128)
print (model.tokenized_decode(x[0]))
# the predicted result is
# <sos_a> [restaurant] [inform] restaurant name rating [multiple_choice] restaurant name <eos_a>
# predict system response
input_id = nlg_prefix_id + [sos_context_token_id] + context_id + [eos_context_token_id]
input_id = torch.LongTensor(input_id).view(1, -1)
x = model.model.generate(input_ids = input_id, decoder_start_token_id = sos_r_token_id,
            pad_token_id = pad_token_id, eos_token_id = eos_r_token_id, max_length = 128)
print (model.tokenized_decode(x[0]))
# the predicted result is 
# <sos_r> ok, let me find some options for you. <eos_r>
# predict user intent
input_id = ic_prefix_id + [sos_context_token_id] + context_id + [eos_context_token_id]
input_id = torch.LongTensor(input_id).view(1, -1)
x = model.model.generate(input_ids = input_id, decoder_start_token_id = sos_ic_token_id,
            pad_token_id = pad_token_id, eos_token_id = eos_ic_token_id, max_length = 128)
print (model.tokenized_decode(x[0]))
# the predicted result is 
# <sos_d> [book_restaurant] <eos_d>

1. Environment Setup:

pip3 install -r requirements.txt
python -m spacy download en_core_web_sm

2. PPTOD Checkpoints:

You can download checkpoints of PPTOD with different configurations here.

PPTOD-small PPTOD-base PPTOD-large
here here here

To use PPTOD, you should download the checkpoint you want and unzip it in the ./checkpoints directory.

Alternatively, you can run the following commands to download the PPTOD checkpoints.

(1) Downloading Pre-trained PPTOD-small Checkpoint:

cd checkpoints
chmod +x ./download_pptod_small.sh
./download_pptod_small.sh

(2) Downloading Pre-trained PPTOD-base Checkpoint:

cd checkpoints
chmod +x ./download_pptod_base.sh
./download_pptod_base.sh

(3) Downloading Pre-trained PPTOD-large Checkpoint:

cd checkpoints
chmod +x ./download_pptod_large.sh
./download_pptod_large.sh

3. Data Preparation:

The detailed instruction for preparing the pre-training corpora and the data of downstream TOD tasks are provided in the ./data folder.

4. Dialogue Multi-Task Pre-training:

To pre-train a PPTOD model from scratch, please refer to details provided in ./Pretraining directory.

5. Benchmark TOD Tasks:

(1) End-to-End Dialogue Modelling:

To perform End-to-End Dialogue Modelling using PPTOD, please refer to details provided in ./E2E_TOD directory.

(2) Dialogue State Tracking:

To perform Dialogue State Tracking using PPTOD, please refer to details provided in ./DST directory.

(3) Intent Classification:

To perform Intent Classification using PPTOD, please refer to details provided in ./IC directory.

Security

See CONTRIBUTING for more information.

License

This project is licensed under the Apache-2.0 License.

pptod's People

Contributors

amazon-auto avatar dlwlgus53 avatar leishu02 avatar mansimov avatar sailik1991 avatar yxuansu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pptod's Issues

Question about low-resource settings due to potential leaking information from Pre-training Phase

Hi, I found that CamRest676 is used in the pre-training phase. However, 675 of CamRest-676(dialogs) are already Included in the MultiWOZ training datasets, and CamRest676 is also processed and trained in a multi-task way.

While in your low-resource training (Sec 4.1.4), i.e., we train our model on MultiWOZ 2.0 by varying the percentage of training data, ranging from 1% (∼80 samples) to 20% (∼1600 samples). Although the model did not use the MultiWOZ dataset in the pre-training phase, the model has already potentially still seen a lot dialogs of MultiWOZ through CamRest676, i.e., the model already leaks information during pre-training phase; as such the results of low-resource training maybe not fully correct.

Not able to download data

Hi
To download data, we have to run the pre-taining-corpora but it is not working.
The links present in the files appears to be broken.
Thanks
Anuja

Plug-and-Play vs Cascaded Generation

Hi, I have some questions about two E2E generation modes "Plug-and-Play vs Cascaded Generation":

  1. In Plug-and-Play, how do you insert the DB results?
  2. If the output of POL and NLG are generated in parallel, then what is the use of POL output? I've observed inconsistent between generated dialog acts and the response in https://raw.githubusercontent.com/awslabs/pptod/main/E2E_TOD/inference_result/small/full_training/inference_result_e2e_evaluation_inform_87.8_success_75.3_bleu_19.89_combine_score_101.44.json
  3. In Cascaded Generation, how do you insert DB result & pol output?

Thanks!

Performance impact of `shuffle_mode`?

Hi all, really enjoyed this approach and am exploring the data setup in the repository. I noticed you support two shuffle modes between epochs, one by turn (complete shuffle) and one which preserves sessions and their turn order. Is there any particular advantage to the session_level shuffle mode or vice-versa?

Issues with E2E modelling

Hi, thanks for releasing your code.

I am following your work. But I have a problem with the end-to-end modelling.

(1) I pretraining the pptod checkpoints using the scripts in the Pretraining folder with pretraining_pptod_small.sh
(2) I training the E2E model following the instructions in the E2E_TOD/sh_folder/small/training/pptod_small_train_full_training.sh

However, when eval the model using the test set, it can achive comparable results 82.9/72.4/18.93/97.08 (Inform/Success/BLEU/Combined Score) with T5-small (Plug-and-Play) shown in Table 6. It seems the pptod pretraining is not work?

I am wonder is there anything that i went wrong?

Quesation about reproducing results using my own model

Hi, I'm new to TOD task, trying to reproduce the results on the multiwoz dataset. I found your project is perfect to follow, so I used tour dataset and evaluation script.

Specifically, I tried to use BART-base to reproduce E2E multiwoz, built the E2E dataset according to the flatten_data function of dataclass.py, and then used my own BART and training modules to train. Then generate it according to batch_generate of inference_utlis.py, and use eval.py for evaluation.

The final evaluation results are as follows:
BLEU: 18.27 Success: 28.90 Inform: 78.40
Then I also used your T5-small without multi-task learning for training and the result is:
BLEU: 18.03 Success: 75.85 Inform: 83.17

It can be seen that BLEU and Inform are basically the same, but there is a big gap in Success. What do you think may be the problem?

I know this is out of the scope of an issue, you can ignore it if is it not convenient. Thank you very much!

Here are partial generated results (the first two dialogues) from my BART:

[
    {
        "aspn": "[taxi] [request] leave arrive",
        "aspn_gen": "[taxi] [request] arrive",
        "aspn_reform": "[taxi] [request] leave arrive",
        "bsdx": "[taxi] destination departure",
        "bsdx_reform": "[taxi] destination , departure",
        "bspn": "[taxi] destination pizza hut fen ditton departure saint john 's college",
        "bspn_gen": "[taxi] destination pizza hut fen ditton departure saint johns college",
        "bspn_reform": "[taxi] destination is pizza hut fen ditton , departure is saint john 's college",
        "db": "[db_nores]",
        "dial_id": "sng0073",
        "dspn": "[taxi]",
        "pointer": "",
        "resp": "what time do you want to leave and what time do you want to arrive by ?",
        "resp_gen": "i would be happy to help with your request , what time would you like to leave ?",
        "turn_domain": [
            "[taxi]"
        ],
        "turn_num": 0,
        "usdx": "i would like a taxi from saint john 's college to pizza hut fen ditton .",
        "user": "i would like a taxi from saint john 's college to pizza hut fen ditton ."
    },
    {
        "aspn": "[taxi] [inform] car phone",
        "aspn_gen": "[taxi] [inform] car",
        "aspn_reform": "[taxi] [inform] car phone",
        "bsdx": "[taxi] destination departure leave",
        "bsdx_reform": "[taxi] destination , departure , leave",
        "bspn": "[taxi] destination pizza hut fen ditton departure saint john 's college leave 17:15",
        "bspn_gen": "[taxi] destination pizza hut fen ditton departure saint john 's college leave 17:15",
        "bspn_reform": "[taxi] destination is pizza hut fen ditton , departure is saint john 's college , leave is 17:15",
        "db": "[db_nores]",
        "dial_id": "sng0073",
        "dspn": "[taxi]",
        "pointer": "",
        "resp": "booking completed ! your taxi will be [value_car] contact number is [value_phone]",
        "resp_gen": "booking completed ! booked car type : [value_car] contact number : [_phone]",
        "turn_domain": [
            "[taxi]"
        ],
        "turn_num": 1,
        "usdx": "i want to leave after 17:15 .",
        "user": "i want to leave after 17:15 ."
    },
    {
        "aspn": "[general] [reqmore]",
        "aspn_gen": "[general] [reqmore]",
        "aspn_reform": "[general] [reqmore]",
        "bsdx": "[taxi] destination departure leave",
        "bsdx_reform": "[taxi] destination , departure , leave",
        "bspn": "[taxi] destination pizza hut fen ditton departure saint john 's college leave 17:15",
        "bspn_gen": "[taxi] destination pizza hut fen ditton departure saint john 's college leave 17:15",
        "bspn_reform": "[taxi] destination is pizza hut fen ditton , departure is saint john 's college , leave is 17:15",
        "db": "[db_nores]",
        "dial_id": "sng0073",
        "dspn": "[general]",
        "pointer": "",
        "resp": "you are welcome . is there anything else i can help you with today ?",
        "resp_gen": "you are welcome . is there anything else i can help you with ?",
        "turn_domain": [
            "[general]"
        ],
        "turn_num": 2,
        "usdx": "thank you for all the help ! i appreciate it .",
        "user": "thank you for all the help ! i appreciate it ."
    },
    {
        "aspn": "[general] [bye]",
        "aspn_gen": "[general] [bye]",
        "aspn_reform": "[general] [bye]",
        "bsdx": "[taxi] destination departure leave",
        "bsdx_reform": "[taxi] destination , departure , leave",
        "bspn": "[taxi] destination pizza hut fen ditton departure saint john 's college leave 17:15",
        "bspn_gen": "[taxi] destination pizza hut fen ditton departure saint john 's college leave 17:15",
        "bspn_reform": "[taxi] destination is pizza hut fen ditton , departure is saint john 's college , leave is 17:15",
        "db": "[db_nores]",
        "dial_id": "sng0073",
        "dspn": "[general]",
        "pointer": "",
        "resp": "you too ! thank you",
        "resp_gen": "thank you for using our services .",
        "turn_domain": [
            "[general]"
        ],
        "turn_num": 3,
        "usdx": "no , i am all set . have a nice day . bye .",
        "user": "no , i am all set . have a nice day . bye ."
    },
    {
        "aspn": "[restaurant] [nooffer] name [request] food",
        "aspn_gen": "[restaurant] [inform] food price area name",
        "aspn_reform": "[restaurant] [nooffer] name [request] food",
        "bsdx": "",
        "bsdx_reform": "",
        "bspn": "",
        "bspn_gen": "[restaurant] name nusha",
        "bspn_reform": "",
        "db": "[db_nores]",
        "dial_id": "pmul4648",
        "dspn": "[restaurant]",
        "pointer": "",
        "resp": "i do n't seem to be finding anything called [value_name] . what type of food does the restaurant serve ?",
        "resp_gen": "[value_name] is a [value_food] restaurant in the [valuevalue_area] . would you like to make a reservation ?",
        "turn_domain": [
            "[restaurant]"
        ],
        "turn_num": 0,
        "usdx": "please find a restaurant called nusha .",
        "user": "please find a restaurant called nusha ."
    },
    {
        "aspn": "[restaurant] [inform] name [request] name",
        "aspn_gen": "[restaurant] [inform] price name food",
        "aspn_reform": "[restaurant] [inform] name [request] name",
        "bsdx": "",
        "bsdx_reform": "",
        "bspn": "",
        "bspn_gen": "[restaurant] name nusha",
        "bspn_reform": "",
        "db": "[db_nores]",
        "dial_id": "pmul4648",
        "dspn": "[restaurant]",
        "pointer": "",
        "resp": "could you double check that you have spelled the name correctly ? the closest i can find is [value_name] .",
        "resp_gen": "[value_name] serves [value_food] food .",
        "turn_domain": [
            "[restaurant]"
        ],
        "turn_num": 1,
        "usdx": "i am not sure of the type of food but could you please check again and see if you can find it ? thank you .",
        "user": "i am not sure of the type of food but could you please check again and see if you can find it ? thank you ."
    },
    {
        "aspn": "[attraction] [inform] type address area [general] [reqmore]",
        "aspn_gen": "[general] [reqmore]",
        "aspn_reform": "[attraction] [inform] type address area [general] [reqmore]",
        "bsdx": "[attraction] name",
        "bsdx_reform": "[attraction] name",
        "bspn": "[attraction] name nusha",
        "bspn_gen": "[restaurant] name nusha food do n't care",
        "bspn_reform": "[attraction] name is nusha",
        "db": "[db_1]",
        "dial_id": "pmul4648",
        "dspn": "[attraction]",
        "pointer": "attraction: 1; ",
        "resp": "oh its okay . that is an [value_type] type located in the [value_area] at [value_address] . do you need their phone number ?",
        "resp_gen": "is there anything else i can help you with today ?",
        "turn_domain": [
            "[attraction]"
        ],
        "turn_num": 2,
        "usdx": "it is not a restaurant , it is an attraction . nusha .",
        "user": "it is not a restaurant , it is an attraction . nusha ."
    },
    {
        "aspn": "[attraction] [inform] postcode address [general] [reqmore]",
        "aspn_gen": "[attraction] [inform] postcode address",
        "aspn_reform": "[attraction] [inform] postcode address [general] [reqmore]",
        "bsdx": "[attraction] name",
        "bsdx_reform": "[attraction] name",
        "bspn": "[attraction] name nusha",
        "bspn_gen": "[attraction] name nusha [restaurant] name do n't care",
        "bspn_reform": "[attraction] name is nusha",
        "db": "[db_1]",
        "dial_id": "pmul4648",
        "dspn": "[attraction]",
        "pointer": "attraction: 1; ",
        "resp": "their address is [value_address] the postcode is [value_postcode] . is their anything else i can do for you ?",
        "resp_gen": "[value_name] is located at [value_address] and their postcode is [value] . can i help you with anything else ?",
        "turn_domain": [
            "[attraction]"
        ],
        "turn_num": 3,
        "usdx": "no , but please confirm their address again and their postcode .",
        "user": "no , but please confirm their address again and their postcode ."
    },
    {
        "aspn": "[restaurant] [inform] food area choice [request] price",
        "aspn_gen": "[restaurant] [inform] choice [request] price",
        "aspn_reform": "[restaurant] [inform] food area choice [request] price",
        "bsdx": "[attraction] name [restaurant] food area",
        "bsdx_reform": "[attraction] name [restaurant] food , area",
        "bspn": "[attraction] name nusha [restaurant] food indian area centre",
        "bspn_gen": "[attraction] name nusha [restaurant] name do n't care area centre food indian",
        "bspn_reform": "[attraction] name is nusha [restaurant] food is indian , area is centre",
        "db": "[db_3]",
        "dial_id": "pmul4648",
        "dspn": "[restaurant]",
        "pointer": "restaurant: >3; ",
        "resp": "there are [value_choice] [value_food] restaurant -s in [value_area] what price range do you want ?",
        "resp_gen": "there are [value_choice] restaurant -s that meet your criteria . do you have a price range in mind ?",
        "turn_domain": [
            "[restaurant]"
        ],
        "turn_num": 4,
        "usdx": "i want indian food in the center area .",
        "user": "i want indian food in the center area ."
    },
    {
        "aspn": "[restaurant] [inform] price food name",
        "aspn_gen": "[restaurant] [recommend] name [offerbook]",
        "aspn_reform": "[restaurant] [inform] price food name",
        "bsdx": "[attraction] name [restaurant] food area pricerange",
        "bsdx_reform": "[attraction] name [restaurant] food , area , pricerange",
        "bspn": "[attraction] name nusha [restaurant] food indian area centre pricerange expensive",
        "bspn_gen": "[restaurant] name nusha food indian area centre pricerange expensive",
        "bspn_reform": "[attraction] name is nusha [restaurant] food is indian , area is centre , pricerange is expensive",
        "db": "[db_3]",
        "dial_id": "pmul4648",
        "dspn": "[restaurant]",
        "pointer": "restaurant: >3; ",
        "resp": "[value_name] is an [value_price] restaurant that serves [value_food] food",
        "resp_gen": "there are [value_choice] restaurant -s that meet your criteria . do you have a price range in mind ?",
        "turn_domain": [
            "[restaurant]"
        ],
        "turn_num": 5,
        "usdx": "i am looking for expensive indian food .",
        "user": "i am looking for expensive indian food ."
    },
    {
        "aspn": "[restaurant] [inform] address",
        "aspn_gen": "[restaurant] [inform] address [general] [reqmore]",
        "aspn_reform": "[restaurant] [inform] address",
        "bsdx": "[attraction] name [restaurant] food area pricerange name",
        "bsdx_reform": "[attraction] name [restaurant] food , area , pricerange , name",
        "bspn": "[attraction] name nusha [restaurant] food indian area centre pricerange expensive name saffron brasserie",
        "bspn_gen": "[restaurant] name nusha food indian area centre pricerange expensive",
        "bspn_reform": "[attraction] name is nusha [restaurant] food is indian , area is centre , pricerange is expensive , name is saffron brasserie",
        "db": "[db_1]",
        "dial_id": "pmul4648",
        "dspn": "[restaurant]",
        "pointer": "restaurant: 1; ",
        "resp": "the address is [value_address]",
        "resp_gen": "[value_name] is located at [value_address] .",
        "turn_domain": [
            "[restaurant]"
        ],
        "turn_num": 6,
        "usdx": "can i get the address for saffron brasserie ?",
        "user": "can i get the address for saffron brasserie ?"
    },
    {
        "aspn": "[restaurant] [inform] food name",
        "aspn_gen": "[restaurant] [inform] food",
        "aspn_reform": "[restaurant] [inform] food name",
        "bsdx": "[attraction] name [restaurant] food area pricerange name",
        "bsdx_reform": "[attraction] name [restaurant] food , area , pricerange , name",
        "bspn": "[attraction] name nusha [restaurant] food indian area centre pricerange expensive name saffron brasserie",
        "bspn_gen": "[restaurant] name nusha food indian area centre pricerange expensive",
        "bspn_reform": "[attraction] name is nusha [restaurant] food is indian , area is centre , pricerange is expensive , name is saffron brasserie",
        "db": "[db_1]",
        "dial_id": "pmul4648",
        "dspn": "[restaurant]",
        "pointer": "restaurant: 1; ",
        "resp": "yes , [value_name] is [value_food] food .",
        "resp_gen": "[value_name] serves [value_food] food .",
        "turn_domain": [
            "[restaurant]"
        ],
        "turn_num": 7,
        "usdx": "can i clarify that it was indian food and not italian food please ?",
        "user": "can i clarify that it was indian food and not italian food please ?"
    },
    {
        "aspn": "[general] [bye]",
        "aspn_gen": "[general] [bye]",
        "aspn_reform": "[general] [bye]",
        "bsdx": "[attraction] name [restaurant] food area pricerange name",
        "bsdx_reform": "[attraction] name [restaurant] food , area , pricerange , name",
        "bspn": "[attraction] name nusha [restaurant] food indian area centre pricerange expensive name saffron brasserie",
        "bspn_gen": "[restaurant] name nusha food indian area centre pricerange expensive",
        "bspn_reform": "[attraction] name is nusha [restaurant] food is indian , area is centre , pricerange is expensive , name is saffron brasserie",
        "db": "[db_nores]",
        "dial_id": "pmul4648",
        "dspn": "[general]",
        "pointer": "",
        "resp": "i hope i have been of help",
        "resp_gen": "thank you for contacting us and have a nice day .",
        "turn_domain": [
            "[general]"
        ],
        "turn_num": 8,
        "usdx": "thank you that is all the information i need at the moment .",
        "user": "thank you that is all the information i need at the moment ."
    },
    {
        "aspn": "[general] [bye]",
        "aspn_gen": "[general] [bye]",
        "aspn_reform": "[general] [bye]",
        "bsdx": "[attraction] name [restaurant] food area pricerange name",
        "bsdx_reform": "[attraction] name [restaurant] food , area , pricerange , name",
        "bspn": "[attraction] name nusha [restaurant] food indian area centre pricerange expensive name saffron brasserie",
        "bspn_gen": "[attraction] name nusha [restaurant] name do n't care area centre food indian pricerange expensive",
        "bspn_reform": "[attraction] name is nusha [restaurant] food is indian , area is centre , pricerange is expensive , name is saffron brasserie",
        "db": "[db_nores]",
        "dial_id": "pmul4648",
        "dspn": "[general]",
        "pointer": "",
        "resp": "i am glad to help . enjoy your stay !",
        "resp_gen": "thank you for contacting us and have a nice day .",
        "turn_domain": [
            "[general]"
        ],
        "turn_num": 9,
        "usdx": "you have . thank you . goodbye .",
        "user": "you have . thank you . goodbye ."
    }
]

About domain overlapping

Hi! I am really interested in your work.
Anyway, I just found that in your preprocessing script there is nothing about removing the overlapping data between pretrain and finetuning. Will these overlapping domains affect the result of low-resource experiment?
Looking forward to your reply!

About PPTOD-large in End2End Modeling

Thanks for your outstanding work!

In the End2End evaluation, the PPTOD-large is worse than PPTOD-small and PPTOD-base on both full-training (Table 2) and few-shot (Table 3) versions.

To a certain extent, this result is contrary to common sense. Is there any possible reason or experimental discovery?

About results of the E2E-TOD

Hi, what a nice work!
I have a little question about results of the E2E_TOD fine-tuning.
I noticed that the released best result is obtained at Epoch 6. However, I trained 15 epoch and only get 92.06 combined score (at epoch 10). My batch size is 128 (number_of_gpu 4, batch_size_per_gpu 2, gradient_accumulation_steps 16), which is same as the release code.
I wonder that is there any other settings for E2E_TOD fine-tuning to get best result in a few epochs.

Looking forward to your reply.

E2E_TOD performance

Hello, I have a question regarding performance of the E2E TOD task.
I downloaded the checkpoints you uploaded on Github and evaluated T5-small (240MB), T5-base (900MB), and T5-large (3GB).
I think I got the same number for T5-large (97.57), but it seems that T5-small (101.44 -> 102.92) and T5-base (102.92 -> 101.44) are switched around.
Thanks.

DST inference result on MultiWOZ 2.1

Hi,
Firstly, congratulation on this nice work.
Could you please upload the DST inference result on the MultiWOZ 2.1 dataset as well. Alternatively, please let me know how to generate the same on the MultiWOZ 2.1.

About DST on delexicalized response

Hi, this is very great work. Congrats on being accepted by ACL2022.

But I have a question about the DST model. It seems that the DST model is trained and evaluated on delexicalized response. However, some slot values are mentioned in the non-delexicalized system responses. How can the model predict these slots correctly if it is trained and evaluated using delexicalized responses?

Thanks!

About E2E_Tod Modeling

When perform inference using pretrained checkpoints, I found the NLG in function e2e_batch_generate using the encoded golden context as inputs. In other words, the model infers with the golden previous system responses instead of the system responses generated by model.

I don't know if this problem is due to a misunderstanding that I didn't read the code carefully.

About evaluation script

Hi!
Firstly, thanks for answering the other issue of mine in time.
And I am also confused by your E2E_TOD evaluation scripts. Function queryJsons() in dp_ops.py seems will return all of the names of the search domain if it can not find a name that exactly match. Is there a bug or do you do it on purpose?
Sorry to bother you twice.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.