Skip to content
Guides9 min de lecture

Lancer des études d'annotation sur Prolific

Lancez une étude d'annotation Potato sur Prolific avec connexion directe par URL, code de complétion, vérifications d'attention et suivi des soumissions via l'API.

Potato Team

Faites pointer l'URL de l'étude Prolific vers votre serveur Potato avec ?PROLIFIC_PID={{%PROLIFIC_PID%}}, définissez login.type: url_direct et un completion_code identique au code de l'étude, et chaque participant est connecté sous son propre identifiant Prolific puis renvoyé vers Prolific une fois terminé.

Prolific est un vivier de participants conçu pour les études académiques, et c'est la plateforme de crowdsourcing que Potato prend en charge le plus complètement. Ce guide couvre la configuration dont Potato a besoin, les réglages de l'étude du côté de Prolific et le contrôle qualité à mettre en place avant de dépenser de l'argent.

Pourquoi les chercheurs utilisent Prolific pour l'annotation

Prolific vérifie ses participants et les paie via la plateforme, si bien que les parties du crowdsourcing qui consomment d'habitude le budget d'une étude sont gérées en dehors de votre serveur. Il impose un taux horaire minimum, filtre les participants selon des critères démographiques et linguistiques, et enregistre le consentement, ce qui allège le dossier IRB d'une étude d'étiquetage. Mechanical Turk, le point de comparaison habituel, a fermé le 30 septembre 2026, et faire migrer une étude hors de MTurk explique ce changement pour les études qui y tournaient.

Ce qu'il vous faut avant de commencer

  1. Un compte chercheur Prolific.
  2. Potato qui tourne sur un serveur avec une URL HTTPS publique. Le guide de déploiement sur serveur couvre cette étape.
  3. Une configuration avec vos fichiers de données, item_properties et au moins un schéma d'annotation.

La configuration dont Potato a besoin

Quatre réglages transforment un projet Potato ordinaire en un projet que Prolific peut piloter. login.url_argument nomme le paramètre d'URL qui porte l'identifiant Prolific du participant, completion_code doit correspondre à un code configuré sur l'étude Prolific, et les deux clés de redirection renvoient les participants vers Prolific au lieu de les laisser sur une page de fin. Les clés d'attribution qui suivent plafonnent la quantité de travail confiée à chaque participant, et c'est ce qui garde le coût d'une étude prévisible.

yaml
annotation_task_name: "Sentiment Annotation Study"
task_description: "Classify the sentiment of short text snippets. This task takes about five minutes."
 
# Participants are logged in from the PROLIFIC_PID URL parameter
login:
  type: url_direct
  url_argument: PROLIFIC_PID
 
# Must match a completion code configured on the Prolific study
completion_code: "C1ABCDEF"
auto_redirect_on_completion: true
auto_redirect_delay: 5000
 
# Keep participants on task
hide_navbar: true
jumping_to_id_disabled: true
 
# Each participant labels 20 items; each item is labeled by 3 participants
assignment_strategy: random
max_annotations_per_user: 20
num_annotators_per_item: 3
 
data_files:
  - data/texts.json
 
item_properties:
  id_key: id
  text_key: text
 
output_annotation_dir: annotation_output/prolific-study/
export_annotation_format: jsonl
 
user_config:
  allow_all_users: true
  users: []
 
annotation_schemes:
  - annotation_type: radio
    name: sentiment
    description: "What is the sentiment expressed in this text?"
    labels:
      - name: positive
      - name: neutral
      - name: negative
    sequential_key_binding: true
    label_requirement:
      required: true

Choisissez num_annotators_per_item en fonction de ce que vous comptez faire des données. Trois est le choix habituel si vous prévoyez de rapporter l'accord ou de retenir l'étiquette majoritaire, et un seul suffit une fois qu'un pilote a montré que la tâche est bien définie. Le guide de l'accord inter-annotateurs explique comment lire le résultat.

Configurer l'étude sur Prolific

Dans le formulaire de l'étude Prolific, indiquez comme URL externe de l'étude votre serveur Potato, avec les marqueurs de Prolific dans la chaîne de requête :

