Skip to content
Tutorials4 min read

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.

Potato Team

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:

yaml
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:

json
{"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:

yaml
# 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 spans

In der Span-Oberfläche heben Annotierende Text hervor und weisen Entitätslabels zu:

Oberfläche zur Span-Annotation benannter Entitäten mit farbig unterschiedenen EntitätstypenAnnotierende heben Textspans hervor und weisen Entitätslabels wie PER, ORG, LOC und DATE zu

Schritt 4: Mit dem Annotieren anfangen

Starte deine NER-Aufgabe:

bash
potato start config.yaml

Ablauf beim Annotieren

  1. Text auswählen: Mit gedrückter Maustaste einen Span markieren
  2. Entitätstyp wählen: Auf eine Labelschaltfläche klicken oder das Tastenkürzel drücken
  3. Annotationen bearbeiten: Auf einen vorhandenen Span klicken, um ihn zu ändern oder zu löschen
  4. Abschicken: Enter drücken oder auf Submit klicken

Schritt 5: Die Ausgabe ansehen

Annotationen werden im JSONL-Format gespeichert:

json
{
  "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


Fragen offen? In der Dokumentation zur Span-Annotation stehen weitere Details.