Создание TSV-файла с заданиями

Задания загружаются в пул в TSV-файле.

Скачайте образец файла для вашего проекта по ссылке Пример загрузочного файла (tsv) на странице пула. Для этого нажмите кнопку Загрузить. В открывшемся окне скачайте пример TSV-файла по ссылке Пример загрузочного файла.

Если в пул необходимо загрузить задания разных типов, загрузите несколько TSV-файлов, каждый из которых будет содержать задания одного типа.

Структура TSV-файла

Первая строка файла содержит заголовки столбцов:

Тип задания зависит от того, какие поля заполнены:

Чтобы создать основное задание, заполните столбцы с заголовком INPUT.

Пример с простым объектом (строка, ссылка и т.д)
Пример с массивом строк

Столбцы с обязательными полями входных данных должны быть заполнены. Остальные столбцы можно удалить, если они пустые.

Работа с TSV-файлом

Популярные редакторы электронных таблиц позволяют импортировать и экспортировать данные в формате TSV:

Вы можете работать с данными в электронной таблице, а затем сохранить в требуемом формате:
  1. Создайте электронную таблицу с нужными заголовками или скопируйте их из Примера загрузочного файла.
  2. Добавьте данные для заданий.
  3. Скопируйте всю таблицу и вставьте в простой текстовый редактор (например, Блокнот на Windows или TextEdit на Mac OS).
  4. Сохраните файл в кодировке UTF-8 с расширением tsv.

Максимальный размер файла — 100 Мб.

Экранирование строк

Чтобы в поле с типом строка включать несколько абзацев или строки с табуляцией:
  • Каждую кавычку типа " внутри текстовых данных дополните еще одной кавычкой.

    Другие кавычки (« » и “ ”) не экранируйте.

  • Заключите поле в кавычки " ".

Неэкранированные кавычки будут удалены при обработке TSV-файла.

Примеры экранирования
Входные данные Результат
"Задание в ""Яндекс.Толоке"""

Задание в "Яндекс.Толоке"

"Задание в «Яндекс.Толоке»"

Задание в «Яндекс.Толоке»

Экранирование данных в формате json

Чтобы загрузить данные в поле с типом json:

  1. Каждую кавычку типа " внутри объекта дополните еще одной кавычкой.

  2. Заключите поле в кавычки " ".

Примеры экранирования
Входные данные Результат
"[{""type"":""polygon"",""data"":[{""x"":0.24173,""y"":0.25118},{""x"":0.31327,""y"":0.24896},{""x"":0.31327,""y"":0.32453},{""x"":0.27576,""y"":0.34898},{""x"":0.23061,""y"":0.32564}]}]"
[{"type":"polygon","data":[{"x":0.24173,"y":0.25118},{"x":0.31327,"y":0.24896},{"x":0.31327,"y":0.32453},{"x":0.27576,"y":0.34898},{"x":0.23061,"y":0.32564}]}]

Экранирование данных массива json

Чтобы загрузить данные в поле с типом json:

  1. Каждую кавычку типа " внутри объекта дополните еще одной кавычкой.

  2. Внутри объекта добавьте \ перед запятой.

  3. Заключите поле в кавычки " ".

Примеры экранирования
Входные данные Результат
"{""url"":""https://fotki-kotikov.ru/1""\,""img"":""https://fotki-kotikov.ru/cat1.jpg""\,""description"":""Просто толстые котики\, ведь нет ничего и никого прекраснее.""\,""title"":""Толстые котики""},{""url"":""https://fotki-kotikov.ru/2""\,""img"":""https://fotki-kotikov.ru/cat2.jpg""\,""description"":""Просто рыжие котики\, ведь все знают\, что рыжие котики к деньгам.""\,""title"":""Рыжие котики""},{""url"":""https://fotki-kotikov.ru/3""\,""img"":""https://fotki-kotikov.ru/cat3.jpg""\,""description"":""Да\, это просто будут спящие котики""\,""title"":""Спящие котики""}"
{"url":"https://fotki-kotikov.ru/1","img":"https://fotki-kotikov.ru/cat1.jpg","description":"Просто толстые котики, ведь нет ничего и никого прекраснее.","title":"Толстые котики"},{"url":"https://fotki-kotikov.ru/2","img":"https://fotki-kotikov.ru/cat2.jpg","description":"Просто рыжие котики, ведь все знают, что рыжие котики к деньгам.","title":"Рыжие котики"},{"url":"https://fotki-kotikov.ru/3","img":"https://fotki-kotikov.ru/cat3.jpg","description":"Да, это просто будут спящие котики","title":"Спящие котики"}

Решение проблем

Загрузка заданий в пул
Сколько заданий должно быть на странице?

Количество заданий зависит от сложности и длительности выполнения. Не делайте страницы заданий слишком большими: они неудобны для исполнителей (например, при сбоях в соединении с интернетом) и не пользуются спросом.

