多标签分类中的Spacy TextCat Score。

问题描述 投票:0回答:1

在spacy的文本分类中 训练_文字猫 例如,有两个指定的标签 积极的负面的. 因此,猫的得分表示为

cats = [{"POSITIVE": bool(y), "NEGATIVE": not bool(y)} for y in labels]

我正在使用多标签分类,这意味着我有两个以上的标签在一个文本中标记。我已经把我的标签添加为

textcat.add_label("CONSTRUCTION")

并指定猫咪的分数,我已经使用

cats = [{"POSITIVE": bool(y), "NEGATIVE": not bool(y)} for y in labels]

我很确定这是不正确的。有什么建议,如何在多标签分类中指定猫的分数,如何训练多标签分类?spacy的例子是否也适用于多标签分类?

spacy text-classification multilabel-classification
1个回答
0
投票

如果我理解正确的话,你有一个类别列表,你的数据可以同时有多个类别。在这种情况下,你不能使用 "POSITIVE": bool(y), "NEGATIVE": not bool(y) 来标记你的类。取而代之的是,尝试编写一个函数,它将返回一个基于类的分类字典。例如,考虑拥有以下类别列表。categories = ['POLITICS', 'ECONOMY', 'SPORT']. 现在,你可以对你的训练数据进行迭代,为每个训练例子调用一个函数。

这个函数可以是这样的。

def func(categories):
    cats = {'POLITICS': 0, 'ECONOMY': 0, 'SPORT': 0}
    for category in categories:
        cats[category] = 1
    return {'cats': cats}

有一个有两个类别的训练例子 (比如说) POLITICSECONOMY),你可以用一个类别列表调用这个函数(labels = func(['POLITICS', 'ECONOMY']),你会得到一个完整的字典,其中包括这个例子的类。


0
投票

示例脚本主要是针对单一用例的快速演示,你说的没错,这并不是多标签案例的正确评估方式。

底层的 spacy Scorerspacy evaluate CLI (https:/spacy.ioapicli#evaluate)报告多标签分类的宏观平均AUC ROC得分。

您可以使用 Scorernlp.evaluate() (https:/spacy.ioapilanguage#evaluate)或通过 spacy evaluate spacy train.

如果你的数据是在简单的 TRAIN_DATA 脚本示例中的格式。nlp.evaluate() 可能是最简单的方式来运行 Scorer,因为 spacy evaluate 会要求你将数据转换为spacy的内部JSON训练格式。

模型设置(在你初始化管道组件时指定)用于挑选一个合适的评估度量(显然这些不是唯一可能的度量,只是为每个配置选择一个合适的度量)。

  • f-score on positive label for binary exclusive,
  • 宏观平均f-score为3+独占。
  • 多标签的宏观平均AUC ROC评分。
© www.soinside.com 2019 - 2024. All rights reserved.