def score_clustering_solution(tgt, sol, gold, tempdir='eval/semeval_unsup_eval/keys', use_sklearn_vmeas=False, semeval_root='eval/semeval_unsup_eval'):
'''
Score clustering solution sol against gold classes.
Both the sol and gold are passed as dictionaries with integer keys (value
is unimportant) and sets of paraphrases in each cluster as values.
Returns (fscore, precision, recall, vmeasure, homogeneity, completeness)
:param tgt: str (target word you're clustering)
:param sol: dict {int -> set}
:param gold: dict {int -> set}
:param tempdir: stra (temporary directory to store scoring key files)
:param use_sklearn_vmeas: boolean (setting true will use SKLearn version of V-Measure instead of semeval script)
:param semeval_root: str (path to semeval root directory)
:return: FScore, precision, recall, V-Measure, homogeneity, completeness (all floats)
'''
## Verify set of paraphrases in gold and sol are the same
assert set.union(*sol.values()) == set.union(*gold.values())
## Write temporary key files
tempsolkey = os.path.join(tempdir, 'sol_temp.key')
tempgoldkey = os.path.join(tempdir, 'gld_temp.key')
write_key(tempsolkey, tgt, sol)
write_key(tempgoldkey, tgt, gold)
## Call scoring script
tempscorefile = os.path.join(tempdir, 'scorestemp')
tempscores = open(tempscorefile, 'w')
score_semeval(tempsolkey, tempgoldkey, tempscores, semeval_root=semeval_root)
tempscores.close()
fscore, prec, rec, vmeas, hom, comp = read_scoring_soln(tempscorefile, tgt)
## Delete temporary key files
# os.remove(tempsolkey)
# os.remove(tempgoldkey)
# os.remove(tempscorefile)
if use_sklearn_vmeas:
goldlab, sollab, words = get_labels(gold, sol)
vmeas = metrics.v_measure_score(goldlab, sollab)
hom = metrics.homogeneity_score(goldlab, sollab)
comp = metrics.completeness_score(goldlab, sollab)
return fscore, prec, rec, vmeas, hom, comp
评论列表
文章目录