transformers中GLUE各个任务所用的评估方法

记录一下transformers中GLUE各个任务所用的评估方法

任务名字 内容 类型 评估方法
CoLA 语言可接受性语料库. 分类人物,预测一个句子是否是acceptable. 基于单个句子的分类任务 mcc
SST-2 斯坦福情感分类树. 分类任务,电影评价的情感分析. 基于单个句子的分类任务 acc
MRPC 微软研究释义语料库. 样本为文本时,判断两个文本的信息是否时等价的. 基于句子对的分类任务 acc_and_f1
STS-B 语义文本相似度数据集.样本为文本对,判断两个文本语义信息的相似度,分数为1-5. 基于句子对的分类任务 pearson_and_spearman
QQP 文本匹配. 判断两个问题的语义是否等价的. 基于句子对的分类任务 acc_and_f1
MNLI 多类型文本蕴含关系识别. 文本间的推理关系,又称为文本蕴含关系.样本都是文本对第一个文本M作为前提, 如果能够从文本M推理出第二个文本N,即可说M蕴含N, M->N.两个文本关系一共有3种: entailment(蕴含), contradiction(矛盾),neutral(中立) 基于句子对的分类任务 acc
QNLI 自然语言问题推理. 二分类任务,正样本为(question, sentence),包含正确的answer; 负样本为(question, sentence), 不包含正确的answer. 用于判断文本是否包含问题的答案,类似与做阅读理解定位问题所在的段落. 基于句子对的分类任务 acc
RTE 文本蕴含关系识别. 类似与MNLI,但是只是对蕴含关系的二分类判断,而且数据集更小. 基于句子对的分类任务 acc

其中各个评估方法如下:

    def simple_accuracy(preds, labels):
        return (preds == labels).mean()
    def acc_and_f1(preds, labels):
        acc = simple_accuracy(preds, labels)
        f1 = f1_score(y_true=labels, y_pred=preds)
        return {
            "acc": acc,
            "f1": f1,
            "acc_and_f1": (acc + f1) / 2,
        }
    def pearson_and_spearman(preds, labels):
        pearson_corr = pearsonr(preds, labels)[0]
        spearman_corr = spearmanr(preds, labels)[0]
        return {
            "pearson": pearson_corr,
            "spearmanr": spearman_corr,
            "corr": (pearson_corr + spearman_corr) / 2,
        }

    def glue_compute_metrics(task_name, preds, labels):
        assert len(preds) == len(labels)
        if task_name == "cola": 
            ## CoLA: the corpus of linguistic acceptability
            ## 语言可接受性语料库.分类人物,预测一个句子是否是acceptable.
            ## 基于单个句子的分类任务
            return {"mcc": matthews_corrcoef(labels, preds)}
        elif task_name == "sst-2":
            ## SST-2: the standford sentiment treebank
            ## 斯坦福情感分类树. 分类任务,电影评价的情感分析.
            ## 基于单个句子的分类任务
            return {"acc": simple_accuracy(preds, labels)}
        elif task_name == "mrpc":
            ## MRPC: microsoft research paraphrase corpus
            ## 微软研究释义语料库. 样本为文本时,判断两个文本的信息是否时等价的.
            ## 基于句子对的分类任务
            return acc_and_f1(preds, labels)
        elif task_name == "sts-b":
            ## STS-B: the semantic textual similarity benchmark
            ## 语义文本相似度数据集.样本为文本对,判断两个文本语义信息的相似度,分数为1-5.
            ## 基于句子对的分类任务
            return pearson_and_spearman(preds, labels)
        elif task_name == "qqp":
            ## QQP: quora question pairs
            ## 文本匹配. 判断两个问题的语义是否等价的.
            ## 基于句子对的分类任务
            return acc_and_f1(preds, labels)
        elif task_name == "mnli":
            ## MNLI: multi-genre natural language inference
            ## 多类型文本蕴含关系识别. 文本间的推理关系,又称为文本蕴含关系.样本都是文本对
            ## 第一个文本M作为前提, 如果能够从文本M推理出第二个文本N,即可说M蕴含N, M->N.
            ## 两个文本关系一共有3种: entailment(蕴含), contradiction(矛盾),neutral(中立)
            ## 基于句子对的分类任务
            return {"acc": simple_accuracy(preds, labels)}
        elif task_name == "mnli-mm":
            return {"acc": simple_accuracy(preds, labels)}
        elif task_name == "qnli":
            ## QNLI: question natrual language inference
            ## 自然语言问题推理. 二分类任务,正样本为(question, sentence),包含正确的answer;
            ## 负样本为(question, sentence), 不包含正确的answer. 用于判断文本是否包含问题的答案,
            ## 类似与做阅读理解定位问题所在的段落.
            ## 基于句子对的分类任务
            return {"acc": simple_accuracy(preds, labels)}
        elif task_name == "rte":
            ## RTE: recogniziong textual entailment
            ## 文本蕴含关系识别. 类似与MNLI,但是只是对蕴含关系的二分类判断,而且数据集更小.
            ## 基于句子对的分类任务
            return {"acc": simple_accuracy(preds, labels)}
        elif task_name == "wnli":
            ## WNLI: Winograd NLI
            ## 自然语言推断 识别蕴含
            return {"acc": simple_accuracy(preds, labels)}
        else:
            raise KeyError(task_name)
发布了28 篇原创文章 · 获赞 5 · 访问量 4342

猜你喜欢

转载自blog.csdn.net/m0_37531129/article/details/102055853