Deine erste NER-Annotationsaufgabe bauen
Schritt für Schritt zu einer Named-Entity-Recognition-Aufgabe in Potato: Span-Konfiguration, Labelfarben, überlappende Spans, Tastenkürzel und CoNLL-Export.
Named Entity Recognition ist eine Aufgabe, auf die die meisten NLP-Teams früher oder später stoßen. Dieses Tutorial baut eine funktionierende NER-Oberfläche von Grund auf, mit Hervorhebung von Spans, Tastenkürzeln und Auswahl des Entitätstyps. Die Span-Optionen dahinter stehen in der Dokumentation zur Textannotation.
Was wir bauen
Am Ende dieses Tutorials hast du eine Oberfläche, in der Annotierende:
- Textspans per Klicken und Ziehen hervorheben
- Entitätstypen zuweisen (Person, Organisation, Ort und so weiter)
- über Tastenkürzel schneller arbeiten
- bestehende Annotationen bearbeiten oder löschen
Voraussetzungen
- Potato installiert (
pip install potato-annotation) - Grundkenntnisse in YAML
- Beispieltexte zum Annotieren
Schritt 1: Das Annotationsschema konfigurieren
Lege eine config.yaml an:
annotation_task_name: "Named Entity Recognition"
data_files:
- data/sentences.json
item_properties:
id_key: id
text_key: text
# Enable span annotation
annotation_schemes:
- annotation_type: span
name: entities
description: "Highlight and label named entities in the text"
labels:
- name: PER
description: "Person names"
color: "#FF6B6B"
keyboard_shortcut: "p"
- name: ORG
description: "Organizations"
color: "#4ECDC4"
keyboard_shortcut: "o"
- name: LOC
description: "Locations"
color: "#45B7D1"
keyboard_shortcut: "l"
- name: DATE
description: "Dates and times"
color: "#96CEB4"
keyboard_shortcut: "d"
- name: MISC
description: "Miscellaneous entities"
color: "#FFEAA7"
keyboard_shortcut: "m"Schritt 2: Die Daten vorbereiten
Lege data/sentences.json mit deinen Texten an:
{"id": "1", "text": "Apple Inc. announced that CEO Tim Cook will visit Paris next Tuesday."}
{"id": "2", "text": "The United Nations headquarters in New York hosted delegates from Japan."}
{"id": "3", "text": "Dr. Sarah Johnson published her research at Stanford University in March 2024."}Schritt 3: Annotationsrichtlinien ergänzen
Hilf den Annotierenden mit klaren Richtlinien:
# Add to config.yaml
annotation_guidelines:
title: "NER Annotation Guidelines"
content: |
## Entity Types
**PER (Person)**: Names of people, including fictional characters
- Examples: "John Smith", "Dr. Johnson", "Batman"
**ORG (Organization)**: Companies, institutions, agencies
- Examples: "Apple Inc.", "United Nations", "Stanford University"
**LOC (Location)**: Places, including countries, cities, landmarks
- Examples: "Paris", "New York", "Mount Everest"
**DATE**: Dates, times, and temporal expressions
- Examples: "Tuesday", "March 2024", "next week"
**MISC**: Other named entities not fitting above categories
- Examples: "Nobel Prize", "iPhone", "COVID-19"
## Annotation Rules
1. Include titles (Dr., Mr.) with person names
2. For nested entities, annotate the largest meaningful span
3. Don't include articles (the, a) in entity spansIn der Span-Oberfläche heben Annotierende Text hervor und weisen Entitätslabels zu:
Annotierende heben Textspans hervor und weisen Entitätslabels wie PER, ORG, LOC und DATE zu
Schritt 4: Mit dem Annotieren anfangen
Starte deine NER-Aufgabe:
potato start config.yamlAblauf beim Annotieren
- Text auswählen: Mit gedrückter Maustaste einen Span markieren
- Entitätstyp wählen: Auf eine Labelschaltfläche klicken oder das Tastenkürzel drücken
- Annotationen bearbeiten: Auf einen vorhandenen Span klicken, um ihn zu ändern oder zu löschen
- Abschicken: Enter drücken oder auf Submit klicken
Schritt 5: Die Ausgabe ansehen
Annotationen werden im JSONL-Format gespeichert:
{
"id": "1",
"text": "Apple Inc. announced that CEO Tim Cook will visit Paris next Tuesday.",
"annotations": {
"entities": [
{"start": 0, "end": 10, "label": "ORG", "text": "Apple Inc."},
{"start": 30, "end": 38, "label": "PER", "text": "Tim Cook"},
{"start": 50, "end": 55, "label": "LOC", "text": "Paris"},
{"start": 61, "end": 73, "label": "DATE", "text": "next Tuesday"}
]
}
}Hinweise für bessere NER-Annotation
Die meiste Uneinigkeit bei NER kommt von unscharfen Richtlinien: Je klarer deine Regeln, desto seltener streiten die Annotierenden über denselben Span. Geh die kniffligen Randfälle mit allen durch, bevor sie anfangen, und besprecht schwierige Beispiele weiterhin im Team. Wenn die Übereinstimmung sinkt, ist das meist das erste Anzeichen, dass eine Richtlinie schärfer gefasst werden muss.
Nächste Schritte
- Ergänze eine Trainingsphase, um Annotierende einzuarbeiten
- Setze mehrere Annotierende für Redundanz ein
- Exportiere ins Hugging-Face-Format fürs Modelltraining
Fragen offen? In der Dokumentation zur Span-Annotation stehen weitere Details.