Nlp 序列标记任务的分类度量计算

Nlp 序列标记任务的分类度量计算,nlp,classification,precision,text-classification,precision-recall,Nlp,Classification,Precision,Text Classification,Precision Recall,我打算计算句子分类任务的准确度/精密度/回忆度/F1度量。我以前计算过全文分类,这很容易,但在句子分类时,我感到困惑,因为我们在句子层面上执行,而不是在文本/句子层面上执行。请注意,文本可能包含多个句子。。。以下是一个例子: 假设我们有以下文本,在[]中有预测的标签: Seq2seq网络是学习序列的好方法。[0]它们在生成长序列方面表现相当出色。[1] 这些网络用于下游任务,如NMT和文本摘要[0]。胡说八道 所以预测是[0,1,0,2],假设上面句子的金色标签是:[1,1,0,0] 那么这个的

我打算计算句子分类任务的准确度/精密度/回忆度/F1度量。我以前计算过全文分类,这很容易,但在句子分类时,我感到困惑,因为我们在句子层面上执行,而不是在文本/句子层面上执行。请注意,文本可能包含多个句子。。。以下是一个例子:

假设我们有以下文本,在[]中有预测的标签:

Seq2seq网络是学习序列的好方法。[0]它们在生成长序列方面表现相当出色。[1] 这些网络用于下游任务,如NMT和文本摘要[0]。胡说八道

所以预测是[0,1,0,2],假设上面句子的金色标签是:[1,1,0,0]


那么这个的准确度等于correct/total=1+1/4=0.5吗?其他指标(如精度、召回率和F1)如何?有什么想法吗

如果是多类别分类,您可以使用metrics.classification\u报告获得精确度、召回率和F1分数。您可以获得每个类的度量以及它们的“宏”、“微”、“加权”和“样本”平均值

from sklearn import metrics

# True values
y_true = [1,1,0,0]
# Predicted values
y_pred = [0,1,0,2]

# Print the confusion matrix
print(metrics.confusion_matrix(y_true, y_pred))

# Print the precision and recall, among other metrics
print(metrics.classification_report(y_true, y_pred))

提问者正在寻求有关测量模型性能的方法的建议,而不是使用特定语言/库的编程解决方案。因此,以下是一些需要思考的问题和建议的方法

在回答这个问题之前,让我们先问自己以下问题。它们将帮助我们了解前进的最佳途径

分类模型是一个单词袋类型的模型,其中的顺序并不重要,只是给定句子中的单词。如果是这样的话,模型只能根据它的用途进行测量。这意味着,正确分类的句子总数除以句子总数是一个很好的准确性度量。 如果分类模型是基于图形的模型,如隐马尔可夫模型或条件随机场,那么我们必须问自己的问题是,在对当前句子进行分类之前,是否将多个句子视为输入。如果答案是肯定的,那么最好查看整个文档以测量模型性能。正确分类的文件数除以文件总数的行上的某物。
最后一点,精确性、召回率还是准确度是最好的衡量标准取决于人们希望做出的权衡,作者对此不予评论。

当我急切地寻找解决方案时,我从一项相关任务中得到了一些启示,即NER和精确性和召回率的定义,通过计算,可以方便地计算F1分数

根据定义:

我注意到我所需要的只是计算TP、FP和FN。例如,对于真实标签为[0,0,1,0]的预测案例[0,0,1,1],TP为1,FP为0,FN为1。因此:

在这里,因为模型在积极类上的性能对我来说更重要,所以我只是在积极类上尝试这些指标。我还意识到这是F1度量的基本用法,但粒度级别因每个任务而异。希望这能帮助那些对这个问题感到困惑的人