Разметка спанов
Выделяйте и размечайте фрагменты текста в Potato для NER, извлечения отношений и тональности. Настройка типов спанов, цветов, перекрытий и горячих клавиш.
Разметка спанов позволяет разметчикам выделять и помечать части текста. Чаще всего её используют для распознавания именованных сущностей (NER), частеречной разметки и задач на выделение текста.
Span annotation with color-coded entity labels in Potato
Базовая конфигурация
annotation_schemes:
- annotation_type: span
name: entities
description: "Highlight named entities in the text"
labels:
- PERSON
- ORGANIZATION
- LOCATIONПараметры конфигурации
Метки сущностей
Задайте типы спанов, которые смогут создавать разметчики:
labels:
- PERSON
- ORGANIZATION
- LOCATION
- DATE
- EVENTЦвета
Настройте цвета для визуального различения:
colors:
PERSON: "#3b82f6"
ORGANIZATION: "#10b981"
LOCATION: "#f59e0b"
DATE: "#8b5cf6"
EVENT: "#ec4899"Цвет можно задать в hex (#ff0000) или RGB (rgb(255, 0, 0)).
Горячие клавиши
Ускорьте разметку привязкой к клавишам:
keyboard_shortcuts:
PERSON: "1"
ORGANIZATION: "2"
LOCATION: "3"
DATE: "4"Подсказки
Дайте пояснение к каждой метке:
tooltips:
PERSON: "Names of people, characters, or personas"
ORGANIZATION: "Companies, agencies, institutions"
LOCATION: "Physical locations, addresses, geographic regions"Перекрывающиеся спаны
Разрешить перекрытия
Включите спаны, которые могут перекрываться:
- annotation_type: span
name: entities
labels:
- PERSON
- ROLE
allow_discontinuous: trueЭто полезно, когда один и тот же текст может нести несколько меток (например, «Dr. Smith» — это и PERSON, и ROLE).
Запретить перекрытия (по умолчанию)
- annotation_type: span
name: entities
labels:
- PERSON
- ORGANIZATION
allow_discontinuous: false # Default behaviorРежимы выделения спанов
Выделение по словам
Выделяются только целые слова:
- annotation_type: span
name: entities
labels:
- ENTITYВыделение по символам
Разрешает выделять части слов:
- annotation_type: span
name: entities
labels:
- ENTITYПредразмеченные спаны
Загрузите существующую разметку для проверки или исправления:
{
"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"}
]
}Настройте загрузку предразметки:
- annotation_type: span
name: entitiesТиповые конфигурации NER
Стандартный NER (4 типа)
- 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)
- 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
- annotation_type: span
name: bio_ner
labels:
- GENE
- PROTEIN
- DISEASE
- DRUG
- SPECIESNER для соцсетей
- annotation_type: span
name: social_ner
labels:
- PERSON
- ORGANIZATION
- LOCATION
- PRODUCT
- CREATIVE_WORK
- GROUPСпаны с атрибутами
Добавьте спанам атрибуты для более богатой разметки:
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Несколько схем спанов
Размечайте разные аспекты по отдельности:
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. Это удобно, когда в данных несколько текстовых полей, а размечать спаны нужно в одном определённом.
Конфигурация
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Формат многополевых данных
В данных должны быть отдельные текстовые поля:
{
"id": "doc1",
"source_text": "John Smith works at Microsoft in Seattle.",
"summary": "Smith is employed by Microsoft."
}Формат вывода
При использовании target_field разметка группируется по полям:
{
"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.
Параметры отображения
Показывать метку в спане
Показывать текст метки внутри выделенного фрагмента:
- annotation_type: span
name: entitiesПодчёркивание
Использовать подчёркивание вместо заливки фона:
- annotation_type: span
name: entitiesФормат вывода
Разметка спанов сохраняется со смещениями в символах:
{
"id": "doc1",
"entities": [
{
"start": 0,
"end": 10,
"text": "John Smith",
"label": "PERSON"
},
{
"start": 20,
"end": 29,
"text": "Microsoft",
"label": "ORGANIZATION"
}
]
}Полный пример: задача NER
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. Он позволяет разметчику выделить несколько несоседних фрагментов текста как одну разметку спана — это удобно для разрывных сущностей и разорванных выражений.
- annotation_type: span
name: entities
labels:
- PERSON
- ORGANIZATION
allow_discontinuous: trueПри включении разметчик может удерживать клавишу-модификатор и выделять дополнительные фрагменты, добавляя их к текущему спану. В выводе появляется несколько пар «начало — конец», по одной на фрагмент.
Интеграция со связыванием сущностей
Появилось в v2.2.0
Разметку спанов можно связывать с внешними базами знаний (Wikidata, UMLS или свои REST API), добавив в схему спана блок конфигурации entity_linking:
- annotation_type: span
name: entities
labels:
- PERSON
- ORGANIZATION
- LOCATION
entity_linking:
enabled: true
knowledge_bases:
- name: wikidata
type: wikidata
language: enКогда связывание сущностей включено, на панели управления каждого спана появляется значок ссылки. По клику открывается окно поиска, где можно найти и привязать подходящую сущность из базы знаний. Подробности — в документации по связыванию сущностей.
Рекомендации
- Используйте различимые цвета — так проще ориентироваться визуально
- Пишите понятные подсказки с примерами для каждого типа сущности
- Включайте горячие клавиши — разметка идёт быстрее
- Выделяйте по словам, если не нужна точность до символа
- Подумайте о предразметке — исправлять быстрее, чем размечать с нуля
- Проверьте настройки перекрытий — они должны отвечать вашим инструкциям по разметке
Что почитать дальше
- Связывание сущностей — привязка спанов к базам знаний
- Цепочки кореференции — объединение кореферентных упоминаний
- Разметка событий — n-арные структуры событий с аргументами-спанами
- Связывание спанов — отношения между спанами
- Отображение объектов — вывод многополевого содержимого с целями для спанов
- Настройка интерфейса — цвета спанов
- Возможности для продуктивности — горячие клавиши
Детали реализации — в исходной документации.