text
https://your-server.com/?PROLIFIC_PID={{%PROLIFIC_PID%}}&STUDY_ID={{%STUDY_ID%}}&SESSION_ID={{%SESSION_ID%}}

Choisissez "I'll use URL parameters" à la question sur l'enregistrement des identifiants Prolific, puis configurez sur l'étude un code de complétion identique à completion_code dans votre configuration. STUDY_ID et SESSION_ID sont enregistrés dans la session du participant pour un suivi ultérieur.

Un participant qui clique sur le lien arrive sur Potato avec son identifiant dans l'URL. Potato crée un compte sans mot de passe sous cet identifiant, fait passer le participant par les phases que vous avez configurées et, à la fin, affiche le code de complétion avec un bouton Return to Prolific qui pointe vers https://app.prolific.com/submissions/complete?cc=<code>. Avec auto_redirect_on_completion activé, la redirection se fait d'elle-même après auto_redirect_delay millisecondes.

Écrivez le domaine sous la forme app.prolific.com. L'ancien domaine app.prolific.co ne sert plus en HTTPS, donc une URL de complétion copiée d'un ancien guide envoie les participants vers une page morte après qu'ils ont fait le travail.

Consentement, instructions et questionnaires de sortie

La plupart des études en crowdsourcing demandent plus que la page d'annotation. Le bloc phases de Potato place le consentement, la présélection, les instructions et un questionnaire post-étude autour de la phase d'annotation, et les participants les parcourent dans l'ordre où vous les listez :

yaml
phases:
  order: [consent, prestudy, instructions, annotation, poststudy]
 
  consent:
    type: consent
    file: surveyflow/consent.json
 
  prestudy:
    type: prestudy
    file: surveyflow/prescreening.json
 
  instructions:
    type: instructions
    file: surveyflow/instructions.html
 
  poststudy:
    type: poststudy
    file: surveyflow/demographics.json

Ajoutez ce bloc à la configuration ci-dessus. La phase annotation est la seule obligatoire, donc une étude qui n'a pas besoin de formulaire de consentement peut omettre toutes les autres entrées. Les projets plus anciens configurent la même chose via surveyflow, que Potato lit toujours mais ne recommande plus pour les nouveaux projets.

Vérifications d'attention

Une vérification d'attention est un élément dont la bonne réponse est connue, mélangé à la file pour qu'un participant inattentif produise une mauvaise réponse détectable. Potato les charge depuis leur propre fichier et non depuis vos données, si bien que les vérifications restent hors de votre jeu de données :

yaml
attention_checks:
  enabled: true
  items_file: "data/attention_checks.json"
  frequency: 10
  min_response_time: 3.0
  failure_handling:
    warn_threshold: 2
    block_threshold: 5

Ajoutez ce bloc à la configuration ci-dessus. frequency: 10 insère une vérification tous les dix éléments, et min_response_time fait échouer toute réponse arrivée plus vite que quiconque n'aurait pu lire l'élément, quel que soit son contenu. L'horloge tourne sur le serveur, du moment où il a envoyé l'élément au moment où il a reçu l'enregistrement.

Chaque élément de vérification porte un identifiant, le texte que voit le participant et la réponse attendue pour chaque schéma, par nom :

json
[
  {
    "id": "attn_001",
    "text": "Please select 'positive' for this item to verify you are reading carefully.",
    "expected_answer": {"sentiment": "positive"}
  }
]

Réglez block_threshold en fonction de la longueur de votre étude. Un participant qui échoue à cinq vérifications dans une tâche de 20 éléments n'a jamais vraiment annoté ; un participant qui en échoue cinq sur 300 éléments était peut-être fatigué pendant un moment, et le bloquer fait perdre le reste de son travail.

Suivre une étude en cours

Définissez login.type: prolific et ajoutez un bloc prolific, et Potato interroge l'API Prolific pour connaître le statut des soumissions, en plus de la connexion directe par URL qu'il assure déjà :

yaml
login:
  type: prolific
  url_argument: PROLIFIC_PID
 
