Документация Толоки

Классификация текстов

Для такого проекта в Толоке есть пресет Кликбейт или нет?

Пресет помогает классифицировать любой тип текста для обучения классификаторов и NLP-моделей.

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

Из каких компонентов состоит этот пример
  • view.text — текст, который вы хотите классифицировать.

    Показать код
    {
      "type": "view.text",
      "label": "Headline",
      "content": {
        "type": "data.input",
        "path": "headline"
      }
    }
    
  • field.button-radio-group — добавляет кнопки для выбора варианта ответа.

    Показать код
    {
      "type": "field.button-radio-group",
      "validation": {
        "type": "condition.required"
      },
      "label": "Is this headline clickbait?",
      "options": [
        {
          "label": "Clickbait",
          "value": "yes"
        },
        {
          "value": "no",
          "label": "Not clickbait"
        }
      ],
      "data": {
        "type": "data.output",
        "path": "result"
      }
    }
    
  • condition.required — проверяет, что выбран хотя бы один вариант.

    Показать код
    {
      "type": "condition.required",
      "hint": "Select an option"
    }
    
  • plugin.toloka — настраивает внешний вид задания.

    Показать код
    {
      "type": "plugin.toloka",
      "layout": {
        "kind": "scroll",
        "taskWidth": 500
      }
    }
    
  • plugin.hotkeysгорячие клавиши.

    Показать код
    {
      "1": {
        "type": "action.set",
        "data": {
          "type": "data.output",
          "path": "result"
        },
        "payload": "yes"
      },
      "2": {
        "type": "action.set",
        "data": {
          "type": "data.output",
          "path": "result"
        },
        "payload": "no"
      },
      "type": "plugin.hotkeys"
    }
    

Примечание

Вы можете добавлять медиафайлы (аудио, видео, картинки) со своего сервера, Яндекс Диска или из облачных хранилищ, таких как Yandex Cloud, Google Cloud, Amazon AWS и т.п.

Если вам не подходит этот пресет, посмотрите другие примеры в этом разделе.

Добавить описание

Чтобы добавить подробное описание к заданию, используйте компонент view.text.

Показать код
{
  "type": "view.text",
  "content": "Read the headline and tell if it is clickbait."
}

Добавить поле для ввода ответа

Если вам нужны комментарии от исполнителя, то добавьте поле для ввода текста с помощью компонента field.textarea.

Показать код
{
  "type": "field.textarea",
  "label": "Comments",
  "placeholder": "Enter text",
  "data": {
    "type": "data.output",
    "path": "comment"
  }
}

Добавить оформление

Чтобы исполнитель легче ориентировался в задании, вы можете оформлять цветом разные типы данных с помощью компонента view.alert. В этом примере описание выделено синей рамкой, а кнопки — желтой.

Показать код
{
  "type": "view.alert",
  "theme": "info",
  "content": {
    "type": "view.text",
    "content": "Look at the text and tell if it is clickbait."
  }
},
{
  "type": "view.text",
  "label": "Headline",
  "content": {
    "type": "data.input",
    "path": "headline"
  }
},
{
  "type": "view.alert",
  "theme": "warning",
  "content": {
    "type": "field.button-radio-group",
    "validation": {
      "type": "condition.required",
      "hint": "Select an option"
    },
    "label": "Is this headline clickbait?",
    "options": [
      {
        "label": "Clickbait",
        "value": "yes"
      },
      {
        "label": "Not clickbait",
        "value": "no"
      }
    ],
    "data": {
      "type": "data.output",
      "path": "result"
    }
  }
}

Другие варианты кнопок

Определите, может ли исполнитель выбрать несколько вариантов ответа или только один:

Если ответов на вопрос может быть несколько — настройте чекбоксы field.checkbox-group.

