Skip to content

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

Как Potato распределяет объекты между разметчиками: все стратегии назначения, стратегия Batch для повторных раундов и возврат брошенных назначений с Prolific.

Назначение задач определяет, какие объекты видит каждый разметчик, сколько он их размечает, сколько разметок получает каждый объект и в каком порядке объекты появляются. На этой странице описаны стратегии назначения в Potato, стратегия Batch для исследований с повторными раундами и возврат назначений, брошенных краудворкерами.

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

Задайте assignment_strategy одним из значений:

СтратегияЧто делает
randomНазначает объекты случайно.
fixed_orderНазначает объекты в порядке датасета (по умолчанию).
least_annotatedОтдаёт приоритет объектам, у которых пока меньше всего разметок.
max_diversityОтдаёт приоритет объектам с наибольшим расхождением между уже имеющимися разметками.
diversity_clusteringСтроит эмбеддинги объектов, кластеризует их и выдаёт по кругу из разных кластеров.
batchОграничивает назначение явно заданными когортами разметчиков и объектов (см. ниже).
priorityСначала выдаёт объекты с наивысшим приоритетом; см. очередь сортировки.
active_learningИспользует модель, чтобы в первую очередь выдавать объекты, в которых она не уверена.
yaml
assignment_strategy: random
max_annotations_per_user: 10    # -1 for unlimited
max_annotations_per_item: 3     # -1 for unlimited

Назначение пакетами (Batch)

Стратегия batch назначает заранее заданные пакеты объектов конкретным разметчикам. Она сделана для исследований с повторными раундами, где те же разметчики, что видели пакет первого раунда, должны получить соответствующий пакет второго раунда.

yaml
assignment_strategy: batch
num_annotators_per_item: 4
 
batch_assignment:
  groups:
    - name: round1_batch_a
      annotators: ["u1", "u2", "u3", "u4"]
      instances: ["r2_item_001", "r2_item_002"]

Для длинных пакетов вынесите список объектов в отдельный файл данных (json, jsonl, csv, tsv или parquet); идентификаторы читаются по item_properties.id_key:

yaml
batch_assignment:
  groups:
    - name: round1_batch_a
      annotators: ["u1", "u2", "u3", "u4"]
      instances_file: batches/round1_batch_a.csv

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

yaml
assignment_strategy: batch
 
batch_assignment:
  annotator_key: round1_annotators

Пользователи вне заданных когорт при этой стратегии не получают ни одного объекта.

Возврат брошенных назначений

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

yaml
instance_reclaim:
  enabled: true
  timeout_hours: 24
  preserve_completed_annotations: true

Возврат запускается автоматически: для устаревших назначений во время работы назначения, для исполнителей Prolific, чьи отправки получают статус RETURNED, TIMED-OUT или REJECTED, и для пользователей, заблокированных из-за проваленной проверки внимательности (они освобождают свои неразмеченные объекты сразу).

Для каждой причины можно решить, сохранять ли уже сделанную разметку исполнителя, у которого забрали объекты. Так можно доверять частичной работе исполнителя Prolific, у которого истекло время, и при этом отбрасывать всё от исполнителя, заблокированного контролем качества:

yaml
instance_reclaim:
  enabled: true
  timeout_hours: 24
  preserve_completed_annotations: true   # default for reasons not overridden below
 
  prolific:
    status_policies:
      TIMED-OUT:
        preserve_completed_annotations: true
      RETURNED:
        preserve_completed_annotations: true
      REJECTED:
        preserve_completed_annotations: false
 
  quality_control:
    preserve_completed_annotations: false

Когда preserve_completed_annotations равен false, Potato стирает разметку этого пользователя для назначенных ему объектов, снимает с него учёт как с разметчика этих объектов и возвращает объекты в пул. Проваленный ответ на проверку внимательности, из-за которого случилась блокировка, не сохраняется никогда.

Связанные страницы

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