你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何为自定义 NER 准备数据并定义架构

若要创建自定义 NER 模型,需要使用优质数据对其进行训练。 本文介绍应如何选择和准备数据,以及如何定义架构。 定义架构是项目开发生命周期中的第一步,它定义需要模型在运行时从文本中提取的实体类型/类别。

架构设计

架构定义需要模型在运行时从文本中提取的实体类型/类别。

  • 查看数据集中的文档,熟悉其格式和结构。

  • 标识要从数据中提取的实体

    例如,如果要从支持电子邮件中提取实体,可能需要提取“客户名称”、“产品名称”、“请求日期”和“联系人信息”。

  • 避免实体类型含糊不清。

    当你选择的类型彼此相似时,就会发生歧义。 架构越不明确,用于区分不同实体类型所需的标记数据就越多。

    例如,如果要从法律合同中提取数据,若要提取“甲方名称”和“乙方名称”,则需要添加更多示例来避免歧义,因为双方的名称看起来相似。 请避免歧义,因为它可以省时省力,并获得更好的结果。

  • 避免使用复杂实体。 复杂实体可能很难从文本中精确地提取出来,请考虑将复杂实体分解为多个实体。

    例如,如果不将“地址”分解为更小的实体,那么提取它将具有挑战性。 地址的显示方式有很多种变化,如果以整体形式提取地址而不进行分解,则需要大量带标记的实体来指导模型提取地址。 但是,如果将“地址”替换为“街道名称”、“邮政信箱”、“城市”、“省/市/自治区”和“邮政编码”,则对于每个实体,模型需要的标记更少。

数据选择

训练模型的数据质量会极大地影响模型性能。

  • 使用反映域问题空间的真实数据可以有效地训练模型。 可以使用合成数据来加速初始模型训练过程,但它可能与真实数据不同,并且会使模型在使用时效率降低。

  • 在不偏离真实数据分布的情况下,尽可能平衡数据分布。 例如,如果要训练模型以从法律文档中提取实体,而这些文档可能采用多种不同格式和语言,则应提供示例来说明你在实际生活中可能看到的多样性。

  • 尽可能使用多样化数据,以避免过度拟合模型。 训练数据的多样性较低可能会导致模型学习真实数据中可能不存在的虚假关联。

  • 避免数据中出现重复文档。 重复数据会对训练过程、模型指标和模型性能产生负面影响。

  • 考虑数据来源。 如果从一个人、一个部门或部分场景收集数据,则很可能缺少多样性,而这对模型学习而言非常重要。

注意

如果文档采用多种语言,请在项目创建过程中选择“启用多语言”选项,并将“语言”选项设置为大多数文档的语言。

数据准备

作为创建项目的先决条件,需要将训练数据上传到存储帐户中的 Blob 容器。 可使用 Azure 存储资源管理器工具或直接从 Azure 创建和上传训练文档。 使用 Azure 存储资源管理器工具可以快速上传更多数据。

仅可使用 .txt 文档。 如果数据采用其他格式,则可使用 CLUtils 分析命令更改文档格式。

可以上传带批注的数据集,也可以上传未批注的数据集,然后在 Language Studio 中标记数据

测试集

定义测试集时,请确保包含训练集中不存在的示例文档。 定义测试集是计算模型性能的重要步骤。 此外,请确保测试集包含代表项目中使用的所有实体的文档。

后续步骤

如果尚未创建,请创建一个自定义 NER 项目。 如果是第一次使用自定义 NER,请考虑按照快速入门创建一个示例项目。 你还可以查看操作指南一文,更加详细地了解创建项目的所需内容。