命名实体识别
什么是命名实体识别(NER)、常见的标签集,以及如何在 Potato 中借助带颜色的跨度标签和提示文本构建 NER 标注任务。
命名实体识别(NER)是从文本中找出并分类有名称的事物的任务,包括人物、组织、地点、日期等。它是一种带有实体类型标签集的跨度标注任务。 NER 是搜索、知识图谱、脱敏和信息抽取的基础构件。
背景介绍参见命名实体识别。
选择标签集
从一个标准方案出发,再裁剪到你的领域:
- CoNLL-2003:
PER、ORG、LOC、MISC。一个不错的最小默认集。 - 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 标签表示实体。参见导出标注用于机器学习。