在 Prolific 上執行標註研究
在 Prolific 上執行 Potato 標註研究:URL 直接登入、完成碼、注意力檢查,以及在 API 一側監控提交。
把 Prolific 的研究 URL 指向你的 Potato 伺服器並帶上 ?PROLIFIC_PID={{%PROLIFIC_PID%}},設定 login.type: url_direct 以及一個與研究上的程式碼相符的 completion_code,每位參與者就會以自己的 Prolific ID 登入,並在做完後被送回 Prolific。
Prolific 是為學術研究搭建的參與者池,也是 Potato 支援得最完整的眾包平臺。本指南涵蓋 Potato 所需的配置、Prolific 一側的研究設定,以及在花錢之前值得先準備好的品質控制。
研究者為什麼用 Prolific 做標註
Prolific 會篩選參與者並通過平臺付款,所以眾包裡通常吃掉研究預算的那些部分,都在你的伺服器之外處理掉了。它強制執行最低時薪,按人口統計和語言條件篩選參與者,並記錄知情同意,這縮短了標註研究的 IRB 文書工作。通常拿來比較的 Mechanical Turk 已於2026 年 9 月 30 日關閉;對於原先在那裡執行的研究,把研究遷出 MTurk介紹了這一轉換。
開始之前需要什麼
- 一個 Prolific 研究者賬戶。
- 執行在帶有公開 HTTPS URL 的伺服器上的 Potato。伺服器部署指南講了這一步。
- 一份配置,其中有你的資料檔案、
item_properties,以及至少一個標註方案。
Potato 所需的配置
四項設定就能把一個普通的 Potato 項目變成 Prolific 可以驅動的項目。login.url_argument 指明攜帶參與者 Prolific ID 的 URL 參數,completion_code 必須與 Prolific 研究上配置的程式碼相符,兩個重定向鍵則把參與者送回 Prolific,而不是把他們留在一個完成頁上。它下面的分配鍵限定任何一位參與者拿到多少工作量,一項研究的成本正是靠這個保持可預測。
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: truenum_annotators_per_item 按你打算拿這些資料做什麼來定。如果你打算報告一致性或取多數標籤,通常選三;一旦試點表明任務定義清晰,一個就夠了。標註者間一致性指南講了怎麼解讀結果。
在 Prolific 上設定研究
在 Prolific 的研究表單裡,把外部研究 URL 設為你的 Potato 伺服器,並在查詢字串裡帶上 Prolific 的佔位符:
https://your-server.com/?PROLIFIC_PID={{%PROLIFIC_PID%}}&STUDY_ID={{%STUDY_ID%}}&SESSION_ID={{%SESSION_ID%}}關於 Prolific ID 如何記錄的那個問題,選擇“I'll use URL parameters”,然後在研究上配置一個與你配置檔案中 completion_code 相符的完成碼。STUDY_ID 和 SESSION_ID 會被記入參與者的會話,供之後追蹤使用。
點了連結的參與者帶著 URL 裡的 ID 來到 Potato。Potato 以那個 ID 建一個無密碼賬戶,帶參與者走完你配置的各個階段,並在他們完成時顯示完成碼,附一個連結到 https://app.prolific.com/submissions/complete?cc=<code> 的返回 Prolific 按鈕。設定了 auto_redirect_on_completion 之後,重定向會在 auto_redirect_delay 毫秒後自行發生。
域名要寫成 app.prolific.com。舊的 app.prolific.co 域名已經不再提供 HTTPS,所以從舊指南里抄來的完成 URL,會在參與者把活幹完之後把他們送到一個失效頁面。
知情同意、指導語和退出問卷
大多數眾包研究需要的不只是標註頁面。Potato 的 phases 塊把知情同意、篩選、指導語和研究後問卷安排在標註階段周圍,參與者按你列出的順序依次經過:
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把這個塊加到上面那份配置裡。annotation 是唯一必需的階段,所以不需要知情同意書的研究可以把其餘條目全部省掉。較早的項目用 surveyflow 配置同樣的東西,Potato 仍然讀它,但不再推薦新項目使用。
注意力檢查
注意力檢查是一個已知正確答案的條目,被混進佇列,好讓不專心的參與者給出可以被察覺的錯誤答案。Potato 從它們自己的檔案而不是你的資料里加載這些條目,所以檢查項不會進入你的資料集:
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把這個塊加到上面那份配置裡。frequency: 10 每十個條目插入一次檢查,min_response_time 會判定那些快到沒人可能讀完條目的回答不通過,不管答案寫的是什麼。計時在伺服器上進行,從它發出條目的那一刻算到它收到儲存的那一刻。
每個檢查條目帶有一個 id、參與者看到的文本,以及按方案名稱給出的預期答案:
[
{
"id": "attn_001",
"text": "Please select 'positive' for this item to verify you are reading carefully.",
"expected_answer": {"sentiment": "positive"}
}
]block_threshold 要對著你研究的長度來設。在 20 個條目的任務裡沒通過五次檢查的參與者根本沒在標註;在 300 個條目裡沒通過五次的參與者,可能只是有一陣子累了,封掉他會丟掉他其餘的工作。
監控進行中的研究
設定 login.type: prolific 並加上一個 prolific 塊,Potato 就會在已有的 URL 直接登入之外,輪詢 Prolific API 獲取提交狀態:
login:
type: prolific
url_argument: PROLIFIC_PID
prolific:
config_file_path: configs/prolific_config.yaml
completion_code: "C1ABCDEF"把這個塊加到上面那份配置裡。它指向的那個檔案存放 API 令牌,所以別把它納入版本控制:
# 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配好令牌之後,管理儀表盤會多出一個 Prolific 面板,可以釋出、暫停和停止研究,批准或拒絕提交,發放獎金,以及預覽增加名額的花費。工作量監控會在活躍參與者達到 max_concurrent_sessions 時暫停研究,並在數量降到該上限的 20% 以下時恢復研究。它只恢復自己暫停過的研究,所以你在 Prolific 裡手動暫停的研究會一直暫停著。
中途退出的參與者
參與者沒做完就離開時,Prolific 會把提交報為 RETURNED、TIMED-OUT 或 REJECTED。Potato 會釋放分配給這些參與者的條目,讓別人可以接手,同時保留他們已經完成的標註。如果退出的原因應當改變這些已完成工作的去向,就用 instance_reclaim:
instance_reclaim:
enabled: true
prolific:
preserve_completed_annotations: true
status_policies:
TIMED-OUT:
preserve_completed_annotations: true
REJECTED:
preserve_completed_annotations: false把這個塊加到上面那份配置裡。這個區分值得認真設。超時的參與者通常是老老實實標註到被什麼事打斷,而被拒絕的參與者交出的是你決定不付錢的工作,把它留在資料集裡等於削弱了這次拒絕。
輸出裡有什麼
Potato 在 output_annotation_dir 下按標註者寫檔案;設定了 export_annotation_format 時,還會在 <output_annotation_dir>/exports/<format>/ 下定期匯出。每條匯出記錄帶有實例、標註者,以及按方案名稱組織的標籤:
{"instance_id": "t_014", "user_id": "5f2c9a1b3d4e5f6a7b8c9d0e", "labels": {"sentiment": {"positive": "positive"}}, "spans": {}, "links": {}}user_id 是參與者的 Prolific ID,因為 Potato 正是用這個使用者名稱給他們建的賬戶,這也是你能把一行資料對回某次 Prolific 提交、以便批准或發獎金的依據。釋出資料集時,把這一列當作身份資訊處理。
先跑一次試點
在啟動完整研究之前先跑 5 到 10 名參與者,而且要讀他們的輸出,不要只看完成率。有兩種問題事後才發現的代價很高。第一種是某條指導語有歧義,而你因為是寫任務的人所以看不出來;第二種是單個條目的耗時與你的估計相差很遠,這意味著你的薪酬標準在某個方向上定錯了。
研究的定價要按試點的中位耗時來算,而不是按你自己的。介面在手機寬度下也要能用,因為不管研究說明怎麼寫,總會有參與者用手機。儘快批准提交,一來人們在等這筆錢,二來你的批准用時對正在考慮要不要接你研究的未來參與者是可見的。
下一步
- 把舊研究遷出 Mechanical Turk
- 更細緻地設定品質控制
- 對結果計算標註者間一致性
完整參考見本站的眾包整合,而 Potato 倉庫裡的 Prolific 整合文件介紹了儀表盤面板背後的管理 API 端點。如果你需要由自己的程式碼驅動研究建立、資格同步或付費篩除,從那裡開始。