Skip to content

Fluxos de trabalho multifásicos

Construa fluxos de anotação em múltiplos estágios no Potato — combine fases de treinamento, tarefas de anotação e páginas de pesquisa personalizadas com termos de consentimento e ramificação condicional.

O Potato 2.0 suporta fluxos de anotação estruturados com várias fases sequenciais, incluindo consentimento, pesquisas de pré-estudo, instruções, treinamento, anotação e feedback de pós-estudo.

Fases disponíveis

FaseDescrição
consentColeta de consentimento informado
prestudyPesquisas de pré-anotação (demografia, triagem)
instructionsDiretrizes e informações da tarefa
trainingPerguntas de prática com feedback
annotationTarefa principal de anotação (sempre obrigatória)
poststudyPesquisas e feedback de pós-anotação

Configuração básica

Use a seção phases na sua configuração:

yaml
phases:
  consent:
    enabled: true
    data_file: "data/consent.json"
 
  prestudy:
    enabled: true
    data_file: "data/demographics.json"
 
  instructions:
    enabled: true
    content: "data/instructions.html"
 
  training:
    enabled: true
    data_file: "data/training.json"
    schema_name: sentiment
    passing_criteria:
      min_correct: 8
 
  # annotation phase is always enabled
 
  poststudy:
    enabled: true
    data_file: "data/feedback.json"

Tipos de perguntas de pesquisa

As fases de pesquisa suportam estes tipos de perguntas:

Rádio (escolha única)

json
{
  "name": "experience",
  "type": "radio",
  "description": "How much annotation experience do you have?",
  "labels": ["None", "Some (< 10 hours)", "Moderate", "Extensive"],
  "required": true
}

Caixa de seleção/múltipla escolha

json
{
  "name": "languages",
  "type": "checkbox",
  "description": "What languages do you speak fluently?",
  "labels": ["English", "Spanish", "French", "German", "Chinese", "Other"]
}

Entrada de texto

json
{
  "name": "occupation",
  "type": "text",
  "description": "What is your occupation?",
  "required": true
}

Entrada numérica

json
{
  "name": "years_experience",
  "type": "number",
  "description": "Years of professional experience",
  "min": 0,
  "max": 50
}

Escala Likert

json
{
  "name": "familiarity",
  "type": "likert",
  "description": "How familiar are you with this topic?",
  "size": 5,
  "min_label": "Not familiar",
  "max_label": "Very familiar"
}

Seleção em lista suspensa

json
{
  "name": "country",
  "type": "select",
  "description": "Select your country",
  "labels": ["USA", "Canada", "UK", "Germany", "France", "Other"]
}

Fase de consentimento

Colete consentimento informado antes de começar:

yaml
phases:
  consent:
    enabled: true
    data_file: "data/consent.json"

consent.json:

json
[
  {
    "name": "consent_agreement",
    "type": "radio",
    "description": "I have read and understood the research consent form and agree to participate.",
    "labels": ["I agree", "I do not agree"],
    "right_label": "I agree",
    "required": true
  }
]

O campo right_label especifica a resposta exigida para prosseguir.

Pesquisas de pré-estudo

Colete dados demográficos ou perguntas de triagem:

yaml
phases:
  prestudy:
    enabled: true
    data_file: "data/demographics.json"

demographics.json:

json
[
  {
    "name": "age_range",
    "type": "radio",
    "description": "What is your age range?",
    "labels": ["18-24", "25-34", "35-44", "45-54", "55+"],
    "required": true
  },
  {
    "name": "education",
    "type": "radio",
    "description": "Highest level of education completed",
    "labels": ["High school", "Bachelor's degree", "Master's degree", "Doctoral degree", "Other"],
    "required": true
  },
  {
    "name": "english_native",
    "type": "radio",
    "description": "Is English your native language?",
    "labels": ["Yes", "No"],
    "required": true
  }
]

Fase de instruções

Exiba as instruções da tarefa:

yaml
phases:
  instructions:
    enabled: true
    content: "data/instructions.html"

Ou use conteúdo embutido:

yaml
phases:
  instructions:
    enabled: true
    inline_content: |
      <h2>Task Instructions</h2>
      <p>In this task, you will classify the sentiment of product reviews.</p>
      <ul>
        <li><strong>Positive:</strong> Expresses satisfaction or praise</li>
        <li><strong>Negative:</strong> Expresses dissatisfaction or criticism</li>
        <li><strong>Neutral:</strong> Factual or mixed sentiment</li>
      </ul>

Fase de treinamento

Perguntas de prática com feedback (consulte Fase de treinamento para detalhes):

