了解分类项目的类型
自定义文本分类将标签(在 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"
}
]
}
]
}
}