quad_match_score / README.md
yuyijiong's picture
Upload 2 files
13f64cc
metadata
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

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

论文即将发表