了解自定义命名实体识别

已完成

自定义 NER 是一种 Azure API 服务,用于查看文档,标识和提取用户定义的实体。 这些实体可以是银行对账单中的名称和地址到用于改进搜索结果的知识挖掘功能的任何内容。

自定义 NER 是 Azure AI 服务中的 Azure AI 语言的一部分。

自定义与内置 NER

Azure AI 语言提供一些内置的实体识别功能,可识别人员、位置、组织或 URL 等内容。 借助内置 NER,可以最少的配置来设置服务,并可提取实体。 若要调用内置 NER,请创建服务并调用该 NER 服务的终结点,如下所示:

<YOUR-ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
占位符 示例
<YOUR-ENDPOINT> 用于 API 请求的终结点 https://<your-resource>.cognitiveservices.azure.com
<API-VERSION> 要调用的 API 版本 2023-05-01

该调用的主体将包含实体提取自的文档,标题包含服务密钥。

上述调用的响应包含已识别的实体的数组,例如:

<...>
"entities":[
    {
        "text":"Seattle",
        "category":"Location",
        "subcategory":"GPE",
        "offset":45,
        "length":7,
        "confidenceScore":0.99
    },
    {
        "text":"next week",
        "category":"DateTime",
        "subcategory":"DateRange",
        "offset":104,
        "length":9,
        "confidenceScore":0.8
    }
]
<...>

内置 NER 使用示例包括查找长文本文档中的位置、名称或 URL。

提示

NER 文档中列出了识别的实体类别的完整列表。

本模块接下来将重点探讨自定义 NER,它适用于要提取的实体不属于内置服务或只想提取特定实体的情况。 可以根据应用的需要,将 NER 模型自定义为简单或复杂的模型。

自定义 NER 的例子包括特定法律或银行数据、知识挖掘以增强目录搜索或查找审核策略的特定文本。 这些项目中的每一个都需要提取一组特定的实体和数据。

Azure AI 语言项目生命周期

Conceptual diagram showing a project steps to define entities, tag data, train model, view model, improve model, deploy model, and extract entities.

实体提取模型的创建通常遵循与大多数 Azure AI 语言服务功能类似的路径:

  1. 定义实体:了解要标识的数据和实体,并尽量使其明确。 例如,准确定义要提取的银行对账单的各个部分。
  2. 标记数据:标记现有数据,指定数据集中的文本对应于哪个实体。 此步骤对于准确、完整的执行非常重要,因为任何错误或缺失的标签都会降低训练模型的有效性。 针对可能的输入文档创建好的变体会很有帮助。 例如,标记银行名称、客户名称、客户地址、特定贷款或帐户条款、贷款或帐户金额以及帐户编号。
  3. 训练模型:标记实体后训练模型。 通过训练来指导模型如何识别标记的实体。
  4. 查看模型:模型训练完成后,查看模型的结果。 此页面包含介于 0 与 1 之间的分数,该分数基于所测试数据的精准率和召回率。 可以看到哪些实体效果良好(如客户名称)以及哪些实体需要改进(如帐号)。
  5. 改进模型:通过查看无法识别的实体以及未正确提取的实体来改进模型。 确认需要向模型训练添加哪些数据来提高性能。 此页面显示实体如何失败,以及需要将哪些实体(如帐号)与其他类似实体(如贷款金额)区分开来。
  6. 部署模型:模型可以按预期运行后,部署模型,使其可通过 API 提供。 在本示例中,可以在模型已部署以提取银行对账单实体时向模型发送请求。
  7. 提取实体:使用模型提取实体。 实验室演示如何使用 API,可以查看 API 参考了解详细信息。

有关数据选择和实体优化的注意事项

为了获得最佳性能,需要使用高质量的数据来训练模型以及使用明确定义的实体类型。

高质量的数据可减少模型优化时间并获得更好的结果。

  • 多样性 - 使用尽可能多样的数据集,同时确保实际数据中的预期真实分布。 你需要使用来自尽可能多的数量源的示例数据,且每个源有其自己的格式和实体数。 最好让数据集表示尽可能多的不同源。
  • 分布 - 采用相应的文档类型分布。 更加多样化的模型训练数据集有助于避免模型错误地学习数据中的关系。
  • 准确性 - 使用尽可能接近真实数据的数据。 假数据对于训练过程的初始阶段有帮助,但它与实际数据的差异有可能导致模型无法正确提取。

同时需要仔细斟酌实体,并尽可能明确地定义实体。 避免模棱两可的实体(例如银行对账单上相邻的两个名称),这会使模型难以区分。 如果需要一些模棱两可的实体,请确保为模型提供更多示例,以便其学习其中的差异。

保持实体的独特性也将大大有助于提高模型的性能。 例如,尝试提取“联系信息”之类的信息,比如电话号码、社交媒体句柄或电子邮件地址,这需要多个示例才能正确地指导模型。 这时可以尝试将它们分解为更具体的实体,例如“电话”、“电子邮件”和“社交媒体”,并让模型标记找到的任何类型的联系人信息。

如何提取实体

若要提交提取任务,API 需要 JSON 正文来指定要执行的任务。 对于自定义 NER,JSON 有效负载的任务为 CustomEntityRecognition

有效负载类似于以下 JSON:

{
    "displayName": "string",
    "analysisInput": {
        "documents": [
            {
                "id": "doc1", 
                "text": "string"
            },
            {
                "id": "doc2",
                "text": "string"
            }
        ]
    },
    "tasks": [
        {
            "kind": "CustomEntityRecognition",
            "taskName": "MyRecognitionTaskName",
            "parameters": {
            "projectName": "MyProject",
            "deploymentName": "MyDeployment"
            }
        }
    ]
}

项目限制

Azure AI 语言服务强制实施以下限制:

  • 训练 - 至少 10 个文件,不超过 100,000 个
  • 部署 - 每个项目 10 个部署名称
  • API
    • 创作 - 此 API 创建项目,训练和部署模型。 限制为每分钟 10 个 POST 和 100 个 GET
    • 分析 - 此 API 执行实际提取实体的工作;它请求任务并检索结果。 限制为 20 个 GET 或 POST
  • 项目 - 每个项目只有 1 个存储帐户,每个资源 500 个项目,每个项目 50 个经训练的模型
  • 实体 - 每个实体最多可以有 500 个字符。 你最多可以有 200 个实体类型。

有关详细信息,请参阅 Azure AI 语言的服务限制页。