Skip to content
Tutorials4 min read

Costruire il tuo primo task di annotazione NER

Guida passo passo per costruire in Potato un task di riconoscimento di entità nominate: configurazione degli span, colori delle etichette, span sovrapposti, scorciatoie da tastiera ed esportazione CoNLL.

Potato Team

Il riconoscimento di entità nominate è un task che prima o poi capita a quasi tutti i gruppi di NLP. Questo tutorial costruisce da zero un'interfaccia di annotazione NER funzionante, con evidenziazione degli span, scorciatoie da tastiera e scelta del tipo di entità. Per le opzioni di configurazione degli span che ci stanno dietro, vedi la documentazione sull'annotazione di testo.

Che cosa costruiamo

Alla fine di questo tutorial avrai un'interfaccia in cui gli annotatori possono:

  • Evidenziare span di testo cliccando e trascinando
  • Assegnare un tipo di entità (persona, organizzazione, luogo e così via)
  • Usare le scorciatoie da tastiera per annotare più in fretta
  • Modificare o eliminare le annotazioni già fatte

Prerequisiti

  • Potato installato (pip install potato-annotation)
  • Una conoscenza di base di YAML
  • Dei testi di esempio da annotare

Passo 1: configurare lo schema di annotazione

Crea un file config.yaml:

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"

Passo 2: preparare i dati

Crea data/sentences.json con i tuoi testi:

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."}

Passo 3: aggiungere le linee guida di annotazione

Dai agli annotatori delle linee guida chiare:

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

L'interfaccia di annotazione a span permette di evidenziare il testo e assegnare le etichette di entità:

Interfaccia di annotazione a span per entità nominate, con tipi di entità coloratiGli annotatori evidenziano span di testo e assegnano etichette di entità come PER, ORG, LOC e DATE

Passo 4: iniziare ad annotare

Avvia il tuo task NER:

bash
potato start config.yaml

Il flusso di annotazione

  1. Seleziona il testo: clicca e trascina per evidenziare uno span
  2. Scegli il tipo di entità: clicca il pulsante dell'etichetta oppure usa la scorciatoia da tastiera
  3. Modifica le annotazioni: clicca su uno span esistente per cambiarlo o eliminarlo
  4. Invia: premi Invio o clicca su Submit quando hai finito

Passo 5: controllare l'output

Le annotazioni vengono salvate in formato JSONL:

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"}
    ]
  }
}

Consigli per annotare meglio il NER

Quasi tutto il disaccordo nel NER nasce da linee guida vaghe: più le regole sono chiare, meno gli annotatori discuteranno sullo stesso span. Affronta i casi limite scomodi prima che comincino, non dopo, e continuate a discutere in gruppo gli esempi difficili. Quando l'accordo tra annotatori cala, di solito è il primo segnale che una linea guida va stretta.

Prossimi passi


Ti serve aiuto? Nella documentazione sull'annotazione a span trovi altri dettagli.