К задачам

Голосование большинством для разметки задач

ЛегкаяАлгоритмы
Лучше работает на десктопе
Хеш-таблицаСчетчикАгрегация

Дан список словарей с разметкой задач людьми. В каждом элементе есть:

  • task_id: id задачи;
  • worker_id: id разметчика, в этой задаче он не нужен;
  • label: выставленный label, например relevant, not_relevant, irrelevant.

Нужно вернуть словарь task_id -> majority_label, где majority_label - самый частый label для этой задачи.

Если у задачи несколько labels набрали одинаковое максимальное число голосов, верните тот label, который встретился первым среди записей этой задачи. Это детерминированная версия интервьюерского "можно выбрать любой".

Сигнатура

def majority_gold(rows: list[dict[str, str]]) -> dict[str, str]:

Примеры

Пример 1

Вход:
rows = [{"task_id":"t1","worker_id":"w1","label":"relevant"},{"task_id":"t1","worker_id":"w2","label":"not_relevant"},{"task_id":"t1","worker_id":"w3","label":"relevant"},{"task_id":"t2","worker_id":"w1","label":"irrelevant"},{"task_id":"t2","worker_id":"w2","label":"irrelevant"}]
Выход:{"t1":"relevant","t2":"irrelevant"}

Обычный majority vote по двум задачам

Пример 2

Вход:
rows = [{"task_id":"tie","worker_id":"w1","label":"cat"},{"task_id":"tie","worker_id":"w2","label":"dog"}]
Выход:{"tie":"cat"}

Tie-break: первый label среди записей задачи

Пример 3

Вход:
rows = [{"task_id":"a","worker_id":"w1","label":"yes"},{"task_id":"b","worker_id":"w2","label":"no"},{"task_id":"a","worker_id":"w3","label":"yes"},{"task_id":"b","worker_id":"w4","label":"yes"},{"task_id":"b","worker_id":"w5","label":"yes"}]
Выход:{"a":"yes","b":"yes"}

Несмежные записи одной задачи

Код
Python · Ctrl/⌘ + Enter для запуска
Лимит
05:00
Консоль
Нажмите кнопку запуска или Ctrl+Enter
Majority vote для разметки задач — Алгоритмы задача — ML Mentor