Показать код
{
  "type": "field.checkbox-group",
  "label": "This headline is:",
  "options": [
    {
      "label": "Clickbate",
      "value": "clickbate"
    },
    {
      "label": "Too long",
      "value": "long"
    },
    {
      "label": "Gramatically incorrect",
      "value": "bad-grammar"
    },
    {
      "label": "None of this",
      "value": "none"
    }
  ],
  "data": {
    "type": "data.output",
    "path": "input_data"
  },
  "validation": {
    "type": "condition.required",
    "hint": "Select at least one option"
  }
}

Компонент field.button-radio-group отображается в виде цельных кнопок. Такие кнопки лучше подходят, когда в вопросе 2–4 варианта с короткими названиями.

Если вариантов ответа много или названия длинные, то лучше использовать переключатель field.radio-group, как в примере.

Показать код
{
  "type": "field.radio-group",
  "label": "This headline is:",
  "options": [
    {
      "label": "Clickbate",
      "value": "clickbate"
    },
    {
      "label": "Too long",
      "value": "long"
    },
    {
      "label": "Grammatically incorrect",
      "value": "bad-grammar"
    },
    {
      "label": "None of this",
      "value": "none"
    },
    {
      "label": "The text hasn't loaded",
      "value": "404"
    }
  ],
  "data": {
    "type": "data.output",
    "path": "input_data"
  },
  "validation": {
    "type": "condition.required",
    "hint": "Select an option"
  }
}

Добавить условия

С помощью helper.if можно показывать любой элемент интерфейса только при выборе определенного ответа.

Показать код
{
  "type": "helper.if",
  "condition": {
    "type": "condition.equals",
    "data": {
      "type": "data.output",
      "path": "first-q"
    },
    "to": "no"
  },
  "then": {
    "type": "field.checkbox-group",
    "label": "2. Why don't you like it?",
    "options": [
      {
        "label": "It's clickbate",
        "value": "clickbate"
      },
      {
        "label": "It's too long",
        "value": "long"
      },
      {
        "label": "It's grammarly incorrect",
        "value": "bad-grammar"
      },
      {
        "label": "Other",
        "value": "other"
      }
    ],
    "data": {
      "type": "data.output",
      "path": "input_data"
    },
    "validation": {
      "type": "condition.required",
      "hint": "Select an option"
    }
  }
}

Подходит ли текст под поисковый запрос

Добавьте кнопку, по которой исполнители будут открывать результаты поиска, и сформируйте ссылку поискового запроса с помощью компонента helper.search-query. Чтобы убедиться, что исполнитель перешел по ссылке и проверил ее содержимое, настройте валидацию, как в примере.

Показать код
{
  "type": "condition.link-opened",
  "hint": "Follow the link",
  "url": {
    "type": "helper.search-query",
    "query": {
      "type": "data.input",
      "path": "link"
    },
    "engine": "bing"
  }
}

Попарное сравнение с веб-страницей

С помощью компонента view.iframe вы можете отобразить веб-страницу во встроенном окне. Расположите рядом текст, используя layout.side-by-side.

Показать код
{
  "type": "view.iframe",
  "maxWidth": 400,
  "fullHeight": true,
  "url": {
    "type": "helper.search-query",
    "query": {
      "type": "data.input",
      "path": "link"
    },
    "engine": "bing"
  }
}

Попарное сравнение с веб-страницей в рамке мобильного устройства

Это более сложный пример, который сравнивает текст с результатами поискового запроса. В нем используются компоненты:

  • view.iframe — отображает веб-страницу во встроенном окне;
  • view.device-frame — оборачивает окно в рамку смартфона;
  • layout.side-by-side — располагает картинку и окно с результатами запроса рядом друг с другом.
Показать код
{
  "type": "layout.side-by-side",
  "items": [
    {
      "type": "view.text",
      "content": {
        "type": "data.input",
        "path": "text"
      }
    },
    {
      "type": "view.device-frame",
      "maxWidth": 400,
      "content": {
        "type": "view.iframe",
        "maxWidth": 400,
        "fullHeight": true,
        "url": {
          "type": "helper.search-query",
          "query": {
            "type": "data.input",
            "path": "link"
          },
          "engine": "bing"
        }
      }
    }
  ]
}