Skip to content
Snippets Groups Projects
Commit e80628bb authored by function2's avatar function2
Browse files

add value unification

parent e0f5210b
Branches
No related tags found
No related merge requests found
import os import os
import json import json
import zipfile import zipfile
from copy import deepcopy
from convlab2 import DATA_ROOT from convlab2 import DATA_ROOT
...@@ -60,22 +61,28 @@ def extract_gt(test_data): ...@@ -60,22 +61,28 @@ def extract_gt(test_data):
return gt return gt
def eval_states(gt, pred, subtask):
# for unifying values with the same meaning to the same expression # for unifying values with the same meaning to the same expression
value_unifier = { def unify_value(value, subtask):
if isinstance(value, list):
ret = deepcopy(value)
for i, v in enumerate(ret):
ret[i] = unify_value(v, subtask)
return ret
return {
'multiwoz': { 'multiwoz': {
'未提及': '', '未提及': '',
'none': '',
'是的': '',
'不是': '没有',
}, },
'crosswoz': { 'crosswoz': {
'None': '',
} }
}[subtask] }[subtask].get(value, value)
def unify_value(value):
if isinstance(value, list):
return list(map(unify_value, value))
return value_unifier.get(value, value)
def eval_states(gt, pred, subtask):
def exception(description, **kargs): def exception(description, **kargs):
ret = { ret = {
'status': 'exception', 'status': 'exception',
...@@ -107,8 +114,8 @@ def eval_states(gt, pred, subtask): ...@@ -107,8 +114,8 @@ def eval_states(gt, pred, subtask):
for slot_name, gt_value in gt_domain.items(): for slot_name, gt_value in gt_domain.items():
if slot_name not in pred_domain: if slot_name not in pred_domain:
return exception('slot missing', dialog_id=dialog_id, turn_id=turn_id, domain=domain_name, slot=slot_name) return exception('slot missing', dialog_id=dialog_id, turn_id=turn_id, domain=domain_name, slot=slot_name)
gt_value = unify_value(gt_value) gt_value = unify_value(gt_value, subtask)
pred_value = unify_value(pred_domain[slot_name]) pred_value = unify_value(pred_domain[slot_name], subtask)
slot_tot += 1 slot_tot += 1
if gt_value == pred_value or isinstance(gt_value, list) and pred_value in gt_value: if gt_value == pred_value or isinstance(gt_value, list) and pred_value in gt_value:
slot_acc += 1 slot_acc += 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment