Skip to content

Flujos de Trabajo Multifase

Construye flujos de trabajo de anotación complejos con encuestas, entrenamiento y lógica de ramificación.

Flujos de Trabajo Multifase

Potato 2.0 soporta flujos de trabajo de anotación estructurados con múltiples fases secuenciales incluyendo consentimiento, encuestas de pre-estudio, instrucciones, entrenamiento, anotación y retroalimentación post-estudio.

Fases Disponibles

FaseDescripción
consentRecopilación de consentimiento informado
prestudyEncuestas pre-anotación (demografía, selección)
instructionsDirectrices e información de la tarea
trainingPreguntas de práctica con retroalimentación
annotationTarea principal de anotación (siempre requerida)
poststudyEncuestas y retroalimentación post-anotación

Configuración Básica

Usa la sección phases en tu configuración:

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 Preguntas de Encuesta

Las fases de encuesta soportan estos tipos de preguntas:

Radio (Opción Única)

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

Checkbox/Selección Múltiple

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"
}

Selección Desplegable

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

Fase de Consentimiento

Recopila consentimiento informado antes de comenzar:

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
  }
]

El campo right_label especifica la respuesta requerida para continuar.

Encuestas de Pre-Estudio

Recopila datos demográficos o preguntas de selección:

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 Instrucciones

Muestra las instrucciones de la tarea:

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

O usa contenido en línea:

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 Entrenamiento

Preguntas de práctica con retroalimentación (consulta Fase de Entrenamiento para más detalles):

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

Encuestas Post-Estudio

Recopila retroalimentación después de la anotación:

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
  }
]

Plantillas Incorporadas

Potato incluye conjuntos de etiquetas predefinidos para preguntas de encuesta comunes:

PlantillaEtiquetas
countriesLista de países
languagesIdiomas comunes
ethnicityOpciones de etnicidad
religionOpciones de religión

Usa plantillas en tus preguntas:

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

Campos de Respuesta Libre

Agrega entrada de texto opcional junto a preguntas estructuradas:

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

Encabezados de Página

Personaliza los encabezados de sección de la encuesta:

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

Ejemplo 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

Configuración Heredada

El formato de configuración anterior surveyflow todavía es compatible por razones de retrocompatibilidad:

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

Sin embargo, recomendamos migrar al nuevo formato phases para proyectos nuevos.

Mejores Prácticas

1. Mantén las Encuestas Concisas

Las encuestas largas reducen las tasas de finalización. Concéntrate solo en las preguntas esenciales.

2. Usa Entrenamiento para Tareas Complejas

Las fases de entrenamiento mejoran la calidad de la anotación, especialmente para tareas con matices.

3. Establece Criterios de Aprobación Razonables

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. Proporciona Instrucciones Claras

Incluye ejemplos en tu fase de instrucciones para aclarar las expectativas.

5. Prueba el Flujo Completo

Completa todo el flujo de trabajo tú mismo antes del despliegue para detectar problemas.

6. Usa Campos Obligatorios con Prudencia

Solo marca preguntas como obligatorias si son esenciales - las preguntas opcionales obtienen mejor calidad de respuesta.

Integración con Crowdsourcing

Para Prolific o MTurk, configura códigos de finalización:

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

Consulta Crowdsourcing para más detalles.