Skip to content

Назначение задач

Распределение объектов в Potato стратегиями random, fixed-order, least-annotated, max-diversity и active learning, а также лимиты нагрузки на каждого разметчика.

В Potato есть гибкие стратегии назначения задач, которые определяют, как объекты для разметки распределяются между разметчиками.

Как объекты доходят до разметчиков. Стратегия решает, кто видит каждый объект и сколько разКак объекты доходят до разметчиков

Обзор

Назначение задач определяет:

  • Какие объекты видит каждый разметчик
  • Сколько объектов размечает каждый разметчик
  • Сколько разметок получает каждый объект
  • В каком порядке показываются объекты

Основные параметры конфигурации

ПараметрОписаниеПо умолчанию
assignment_strategyСтратегия назначения объектовfixed_order
max_annotations_per_userМаксимум объектов на разметчикабез ограничений
max_annotations_per_itemЦелевое число разметок на объект3

Стратегии назначения

Случайное назначение

Назначает объекты разметчикам случайно, чтобы распределение было непредвзятым.

yaml
assignment_strategy: random
max_annotations_per_item: 3

Подходит для обычных задач разметки, где порядок не важен.

Назначение в фиксированном порядке

Назначает объекты в том порядке, в каком они идут в датасете.

yaml
assignment_strategy: fixed_order
max_annotations_per_item: 2

Подходит для задач, где разметчики должны видеть объекты в определённой последовательности.

Назначение наименее размеченных

Отдаёт приоритет объектам, у которых меньше всего разметок, чтобы распределение было равномерным.

yaml
assignment_strategy: least_annotated
max_annotations_per_item: 5

Подходит для случаев, когда все объекты должны получить достаточное покрытие прежде, чем какой-либо объект получит лишние разметки.

Назначение по максимальному расхождению

Отдаёт приоритет объектам с наибольшим расхождением между уже имеющимися разметками.

yaml
assignment_strategy: max_diversity
max_annotations_per_item: 4

Подходит для контроля качества и разрешения неоднозначных объектов.

Назначение с активным обучением

С помощью машинного обучения выдаёт в первую очередь объекты, в которых модель не уверена.

yaml
assignment_strategy: active_learning
 
active_learning:
  enabled: true
  schema_names: ["sentiment"]
  min_annotations_per_instance: 2
  min_instances_for_training: 20
  update_frequency: 10

Полная конфигурация описана в разделе Активное обучение.

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

Современная конфигурация (рекомендуется)

yaml
# Strategy selection
assignment_strategy: random
 
# Limits
max_annotations_per_user: 10    # -1 for unlimited
num_annotators_per_item: 3
 
# Reproducible shuffling
random_seed: 1234

random_seed задаётся на верхнем уровне, а не внутри вложенного блока, и если он не задан, по умолчанию равен 1234. Фиксируйте его всякий раз, когда запуск должен быть воспроизводимым, поскольку из него берут случайность и стратегия random, и стратегии разнообразия.

Каноническое написание лимита на объект: num_annotators_per_item. max_annotations_per_item служит устаревшим псевдонимом той же настройки, и если задать обоим разные значения, конфигурация будет отклонена при загрузке, а не согласована молча.

Устаревшая конфигурация

Старая конфигурация automatic_assignment по-прежнему поддерживается:

yaml
automatic_assignment:
  on: true
  output_filename: task_assignment.json
  sampling_strategy: random    # 'random' or 'ordered'
  labels_per_instance: 3       # Annotations per item
  instance_per_annotator: 5    # Items per annotator
  test_question_per_annotator: 0

Тестовые вопросы

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

Определение тестовых вопросов

Добавьте _testing к идентификатору объекта в файле данных:

csv
text,id
"This is test question 1",0_testing
"Regular item",dkjfd

Или в JSON:

json
[
  {"id": "0_testing", "text": "This is a test question"},
  {"id": "regular_001", "text": "Normal annotation item"}
]

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

yaml
automatic_assignment:
  on: true
  test_question_per_annotator: 2  # Insert 2 test questions per annotator

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

Простое случайное назначение

yaml
annotation_task_name: "Sentiment Analysis"
assignment_strategy: random
max_annotations_per_user: 20
max_annotations_per_item: 3

Назначение с упором на качество

yaml
annotation_task_name: "Quality Annotation"
assignment_strategy: max_diversity
max_annotations_per_item: 5
max_annotations_per_user: 50

Настройка для краудсорсинга

yaml
annotation_task_name: "Crowdsourced Task"
assignment_strategy: random
max_annotations_per_user: 10
max_annotations_per_item: 3
 
# Crowdsourcing settings
hide_navbar: true
jumping_to_id_disabled: true
 
login:
  type: url_direct
  url_argument: workerId

Настройка с активным обучением

yaml
assignment_strategy: active_learning
 
active_learning:
  enabled: true
  schema_names: ["sentiment", "topic"]
  min_annotations_per_instance: 2
  min_instances_for_training: 20
  update_frequency: 10
  classifier_name: "sklearn.linear_model.LogisticRegression"
  vectorizer_name: "sklearn.feature_extraction.text.TfidfVectorizer"

Интеграция с админ-панелью

Следить за настройками назначения и менять их можно в админ-панели:

  1. Откройте /admin
  2. Перейдите на вкладку Configuration
  3. Измените:
    • Max Annotations per User
    • Max Annotations per Item
    • Assignment Strategy

Изменения вступают в силу сразу, без перезапуска сервера.

Дополнительные материалы

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