Ошибки при загрузке заданий в пул
Как посмотреть лог обработки
Чтобы посмотреть лог обработки, нажмите Подробнее об ошибках загрузки. Лог обработки записан в формате JSON. Объекты внутри result соответствуют номеру строки загружаемого файла. Строки, обработанные с ошибкой, имеют статус "success": false.
Совет. Работать с большим логом удобнее, если скопировать его в текстовый редактор.
Ошибки в заголовках столбцов

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

Таблица ошибок обработки
Описание Как исправить
"parsing_error_of": "https://tlk.s3.yandex.net/wsdm2020/photos/2d5f63a3184919ce7e3e7068cf93da4b.jpg\t\t",
"exception_msg": "the nameMapping array and the sourceList should be the same size (nameMapping length = 1, sourceList size = 3)"

Лишние знаки табуляции.

Если в загружаемом TSV-файле после данных или ссылки стоит количество разделителей столбцов \t больше, чем задано число столбцов во входных данных, то появится сообщение об ошибке.

Например, когда во входных определен 1 столбец, а в TSV-файле после ссылки прописано ещё два знака табуляции \t\t, то получится 3 столбца, 2 из которых лишние.

Удалите лишние разделители столбцов, в приведенном выше примере ошибки — оба знака (\t\t).

"exception_msg": "the nameMapping array and the sourceList should be the same size (nameMapping length = 4, sourceList size = 6)"

Не совпадает количество полей в заголовке и в строке.

Проверьте, что:

  • указано верное количество знаков табуляции в структуре файла;
  • строковые значения, содержащие знак табуляции, заключены в кавычки" ".
"code": "VALUE_REQUIRED", "message": "Value must be present and not equal to null"
Не указано значение обязательного поля входных данных.

Проверьте, что заполнены все столбцы с обязательными полями входных данных.

"code": "INVALID_URL_SYNTAX", "message": "Value must be in valid url format"
Данные в поле с типом «ссылка» («url») некорректны.
Проверьте, что:
"exception_msg": "unexpected end of file while reading quoted column beginning on line 2 and ending on line 4"

В строке стоит непарная кавычка.

Проверьте, что все кавычки экранированы.

Как понять сколько заданий будет на странице у исполнителя?

Вы можете указать сколько заданий будет на странице при загрузке заданий в пул. Подробнее о способах распределения заданий по страницам можно узнать здесь.

Как загрузить файл с принятыми решениями обратно в Толоку для случая, когда выставлена отложенная приемка? Где описан формат загружаемых данных?

Для загрузки файла используйте кнопку Загрузить результаты. Формат можно посмотреть здесь.

Проверка ответов выполняется в TSV-файле.

Почему после запуска первого проекта не приходят ответы и все загруженные задания отмечаются как "Обучающие"?

Проверьте поле hint. Для обычных заданий это поле должно быть пустым.

Как правильно сформировать файл задания, чтобы не было ошибок?

В файле с основными заданиями должны быть заполнены столбцы с заголовками INPUT. Вы можете увидеть эти заголовки, если скачаете образец файла из пула.

Если создаете контрольные задания, то заполните столбцы с правильными ответами — GOLDEN.

Если обучающие, то также понадобится заполнить столбец HINT:text. Для основных заданий все столбцы кроме INPUT не нужны, их можно удалить.

Формат файла должен быть TSV, кодировка — UTF-8.

Если вы разместили файлы на Яндекс.Диске, посмотрите видео, как указать ссылки на них в TSV-файле.

Подробнее о создании файла в Руководстве. Если при загрузке возникают ошибки, поищите вашу ошибку на этой странице.

Почему при загрузке задания, в котором нужно просмотреть изображение и написать фидбэк, появляется ошибка синтаксиса?

Ошибка будет возникать, если на вход ожидается тип URL, а приходит строка.

Причин может быть две:
  • Входное поле имеет тип "ссылка".
  • Пул работает на неактуальной версии проекта. То есть создан до того, как вы изменили тип входного поля.
Какое максимальное количество заданий может быть на одной странице?

Зависит от задания. Технически можно много.

Но, во-первых, пользователи неохотно берутся за задания, которые требуют много времени на выполнение. То есть, они скорее сделают 10 заданий по одной минуте, чем одно задание на 10 минут.

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

Третий момент — контроль качества и оценка выполнения всей страницы. Если вы используете дооценку заблокированных пользователей, то лучше дробить задание на более мелкие части, чтобы в переразметку отправлялось меньше заданий. Это позволит уложиться в бюджет.

Как в интерфейсе при загрузке файла указываются настройки умного смешивания?

Настройки умного смешивания указываются для файла — не для пула.

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

Как определить время на выполнение задания?
Попробуйте выполнить задания сами, попросите своих друзей и коллег. Найдите среднее время выполнения и добавьте к нему 50%.
Чем отличаются task и task_suite?

Task — это отдельное задание. Task suite — страница с заданиями. Исполнитель получает оплату за страницу заданий.

