记录一下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)