Skip to content

Разметка спанов

Выделяйте и размечайте фрагменты текста в Potato для NER, извлечения отношений и тональности. Настройка типов спанов, цветов, перекрытий и горячих клавиш.

Разметка спанов позволяет разметчикам выделять и помечать части текста. Чаще всего её используют для распознавания именованных сущностей (NER), частеречной разметки и задач на выделение текста.

Span annotation interface with entity highlightingSpan annotation with color-coded entity labels in Potato

Базовая конфигурация

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

Параметры конфигурации

Метки сущностей

Задайте типы спанов, которые смогут создавать разметчики:

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

Цвета

Настройте цвета для визуального различения:

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

Цвет можно задать в hex (#ff0000) или RGB (rgb(255, 0, 0)).

Горячие клавиши

Ускорьте разметку привязкой к клавишам:

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

Подсказки

Дайте пояснение к каждой метке:

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

Перекрывающиеся спаны

Разрешить перекрытия

Включите спаны, которые могут перекрываться:

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

Это полезно, когда один и тот же текст может нести несколько меток (например, «Dr. Smith» — это и PERSON, и ROLE).

Запретить перекрытия (по умолчанию)

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

Режимы выделения спанов

Выделение по словам

Выделяются только целые слова:

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

Выделение по символам

Разрешает выделять части слов:

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

Предразмеченные спаны

Загрузите существующую разметку для проверки или исправления:

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

Настройте загрузку предразметки:

yaml
- annotation_type: span
  name: entities

Типовые конфигурации NER

Стандартный NER (4 типа)

yaml
- annotation_type: span
  name: ner
  description: "Label named entities"
  labels:
    - PER    # Person
    - ORG    # Organization
    - LOC    # Location
    - MISC   # Miscellaneous
  sequential_key_binding:
    PER: "1"
    ORG: "2"
    LOC: "3"
    MISC: "4"

Расширенный NER (в стиле 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

yaml
- annotation_type: span
  name: bio_ner
  labels:
    - GENE
    - PROTEIN
    - DISEASE
    - DRUG
    - SPECIES

NER для соцсетей

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

Спаны с атрибутами

Добавьте спанам атрибуты для более богатой разметки:

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

Несколько схем спанов

Размечайте разные аспекты по отдельности:

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

Разметка спанов по нескольким полям

Появилось в v2.1.0

Разметка спанов может нацеливаться на конкретное текстовое поле в многополевых данных через параметр target_field. Это удобно, когда в данных несколько текстовых полей, а размечать спаны нужно в одном определённом.

Конфигурация

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

Формат многополевых данных

В данных должны быть отдельные текстовые поля:

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

Формат вывода

При использовании target_field разметка группируется по полям:

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

Полный рабочий пример — в project-hub/simple_examples/simple-multi-span/ в репозитории Potato.

Параметры отображения

Показывать метку в спане

Показывать текст метки внутри выделенного фрагмента:

yaml
- annotation_type: span
  name: entities

Подчёркивание

Использовать подчёркивание вместо заливки фона:

yaml
- annotation_type: span
  name: entities

Формат вывода

Разметка спанов сохраняется со смещениями в символах:

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

Полный пример: задача NER

yaml
annotation_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
    sequential_key_binding:
      PERSON: "1"
      ORGANIZATION: "2"
      LOCATION: "3"
      DATE: "4"
      MONEY: "5"
    allow_discontinuous: false
 
  - annotation_type: radio
    name: difficulty
    description: "How difficult was this document to annotate?"
    labels:
      - Easy
      - Medium
      - Hard

Разрывные спаны

Появилось в v2.2.0

Включите несмежные текстовые спаны параметром allow_discontinuous. Он позволяет разметчику выделить несколько несоседних фрагментов текста как одну разметку спана — это удобно для разрывных сущностей и разорванных выражений.

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

При включении разметчик может удерживать клавишу-модификатор и выделять дополнительные фрагменты, добавляя их к текущему спану. В выводе появляется несколько пар «начало — конец», по одной на фрагмент.

Интеграция со связыванием сущностей

Появилось в v2.2.0

Разметку спанов можно связывать с внешними базами знаний (Wikidata, UMLS или свои REST API), добавив в схему спана блок конфигурации entity_linking:

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

Когда связывание сущностей включено, на панели управления каждого спана появляется значок ссылки. По клику открывается окно поиска, где можно найти и привязать подходящую сущность из базы знаний. Подробности — в документации по связыванию сущностей.

Рекомендации

  1. Используйте различимые цвета — так проще ориентироваться визуально
  2. Пишите понятные подсказки с примерами для каждого типа сущности
  3. Включайте горячие клавиши — разметка идёт быстрее
  4. Выделяйте по словам, если не нужна точность до символа
  5. Подумайте о предразметке — исправлять быстрее, чем размечать с нуля
  6. Проверьте настройки перекрытий — они должны отвечать вашим инструкциям по разметке

Что почитать дальше

Детали реализации — в исходной документации.