prolific:
  config_file_path: configs/prolific_config.yaml
 
completion_code: "C1ABCDEF"

Ajoutez ce bloc à la configuration ci-dessus. Le fichier qu'il désigne contient le jeton d'API, gardez-le donc hors du contrôle de version :

yaml
# configs/prolific_config.yaml
token: "your-prolific-api-token"
study_id: "your-study-id"
workload_checker: true
max_concurrent_sessions: 30
workload_checker_period: 300

Une fois le jeton configuré, le tableau de bord d'administration gagne un panneau Prolific qui publie, met en pause et arrête l'étude, approuve ou rejette les soumissions, verse des bonus et affiche à l'avance le coût d'un ajout de places. Le moniteur de charge met l'étude en pause quand les participants actifs atteignent max_concurrent_sessions et la relance quand leur nombre passe sous 20 % de ce maximum. Il ne relance qu'une étude qu'il a lui-même mise en pause, donc une étude que vous mettez en pause à la main dans Prolific reste en pause.

Les participants qui abandonnent

Prolific signale une soumission comme RETURNED, TIMED-OUT ou REJECTED quand un participant part sans terminer. Potato libère les éléments attribués à ces participants pour que d'autres puissent les reprendre, et conserve les annotations qu'ils avaient déjà terminées. Utilisez instance_reclaim quand le motif doit changer le sort de ce travail terminé :

yaml
instance_reclaim:
  enabled: true
  prolific:
    preserve_completed_annotations: true
    status_policies:
      TIMED-OUT:
        preserve_completed_annotations: true
      REJECTED:
        preserve_completed_annotations: false

Ajoutez ce bloc à la configuration ci-dessus. Cette distinction mérite d'être réglée délibérément. Un participant dont le temps a expiré a en général annoté honnêtement jusqu'à ce que quelque chose l'interrompe, alors qu'un participant rejeté a produit un travail que vous avez décidé de ne pas payer, et le garder dans le jeu de données va à l'encontre du rejet.

Ce que contient la sortie

Potato écrit des fichiers par annotateur sous output_annotation_dir et, quand export_annotation_format est défini, un export périodique sous <output_annotation_dir>/exports/<format>/. Chaque enregistrement exporté contient l'instance, l'annotateur et les étiquettes par nom de schéma :

json
{"instance_id": "t_014", "user_id": "5f2c9a1b3d4e5f6a7b8c9d0e", "labels": {"sentiment": {"positive": "positive"}}, "spans": {}, "links": {}}

Le user_id est l'identifiant Prolific du participant, puisque c'est le nom d'utilisateur sous lequel Potato l'a créé, et c'est ce qui permet de rattacher une ligne à une soumission Prolific pour l'approuver ou verser un bonus. Traitez cette colonne comme une donnée identifiante quand vous publiez le jeu de données.

Commencer par un pilote

Faites passer 5 à 10 participants avant de lancer l'étude complète, et lisez leur sortie au lieu de regarder seulement leur taux de complétion. Deux défauts coûtent cher s'ils sont découverts après coup. Le premier est une consigne ambiguë d'une manière que vous ne voyez pas parce que c'est vous qui avez écrit la tâche, et le second est un temps par élément très éloigné de votre estimation, ce qui signifie que votre taux de rémunération est faux dans un sens ou dans l'autre.

Fixez le prix de l'étude à partir du temps médian du pilote plutôt que du vôtre. Gardez l'interface utilisable sur une largeur de téléphone, car certains participants seront sur un téléphone quoi que dise la description de l'étude. Approuvez les soumissions rapidement, parce que des gens attendent l'argent et parce que votre délai d'approbation est visible par les futurs participants qui décident s'ils acceptent votre étude.

Prochaines étapes

La référence complète se trouve dans Intégration du crowdsourcing sur ce site, et la documentation de l'intégration Prolific dans le dépôt Potato couvre les endpoints de l'API d'administration derrière le panneau du tableau de bord. Commencez par là si vous avez besoin de créer des études, de synchroniser des qualifications ou de payer des screen-outs depuis votre propre code.