Одно и то же задание попало на разные страницы

Одно и то же задание может попасть на разные страницы, если:

  • Существует динамическое перекрытие. Например на странице было 5 заданий, по 4-м из них ответы согласовались так, что общий ответ зачелся как верный. Пятое задание будет замешано в другой набор, поскольку оно не попало в финальный ответ и его необходимо «дооценить».
  • У разных заданий существует разное перекрытие. Те задания, у которых перекрытие указано больше, будут дополнительно показываться в наборах с другими оставшимися заданиями в пуле.
  • Если правило контроля качества меняет перекрытие у задания, то оно окажется в другом наборе.
TCV-файл
Почему при генерации TSV-файла со ссылками на картинки с Яндекс.Диска они не отображаются?

Про подключение Яндекс.Диска вы можете прочитать здесь.

В шаблоне проекта должно быть прописано, например, следующее:

<img src={{proxy img}} width="400">, где img — входное поле строкового формата.

Для тестирования используйте файл example.jpg. Его URL вы можете найти в Профиль → Интеграция с внешними сервисами.

Почему в предпросмотре выводятся сразу все фотографии из TSV-файла?

Каждое задание должно быть описано на отдельной строке в TSV-файле. Подробнее об этом вы можете прочитать здесь.

Когда вы создадите пул, то в нем будет настройка количества заданий на странице.

Как в TSV-файле с обучающим заданием прописать несколько known_solutions?

Загрузить в пул задания с разными ответами через интерфейс невозможно. Можно только через API

Куда добавится TSV-файл, если добавить его к запущенному пулу?

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

Как правильно организовать структуру TSV-файла для загрузки данных, если среди входящих данных есть JSON?

Все значения записываются в один столбец. Не забудьте экранировать кавычки. Подробнее об экранировании кавычек для формата JSON можно узнать в Руководстве.

Как во входном TSV-файле записывать массив?

Массив строк во входных данных записывается через запятую. Например: INPUT:typestext1, text2, text3, text4

Имеет ли значение порядок следования поля INPUT и полей GOLDEN в TSV-файле?

Порядок следования полей в TSV-файле значения не имеет. Можете делать так, как удобно.

Если для каких-то входящих колонок в TSV-файле не будет заголовков, то они будут пропущены при импорте? Либо если они будут иметь заголовки без INPUT:.. префикса?

Нет, если вы загрузите в пул файл с несуществующими заголовками, система выдаст ошибку загрузки. Все обязательные INPUT поля, используемые в спецификации должны быть в TSV-файле с заданиями. Лишних полей и столбцов быть не должно.

Если вы не хотите показывать какие-то данные исполнителям, но они вам нужны в файле, создайте для них необязательные скрытые входные поля в проекте.

Как правильно организовать структуру TSV файла для загрузки данных, если среди входных данных есть JSON?

Все значения записываются в один столбец. Не забудьте экранировать кавычки.

Подробнее об экранировании кавычек для формата JSON можно узнать в Руководстве.

Почему в задании с классификацией фотографий, если на странице больше 5-ти фотографий, то Толока разделяет их на 2 страницы?

Загруженные ссылки на картинки в файле Толока разделит на страницы в зависимости от того, какой способ их формирования вы указали при загрузке TSV-файла. Подробнее о трех способах загрузки можно узнать в Руководстве.

Входные данные
Как внутри элементов массива сделать так, чтобы запятые не воспринимались как разделитель элементов?

Заэкранируйте запятые обратным слэшем \.

Как будет отображаться то, что я напишу в столбце "hint"?

Поле hint заполняется для обучающих заданий. Если вы создаете обычное задание, вам нужно заполнить только поля с input. Остальные можно либо не заполнять, либо удалить вместе с заголовками.

О структуре файла и его заполнении можно узнать здесь.

Что означают строчки "Add your text here"?

Add your text here — это подсказка, которая говорит о том, что текст в поле вы можете заменить на свои данные для задания. О структуре файла и его заполнении можно узнать здесь.

Почему при экранировании слова в кавычках другими кавычками, на выходе все кавычки пропадают?

Из-за наличия кавычек в одном слове загружать ответ следует таким образом: "Сколько букв в слове ""Лихтенштейн""". Если внутри текста есть экранирование кавычками, то весь текст следует заключать в кавычки. Подробнее описано в Руководстве.

Как задавать ссылку в поле GOLDEN?

Текст в поле GOLDEN должен в точности совпадать с эталоном.

Обычно, если копировать ссылку из браузера на определенный сайт, они будут иметь одинаковый формат. Другое дело, если ссылка была обрезана или набрана на клавиатуре.

Проверьте ссылки, которые используете. Решить задачу с унификацией ссылок можно несколькими способами:
  • Добавить требования к формату ссылок в инструкцию и подсказки в обучении.
  • Обрезать полученные ссылки в js с помощью regexp и записать результат в новое выходное поле, а после сравнить полученное значение с эталоном.