| @@ -154,7 +154,8 @@ utter3 = { | |||||
| 'User-2': | 'User-2': | ||||
| 'I am looking for an expensive indian restaurant in the area of centre.', | 'I am looking for an expensive indian restaurant in the area of centre.', | ||||
| 'System-2': | 'System-2': | ||||
| 'Might I recommend Saffron Brasserie? That is an expensive Indian restaurant in the center of town. I can book a table for you, if you like.', | |||||
| 'Might I recommend Saffron Brasserie? That is an expensive Indian restaurant ' | |||||
| 'in the center of town. I can book a table for you, if you like.', | |||||
| 'Dialog_Act-2': { | 'Dialog_Act-2': { | ||||
| 'Restaurant-Recommend': [['area', 'center of town'], | 'Restaurant-Recommend': [['area', 'center of town'], | ||||
| ['food', 'Indian'], | ['food', 'Indian'], | ||||
| @@ -342,7 +343,8 @@ history_states3 = [{}, { | |||||
| 'leaveAt': '' | 'leaveAt': '' | ||||
| } | } | ||||
| } | } | ||||
| }, {}] | |||||
| }, {} | |||||
| ] | |||||
| class DSTProcessor(object): | class DSTProcessor(object): | ||||
| @@ -379,7 +381,8 @@ class DSTProcessor(object): | |||||
| def _convert_inputs_to_utterances(self, inputs: dict, | def _convert_inputs_to_utterances(self, inputs: dict, | ||||
| history_states: list): | history_states: list): | ||||
| """This method is to generate the utterances with user, sys, dialog_acts and metadata, while metadata is from the history_states or the output from the inference pipline""" | |||||
| """This method is to generate the utterances with user, sys, dialog_acts and metadata, | |||||
| while metadata is from the history_states or the output from the inference pipline""" | |||||
| utterances = [] | utterances = [] | ||||
| user_inputs = [] | user_inputs = [] | ||||
| @@ -426,8 +429,8 @@ class DSTProcessor(object): | |||||
| if isinstance(item, dict): | if isinstance(item, dict): | ||||
| for a in item: | for a in item: | ||||
| aa = a.lower().split('-') | aa = a.lower().split('-') | ||||
| if aa[1] == 'inform' or aa[1] == 'recommend' or aa[ | |||||
| 1] == 'select' or aa[1] == 'book': | |||||
| if aa[1] == 'inform' or aa[1] == 'recommend' or \ | |||||
| aa[1] == 'select' or aa[1] == 'book': | |||||
| for i in item[a]: | for i in item[a]: | ||||
| s = i[0].lower() | s = i[0].lower() | ||||
| v = i[1].lower().strip() | v = i[1].lower().strip() | ||||
| @@ -507,8 +510,8 @@ class multiwoz22Processor(DSTProcessor): | |||||
| if isinstance(acts[d][t]['dialog_act'], dict): | if isinstance(acts[d][t]['dialog_act'], dict): | ||||
| for a in acts[d][t]['dialog_act']: | for a in acts[d][t]['dialog_act']: | ||||
| aa = a.lower().split('-') | aa = a.lower().split('-') | ||||
| if aa[1] == 'inform' or aa[1] == 'recommend' or aa[ | |||||
| 1] == 'select' or aa[1] == 'book': | |||||
| if aa[1] == 'inform' or aa[1] == 'recommend' \ | |||||
| or aa[1] == 'select' or aa[1] == 'book': | |||||
| for i in acts[d][t]['dialog_act'][a]: | for i in acts[d][t]['dialog_act'][a]: | ||||
| s = i[0].lower() | s = i[0].lower() | ||||
| v = i[1].lower().strip() | v = i[1].lower().strip() | ||||
| @@ -762,8 +765,7 @@ class multiwoz22Processor(DSTProcessor): | |||||
| if delexicalize_sys_utts and is_sys_utt: | if delexicalize_sys_utts and is_sys_utt: | ||||
| inform_dict = {slot: 'none' for slot in slot_list} | inform_dict = {slot: 'none' for slot in slot_list} | ||||
| for slot in slot_list: | for slot in slot_list: | ||||
| if (str(dialog_id), str(turn_itr), | |||||
| slot) in sys_inform_dict: | |||||
| if (str(dialog_id), str(turn_itr), slot) in sys_inform_dict: | |||||
| inform_dict[slot] = sys_inform_dict[(str(dialog_id), | inform_dict[slot] = sys_inform_dict[(str(dialog_id), | ||||
| str(turn_itr), | str(turn_itr), | ||||
| slot)] | slot)] | ||||
| @@ -800,8 +802,7 @@ class multiwoz22Processor(DSTProcessor): | |||||
| if s in booked_slots: | if s in booked_slots: | ||||
| value_label = booked_slots[s] | value_label = booked_slots[s] | ||||
| # Remember modified slots and entire dialog state | # Remember modified slots and entire dialog state | ||||
| if cs in slot_list and cumulative_labels[ | |||||
| cs] != value_label: | |||||
| if cs in slot_list and cumulative_labels[cs] != value_label: | |||||
| modified_slots[cs] = value_label | modified_slots[cs] = value_label | ||||
| cumulative_labels[cs] = value_label | cumulative_labels[cs] = value_label | ||||
| @@ -901,8 +902,7 @@ class multiwoz22Processor(DSTProcessor): | |||||
| # since correct slot assignment can not be guaranteed anymore. | # since correct slot assignment can not be guaranteed anymore. | ||||
| if label_value_repetitions and slot in diag_seen_slots_dict: | if label_value_repetitions and slot in diag_seen_slots_dict: | ||||
| if class_type == 'copy_value' and list( | if class_type == 'copy_value' and list( | ||||
| diag_seen_slots_value_dict.values()).count( | |||||
| value_label) > 1: | |||||
| diag_seen_slots_value_dict.values()).count(value_label) > 1: | |||||
| class_type = 'none' | class_type = 'none' | ||||
| usr_utt_tok_label = [0 for _ in usr_utt_tok_label] | usr_utt_tok_label = [0 for _ in usr_utt_tok_label] | ||||
| @@ -934,11 +934,10 @@ class multiwoz22Processor(DSTProcessor): | |||||
| class_type_dict[slot] = 'none' | class_type_dict[slot] = 'none' | ||||
| referral_dict[slot] = 'none' | referral_dict[slot] = 'none' | ||||
| if analyze: | if analyze: | ||||
| if slot not in diag_seen_slots_dict or value_label != diag_seen_slots_value_dict[ | |||||
| slot]: | |||||
| if slot not in diag_seen_slots_dict or value_label != diag_seen_slots_value_dict[slot]: | |||||
| print('(%s): %s, ' % (slot, value_label), end='') | print('(%s): %s, ' % (slot, value_label), end='') | ||||
| elif slot in diag_seen_slots_dict and class_type == diag_seen_slots_dict[ | |||||
| slot] and class_type != 'copy_value' and class_type != 'inform': | |||||
| elif slot in diag_seen_slots_dict and class_type == diag_seen_slots_dict[slot] \ | |||||
| and class_type != 'copy_value' and class_type != 'inform': | |||||
| # If slot has seen before and its class type did not change, label this slot a not present, | # If slot has seen before and its class type did not change, label this slot a not present, | ||||
| # assuming that the slot has not actually been mentioned in this turn. | # assuming that the slot has not actually been mentioned in this turn. | ||||
| # Exceptions are copy_value and inform. If a seen slot has been tagged as copy_value or inform, | # Exceptions are copy_value and inform. If a seen slot has been tagged as copy_value or inform, | ||||