了解分类项目的类型

已完成

自定义文本分类将标签(在 Azure AI 语言服务中是开发人员定义的类)分配给文本文件。 例如,电子游戏摘要可能归类为“冒险”、“策略”、“动作”或“体育”。

自定义文本分类分为两类项目:

  • 单标签分类:只能向每个文件分配一个类。 在上面的示例中,只能将电子游戏摘要归类为“冒险”或“策略”。
  • 多标签分类:可以向每个文件分配多个类。 在此类型的项目中,可将电子游戏摘要归类为“冒险”或“冒险和策略”。

创建自定义文本分类项目时,可指定要生成的项目。

单标签项目与多标签项目

除了可将文件归类为多个分类之外,多标签分类项目的主要区别在于标记、改进模型的注意事项和分类任务的 API 有效负载。

标记数据

在单标签项目中,每个文件在标记过程中分配有一个类;利用 Azure AI 语言中的类分配只能选择一个类。

标记多标签项目时,可以为每个文件分配任意数量的类。 复杂性增加意味着数据必须保持清晰,并为模型学习提供良好分布的可能输入。

显示单标签和多标签分类的文档到标签的映射的概念图。

正确标记数据(尤其是对于多标签项目)与模型的性能直接相关。 数据集质量越高、越明确、越多样,模型就越准确。

评估和改进模型

衡量模型的预测性能不仅仅要关注有多少预测是正确的。 当实际标签为 x,而模型预测的标签也为 x 时,即做出了正确的分类。 在现实世界中,当分类不正确时,文档会导致不同类型的错误:

  • 假正 - 模型预测 x,但文件未标记为 x。
  • 假负 - 模型没有预测到标签 x,但文件实际标签为 x。

这些指标将转换为 Azure AI 语言提供的三个度量值:

  • 召回率 - 所有实际标签中,已识别的标签数;“真正”与所有带标签对象的比率
  • 精准率 - 预测的标签中有多少是正确的;“真正”与所有识别正确的标签的比率
  • F1 分数 - 召回率和精确度的函数,旨在提供一个分数,以最大限度地平衡每个组件

提示

详细了解 Azure AI 语言评估指标,其中包括这些指标的确切计算方式

使用单标签项目,可以确定哪些类没有像其他类那样分类,并找到更多质量数据用于训练模型。 对于多标签项目,由于组合标签的可能排列矩阵,找出质量数据变得更加复杂。

例如,假设你的模型能正确分类“动作”游戏和某些“动作和策略”游戏,但不能正确分类“策略”游戏。 为了改进模型,你需要为“动作和策略”游戏以及“策略”游戏找到更多高质量的多样化摘要,以指导模型如何区分这两种游戏。 这一挑战随着模型分类的可能类的增加而呈指数级增长。

API 有效负载

Azure AI 语言提供 REST API,用于使用 JSON 正文来指定请求,以生成模型并与之交互。 此 API 抽象化为多个特定于语言的 SDK,但对于此模块,我们将示例重点放在基础 REST API 上。

若要提交分类任务,API 需要 JSON 正文来指定要执行的任务。 下一单元将详细介绍 REST API,但建议你先自行熟悉所需正文部分。

单标签分类模型指定项目类型 customSingleLabelClassification

{
  "projectFileVersion": "<API-VERSION>",
  "stringIndexType": "Utf16CodeUnit",
  "metadata": {
    "projectName": "<PROJECT-NAME>",
    "storageInputContainerName": "<CONTAINER-NAME>",
    "projectKind": "customSingleLabelClassification",
    "description": "Trying out custom multi label text classification",
    "language": "<LANGUAGE-CODE>",
    "multilingual": true,
    "settings": {}
  },
  "assets": {
    "projectKind": "customSingleLabelClassification",
        "classes": [
            {
                "category": "Class1"
            },
            {
                "category": "Class2"
            }
        ],
        "documents": [
            {
                "location": "<DOCUMENT-NAME>",
                "language": "<LANGUAGE-CODE>",
                "dataset": "<DATASET>",
                "class": {
                    "category": "Class2"
                }
            },
            {
                "location": "<DOCUMENT-NAME>",
                "language": "<LANGUAGE-CODE>",
                "dataset": "<DATASET>",
                "class": {
                    "category": "Class1"
                }
            }
        ]
    }
}

多标签分类模型指定项目类型 CustomMultiLabelClassification

{
  "projectFileVersion": "<API-VERSION>",
  "stringIndexType": "Utf16CodeUnit",
  "metadata": {
    "projectName": "<PROJECT-NAME>",
    "storageInputContainerName": "<CONTAINER-NAME>",
    "projectKind": "customMultiLabelClassification",
    "description": "Trying out custom multi label text classification",
    "language": "<LANGUAGE-CODE>",
    "multilingual": true,
    "settings": {}
  },
  "assets": {
    "projectKind": "customMultiLabelClassification",
    "classes": [
      {
        "category": "Class1"
      },
      {
        "category": "Class2"
      }
    ],
    "documents": [
      {
        "location": "<DOCUMENT-NAME>",
        "language": "<LANGUAGE-CODE>",
        "dataset": "<DATASET>",
        "classes": [
          {
            "category": "Class1"
          },
          {
            "category": "Class2"
          }
        ]
      },
      {
        "location": "<DOCUMENT-NAME>",
        "language": "<LANGUAGE-CODE>",
        "dataset": "<DATASET>",
        "classes": [
          {
            "category": "Class2"
          }
        ]
      }
    ]
  }
}