yaml
phases:
  training:
    enabled: true
    data_file: "data/training.json"
    schema_name: sentiment
    passing_criteria:
      min_correct: 8
      total_questions: 10
    show_explanations: true

Pesquisas de pós-estudo

Colete feedback após a anotação:

yaml
phases:
  poststudy:
    enabled: true
    data_file: "data/feedback.json"

feedback.json:

json
[
  {
    "name": "difficulty",
    "type": "likert",
    "description": "How difficult was this task?",
    "size": 5,
    "min_label": "Very easy",
    "max_label": "Very difficult"
  },
  {
    "name": "clarity",
    "type": "likert",
    "description": "How clear were the instructions?",
    "size": 5,
    "min_label": "Very unclear",
    "max_label": "Very clear"
  },
  {
    "name": "suggestions",
    "type": "text",
    "description": "Any suggestions for improvement?",
    "textarea": true,
    "required": false
  }
]

Modelos integrados

O Potato inclui conjuntos de rótulos predefinidos para perguntas comuns de pesquisa:

ModeloRótulos
countriesLista de países
languagesIdiomas comuns
ethnicityOpções de etnia
religionOpções de religião

Use modelos nas suas perguntas:

json
{
  "name": "country",
  "type": "select",
  "description": "Select your country",
  "template": "countries"
}

Campos de resposta livre

Adicione entrada de texto opcional junto às perguntas estruturadas:

json
{
  "name": "topics",
  "type": "checkbox",
  "description": "Which topics interest you?",
  "labels": ["Technology", "Sports", "Politics", "Entertainment"],
  "free_response": true,
  "free_response_label": "Other (please specify)"
}

Cabeçalhos de página

Personalize os cabeçalhos das seções da pesquisa:

json
{
  "page_header": "Demographics Survey",
  "questions": [
    {"name": "age", "type": "radio", ...},
    {"name": "gender", "type": "radio", ...}
  ]
}

Exemplo completo

yaml
task_name: "Sentiment Analysis Study"
task_dir: "."
port: 8000
 
# Data configuration
data_files:
  - "data/reviews.json"
 
item_properties:
  id_key: id
  text_key: text
 
# Annotation scheme
annotation_schemes:
  - annotation_type: radio
    name: sentiment
    description: "What is the sentiment of this review?"
    labels:
      - Positive
      - Negative
      - Neutral
    sequential_key_binding: true
 
# Multi-phase workflow
phases:
  consent:
    enabled: true
    data_file: "data/consent.json"
 
  prestudy:
    enabled: true
    data_file: "data/demographics.json"
 
  instructions:
    enabled: true
    content: "data/instructions.html"
 
  training:
    enabled: true
    data_file: "data/training.json"
    schema_name: sentiment
    passing_criteria:
      min_correct: 8
      total_questions: 10
    retries:
      enabled: true
      max_retries: 2
    show_explanations: true
 
  # annotation phase is always enabled
 
  poststudy:
    enabled: true
    data_file: "data/feedback.json"
 
# Output
output_annotation_dir: "output/"
output_annotation_format: "json"
 
# User access
allow_all_users: true

Configuração legada

O formato de configuração surveyflow mais antigo ainda é suportado para compatibilidade retroativa:

yaml
surveyflow:
  enabled: true
  phases:
    - name: pre_survey
      type: survey
      questions: survey_questions.json
    - name: main_annotation
      type: annotation

No entanto, recomendamos migrar para o novo formato phases em projetos novos.

Boas práticas

1. Mantenha as pesquisas concisas

Pesquisas longas reduzem as taxas de conclusão. Concentre-se apenas em perguntas essenciais.

2. Use treinamento para tarefas complexas

As fases de treinamento melhoram a qualidade da anotação, especialmente em tarefas sutis.

3. Defina critérios de aprovação razoáveis

yaml
# Too strict - may exclude good annotators
passing_criteria:
  require_all_correct: true
 
# Better - allows for learning
passing_criteria:
  min_correct: 8
  total_questions: 10

4. Forneça instruções claras

Inclua exemplos na sua fase de instruções para esclarecer as expectativas.

5. Teste o fluxo completo

Conclua todo o fluxo de trabalho você mesmo antes da implantação para detectar problemas.

6. Use campos obrigatórios com critério

Marque perguntas como obrigatórias apenas se forem essenciais - perguntas opcionais obtêm respostas de melhor qualidade.

Integração com crowdsourcing

Para Prolific ou MTurk, configure códigos de conclusão:

yaml
phases:
  poststudy:
    enabled: true
    data_file: "data/feedback.json"
    show_completion_code: true
    completion_code_format: "POTATO-{user_id}-{timestamp}"

Consulte Crowdsourcing para mais detalhes.