Skip to content

命名实体识别

什么是命名实体识别(NER)、常见的标签集,以及如何在 Potato 中借助带颜色的跨度标签和提示文本构建 NER 标注任务。

命名实体识别(NER)是从文本中找出并分类有名称的事物的任务,包括人物、组织、地点、日期等。它是一种带有实体类型标签集的跨度标注任务。 NER 是搜索、知识图谱、脱敏和信息抽取的基础构件。

背景介绍参见命名实体识别

选择标签集

从一个标准方案出发,再裁剪到你的领域:

  • CoNLL-2003PERORGLOCMISC。一个不错的最小默认集。
  • OntoNotes:18 种类型,包含日期、货币和百分比,适合更丰富的需求。
  • 领域专用:生物医学(基因、疾病)、法律(法条、当事方)或金融。

类型越少、定义越清晰,一致性越高。只在真正有下游需求时才增加类型。

在 Potato 中构建任务

yaml
annotation_schemes:
  - annotation_type: span
    name: entities
    description: "Highlight each named entity and select its type."
    labels: [PERSON, ORGANIZATION, LOCATION, DATE, MISC]
    label_colors:
      PERSON: "#3b82f6"
      ORGANIZATION: "#10b981"
      LOCATION: "#f59e0b"
      DATE: "#8b5cf6"
      MISC: "#6b7280"
    tooltips:
      PERSON: "Names of people, e.g. 'Ada Lovelace'."
      ORGANIZATION: "Companies, agencies, teams, e.g. 'United Nations'."
      LOCATION: "Cities, countries, landmarks, e.g. 'Paris'."
      DATE: "Dates and time expressions, e.g. 'next Monday'."
      MISC: "Named entities that fit none of the above."
    allow_overlapping: false
    sequential_key_binding: true

命名实体识别展示案例会用示例数据运行这份配置。

避免分歧的边界规则

NER 的多数分歧都关乎实体从哪里开始、到哪里结束,而非它是什么。请先决定并写入文档:

  • 头衔算不算?("Dr. Jane Smith" 还是 "Dr. Jane Smith"。)
  • 你是否把 "the" 包含进 "the United Nations"?
  • 像 "Bank of England" 这样的嵌套实体怎么标?如果确实需要,请设置 allow_overlapping: true

从标签到模型

导出为 CoNLL 或 spaCy 格式,它们用 BIO/IOB 标签表示实体。参见导出标注用于机器学习

延伸阅读