Skip to content
Diese Seite ist in Ihrer Sprache noch nicht verfügbar. Englische Version wird angezeigt.

Annotazione Span

Evidenzia ed etichetta span di testo per il riconoscimento di entità nominate e altro ancora.

Annotazione Span

L'annotazione span consente agli annotatori di selezionare ed etichettare porzioni di testo, comunemente usata per il riconoscimento di entità nominate (NER), l'etichettatura delle parti del discorso e i compiti di evidenziazione del testo.

Configurazione di base

yaml
annotation_schemes:
  - annotation_type: span
    name: entities
    description: "Highlight named entities in the text"
    labels:
      - PERSON
      - ORGANIZATION
      - LOCATION

Opzioni di configurazione

Etichette delle entità

Definisci i tipi di span che gli annotatori possono creare:

yaml
labels:
  - PERSON
  - ORGANIZATION
  - LOCATION
  - DATE
  - EVENT

Colori delle etichette

Personalizza i colori per la distinzione visiva:

yaml
label_colors:
  PERSON: "#3b82f6"
  ORGANIZATION: "#10b981"
  LOCATION: "#f59e0b"
  DATE: "#8b5cf6"
  EVENT: "#ec4899"

I colori possono essere in formato esadecimale (#ff0000) o RGB (rgb(255, 0, 0)).

Scorciatoie da tastiera

Accelera l'annotazione con i binding da tastiera:

yaml
keyboard_shortcuts:
  PERSON: "1"
  ORGANIZATION: "2"
  LOCATION: "3"
  DATE: "4"

Tooltip

Fornisci indicazioni per ogni etichetta:

yaml
tooltips:
  PERSON: "Names of people, characters, or personas"
  ORGANIZATION: "Companies, agencies, institutions"
  LOCATION: "Physical locations, addresses, geographic regions"

Span sovrapposti

Consenti la sovrapposizione

Abilita span che possono sovrapporsi:

yaml
- annotation_type: span
  name: entities
  labels:
    - PERSON
    - ROLE
  allow_overlapping: true

Questo è utile quando lo stesso testo può avere più etichette (ad es., "Dr. Smith" è sia una PERSON che ha un ROLE).

Disabilita la sovrapposizione (predefinito)

yaml
- annotation_type: span
  name: entities
  labels:
    - PERSON
    - ORGANIZATION
  allow_overlapping: false  # Default behavior

Modalità di selezione degli span

Selezione a livello di parola

Seleziona solo parole complete:

yaml
- annotation_type: span
  name: entities
  selection_mode: word
  labels:
    - ENTITY

Selezione a livello di carattere

Consenti la selezione di parole parziali:

yaml
- annotation_type: span
  name: entities
  selection_mode: character
  labels:
    - ENTITY

Span pre-annotati

Carica annotazioni esistenti per la revisione o la correzione:

json
{
  "id": "doc1",
  "text": "John Smith works at Microsoft in Seattle.",
  "spans": [
    {"start": 0, "end": 10, "label": "PERSON"},
    {"start": 20, "end": 29, "label": "ORGANIZATION"},
    {"start": 33, "end": 40, "label": "LOCATION"}
  ]
}

Configura il caricamento delle pre-annotazioni:

yaml
- annotation_type: span
  name: entities
  load_pre_annotations: true
  pre_annotation_field: spans

Configurazioni NER comuni

NER standard (4 tipi)

yaml
- annotation_type: span
  name: ner
  description: "Label named entities"
  labels:
    - PER    # Person
    - ORG    # Organization
    - LOC    # Location
    - MISC   # Miscellaneous
  label_colors:
    PER: "#3b82f6"
    ORG: "#10b981"
    LOC: "#f59e0b"
    MISC: "#6b7280"
  keyboard_shortcuts:
    PER: "1"
    ORG: "2"
    LOC: "3"
    MISC: "4"

NER esteso (stile OntoNotes)

yaml
- annotation_type: span
  name: ner_extended
  labels:
    - PERSON
    - NORP        # Nationalities, religious/political groups
    - FAC         # Facilities
    - ORG
    - GPE         # Geopolitical entities
    - LOC
    - PRODUCT
    - EVENT
    - WORK_OF_ART
    - LAW
    - LANGUAGE
    - DATE
    - TIME
    - PERCENT
    - MONEY
    - QUANTITY
    - ORDINAL
    - CARDINAL

NER biomedico

yaml
- annotation_type: span
  name: bio_ner
  labels:
    - GENE
    - PROTEIN
    - DISEASE
    - DRUG
    - SPECIES
  label_colors:
    GENE: "#22c55e"
    PROTEIN: "#3b82f6"
    DISEASE: "#ef4444"
    DRUG: "#f59e0b"
    SPECIES: "#8b5cf6"

NER per social media

yaml
- annotation_type: span
  name: social_ner
  labels:
    - PERSON
    - ORGANIZATION
    - LOCATION
    - PRODUCT
    - CREATIVE_WORK
    - GROUP

Span con attributi

Aggiungi attributi agli span per un'annotazione più ricca:

yaml
annotation_schemes:
  - annotation_type: span
    name: entities
    labels:
      - PERSON
      - ORGANIZATION
 
  - annotation_type: radio
    name: entity_type
    description: "What type of entity is this?"
    show_for_span: entities
    labels:
      - Named
      - Nominal
      - Pronominal

Schemi span multipli

Annota aspetti diversi separatamente:

yaml
annotation_schemes:
  # Named entities
  - annotation_type: span
    name: entities
    description: "Label named entities"
    labels:
      - PERSON
      - ORGANIZATION
      - LOCATION
 
  # Sentiment expressions
  - annotation_type: span
    name: sentiment_spans
    description: "Highlight sentiment expressions"
    labels:
      - POSITIVE
      - NEGATIVE
    label_colors:
      POSITIVE: "#22c55e"
      NEGATIVE: "#ef4444"

Annotazione span su più campi

Novità nella v2.1.0

L'annotazione span può essere indirizzata a campi di testo specifici nei dati multi-campo usando l'opzione target_field. Questo è utile quando i dati contengono più campi di testo e si desidera annotare span in uno di essi in particolare.

Configurazione

yaml
annotation_schemes:
  - annotation_type: span
    name: source_entities
    description: "Label entities in the source text"
    target_field: "source_text"
    labels:
      - PERSON
      - ORGANIZATION
 
  - annotation_type: span
    name: summary_entities
    description: "Label entities in the summary"
    target_field: "summary"
    labels:
      - PERSON
      - ORGANIZATION

Formato dei dati multi-campo

I dati devono includere i campi di testo separati:

json
{
  "id": "doc1",
  "source_text": "John Smith works at Microsoft in Seattle.",
  "summary": "Smith is employed by Microsoft."
}

Formato di output

Quando si usa target_field, le annotazioni sono indicizzate per campo:

json
{
  "id": "doc1",
  "source_entities": {
    "source_text": [
      {"start": 0, "end": 10, "text": "John Smith", "label": "PERSON"},
      {"start": 20, "end": 29, "text": "Microsoft", "label": "ORGANIZATION"}
    ]
  },
  "summary_entities": {
    "summary": [
      {"start": 0, "end": 5, "text": "Smith", "label": "PERSON"},
      {"start": 22, "end": 31, "text": "Microsoft", "label": "ORGANIZATION"}
    ]
  }
}

Per un esempio funzionante completo, consulta project-hub/simple_examples/simple-multi-span/ nel repository Potato.

Opzioni di visualizzazione

Mostra etichetta nello span

Visualizza il testo dell'etichetta all'interno degli span evidenziati:

yaml
- annotation_type: span
  name: entities
  show_label_in_span: true

Stile a sottolineatura

Usa la sottolineatura invece dell'evidenziazione di sfondo:

yaml
- annotation_type: span
  name: entities
  display_style: underline

Formato di output

Le annotazioni span vengono salvate con offset di carattere:

json
{
  "id": "doc1",
  "entities": [
    {
      "start": 0,
      "end": 10,
      "text": "John Smith",
      "label": "PERSON"
    },
    {
      "start": 20,
      "end": 29,
      "text": "Microsoft",
      "label": "ORGANIZATION"
    }
  ]
}

Esempio completo: compito NER

yaml
task_name: "Named Entity Recognition"
 
data_files:
  - path: data/documents.json
    text_field: text
 
annotation_schemes:
  - annotation_type: span
    name: entities
    description: "Highlight and label all named entities"
    labels:
      - PERSON
      - ORGANIZATION
      - LOCATION
      - DATE
      - MONEY
    label_colors:
      PERSON: "#3b82f6"
      ORGANIZATION: "#10b981"
      LOCATION: "#f59e0b"
      DATE: "#8b5cf6"
      MONEY: "#ec4899"
    keyboard_shortcuts:
      PERSON: "1"
      ORGANIZATION: "2"
      LOCATION: "3"
      DATE: "4"
      MONEY: "5"
    tooltips:
      PERSON: "Names of people"
      ORGANIZATION: "Companies, agencies, institutions"
      LOCATION: "Cities, countries, addresses"
      DATE: "Dates and time expressions"
      MONEY: "Monetary values"
    allow_overlapping: false
    selection_mode: word
 
  - annotation_type: radio
    name: difficulty
    description: "How difficult was this document to annotate?"
    labels:
      - Easy
      - Medium
      - Hard

Span discontinui

Novità nella v2.2.0

Abilita span di testo non contigui con il parametro allow_discontinuous. Questo consente agli annotatori di selezionare più segmenti di testo non adiacenti come una singola annotazione span, utile per entità discontinue o espressioni suddivise.

yaml
- annotation_type: span
  name: entities
  labels:
    - PERSON
    - ORGANIZATION
  allow_discontinuous: true

Quando abilitato, gli annotatori possono tenere premuto un tasto modificatore mentre selezionano segmenti di testo aggiuntivi per aggiungerli allo span corrente. L'output include più coppie start/end per ogni segmento.

Integrazione con Entity Linking

Novità nella v2.2.0

Le annotazioni span possono essere collegate a basi di conoscenza esterne (Wikidata, UMLS o API REST personalizzate) aggiungendo un blocco di configurazione entity_linking allo schema span:

yaml
- annotation_type: span
  name: entities
  labels:
    - PERSON
    - ORGANIZATION
    - LOCATION
  entity_linking:
    enabled: true
    knowledge_bases:
      - name: wikidata
        type: wikidata
        language: en

Quando l'entity linking è abilitato, un'icona di collegamento appare nella barra di controllo di ogni span. Facendo clic su di essa si apre una finestra modale di ricerca per trovare e collegare le entità KB corrispondenti. Consulta la documentazione di Entity Linking per i dettagli completi.

Buone pratiche

  1. Usa colori distinti per una facile differenziazione visiva
  2. Fornisci tooltip chiari con esempi per ogni tipo di entità
  3. Abilita le scorciatoie da tastiera per un'annotazione più rapida
  4. Usa la selezione a livello di parola a meno che non sia necessaria la precisione a livello di carattere
  5. Considera la pre-annotazione per flussi di lavoro di correzione più rapidi
  6. Testa le impostazioni di sovrapposizione in base alle tue linee guida di annotazione

Ulteriori letture

Per i dettagli di implementazione, consulta la documentazione sorgente.