in generate_result_table.py [0:0]
def create_csv(args):
results = pickle.load(open(os.path.join(args.result_dir, args.result_file), 'rb'))
results = results['violation_detection_results_no_intent']
if args.pipeline == 'deterministic':
method_list = ['exact', 'bijaccard', 'edit_distance',
'roberta_mnli', 'roberta_mnli_0.2', 'average_three', 'average_three_0.5']
elif args.pipeline == 'probabilistic':
method_list = ['bijaccard', 'edit_distance_norm',
'roberta_mnli', 'roberta_mnli_0.2',
'average_three', 'average_three_0.5']
else:
raise Exception(f"Unrecognized pipeline name: {args.pipeline}")
if "fastfood" in args.task:
constraints = ['food_item-ingredient', 'drink_item-ingredient', 'food_item-size', 'drink_item-size']
elif "insurance" in args.task:
constraints = ['car_model_brand', 'closedType_car_brand', 'closedType_car_model', 'closedType_car_year']
else:
raise Exception(f"Unsupported task: {args.task}; Support only fastfood and insurance")
rows = []
for met in method_list:
row = {'method_name': met}
for m in ['conversation_correct','exact_match','iou']: # exact match = turn correct
try:
row[m] = f'{results[met][m]:.3f}'
except TypeError:
row[m] = str(results[met][m])
for m in ['f1', 'precision', 'recall']:
try:
row[m] = f'{results[met]["independent"][m]:.3f}'
except TypeError:
row[m] = str(results[met]["independent"][m])
for cname in constraints:
try:
row[cname] = f'{results[met]["independent"]["constraint_stats"][cname]["f1"]:.3f}'
except TypeError:
row[cname] = str(results[met]["independent"]["constraint_stats"][cname]["f1"])
rows.append(row)
filename = args.result_file[:-7] + '.csv'
with open(os.path.join(args.result_dir, filename), 'w', newline='\n', encoding='utf-8') as csv_file:
fieldnames = ['method_name','conversation_correct','exact_match','iou', 'f1', 'precision', 'recall'] + constraints
writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter = ',')
writer.writeheader()
writer.writerows(rows)