--- title: Quad Match Score datasets: - SemEval2016 Task5 tags: - evaluate - metric description: "TODO: add a description here" sdk: gradio sdk_version: 3.19.1 app_file: app.py pinned: false --- # Metric Card for My Metric ***Module Card Instructions:*** *评估生成模型的情感四元组抽取结果.* ## Metric Description 评估生成模型的情感四元组抽取结果. - 以往的评估指标:将完全一致的四元组视为一个TP样本,其余均为FP或FN样本, 这样做导致对大部分模型得分很低,尤其是在中文数据集上。 因为target和opinion的选取具有主观性,评估时要求完全一致,不利于评估模型的真实性能 - 本指标将四元组的四个方面分别评估,不要求四元组之间完全一致,而是计算其匹配度,若两个四元组匹配度为0.6,则视为0.6个TP样本,0.4个FP样本,0.4个FN样本* - 匹配度的定义为:四元组的四个方面的匹配度的加权平均值,权重默认为(1,1,1,1),可自定义。匹配度会被归一化到[0,1]之间 - target和opinion的匹配度定义为:两个字符串的rougel指标,在[0,1]之间 (也可以使用BLEU、编辑距离等指标) - aspect和polarity的匹配度定义为:两个字符串完全一致匹配度为1,否则为0 - 由于生成模型的输出不可控,不能保证prediction与reference中四元组数量一致、顺序一致,所以需要先进行最优匹配 - 若prediction有n个四元组,reference有m个四元组,假设m>n,则共有m!/(m-n)!种匹配方案, 取总匹配度最高的一对一匹配方案(最优匹配)作为最终方案,计算这种匹配下的TP,FP,FN数量,最后将所有样本的TP,FP,FN样本数相加,得到f1* - 也可以计算所有样本的平均总匹配度,作为评估指标,但会导致四元组较少的样本得分偏高而拉高总体得分 - 本指标的优点是:\ 1.不要求四元组之间完全一致,受target和opinion的选取的主观性的影响小\ 2.可以自定义权重,对不同方面的重要性进行调整\ 3.训练过程中作为验证指标,避免过拟合,更好的反映模型的真实性能\ 4.对三元组抽取等任务同样适用 ## How to Use ```python import evaluate module = evaluate.load("yuyijiong/quad_match_score") predictions=["food | good | food#taste | pos"] references=["food | good | food#taste | pos & service | bad | service#general | neg"] result=module.compute(predictions=predictions, references=references) print(result) result={'f1 of exact match': 0.6667, 'f1 of optimal match of weight (1, 1, 1, 1)': 0.6666666666666666, 'score of optimal match of weight (1, 1, 1, 1)': 0.5} ``` ### Inputs *List all input arguments in the format below* - **predictions** (`List[str]`): 模型生成的四元组,列表中每个字符串代表一个样本的生成结果. - **references** (`Union[List[str],List[List[str]]`): 人工标注的四元组,列表中每个字符串代表一个样本的标签.如果列表元素为list,代表多个reference,评估时取最高分 - **weights** (`Tuple[float, float, float, float]`,*optional*, defaults to (1,1,1,1)):分别代表(对象,观点,方面,极性)四个方面的评估指标的权重 - **tuple_len** (`str`, *optional*, defaults to "0123"): indicate the format of the quad, see the following mapping 指示四元组的格式,默认为'0123'。对应关系如下所示* ``` {'0123': "四元组(对象 | 观点 | 方面 | 极性)", '01':'二元组(对象 | 观点)', '012':'三元组(对象 | 观点 | 方面)', '013':'三元组(对象 | 观点 | 极性)', '023':'三元组(对象 | 方面 | 极性)', '23':'二元组(方面 | 极性)', '03':'二元组(对象 | 极性)', '13':'二元组(观点 | 极性)', '3':'单元素(极性)'} ``` - **sep_token1** (`str`, *optional*, defaults to " & "): the token to seperate quads 分割不同四元组的token - **sep_token2** (`str`, *optional*, defaults to " | "): the token to seperate units of one quad 四元组中不同元素之间的分隔token ### Output Values *最优匹配 f1值、最优匹配样本平均得分、完全匹配 f1值(传统评估) 组成的dict,f1值均在[0,1]之间* *例如:{'f1 of exact match': 0.6667, 'f1 of optimal match of weight (1, 1, 1, 1)': 0.6666666666666666, 'score of optimal match of weight (1, 1, 1, 1)': 0.5}* ## Limitations and Bias *对比传统评估指标,得分偏高* ## Citation *论文即将发表*