Mechanical Turk ワーカーとのコミュニケーションから、特定のワーカーが完了できる HIT の数を制限する方法があることは知っていますが、その方法がわかりません。どんな助けでも大歓迎です!
7 に答える
この問題をほぼ解決するスクリプトを開発しました。主なアイデアは、ワーカー ID をデータベースに対してチェックし、ワーカーが関連する HIT を既に完了している場合は HIT を非表示にすることです。
独自のデータベース サーバーをホストする必要がないように、http: //uniqueturker.myleott.comでスクリプトを (無料) サービスとして利用できるようにしました。スクリプトの使用に問題がある場合、または質問や提案がある場合はお知らせください。
独自の URL/データベースで使用する場合に備えて、ここにスクリプトも含めます。そのルートに行く場合は、ワーカー ID を受け取り、ワーカーが HIT で作業できる場合は「1」を返し、そうでない場合は「0」を返す Web インターフェイスを DB に設定する必要があります。次に、以下の「YOUR_URL」を置き換えて、その Web インターフェイスを指すようにします。
<script type="text/javascript">
(function() {
var assignmentId = turkGetParam('assignmentId', '');
if (assignmentId != '' && assignmentId != 'ASSIGNMENT_ID_NOT_AVAILABLE') {
var workerId = turkGetParam('workerId', '');
var url = 'http://YOUR_URL/?workerId='+workerId;
var request = new XMLHttpRequest();
request.open('GET', url, false);
request.send();
if (request.responseText != '1') {
document.getElementById('mturk_form').style.display = 'none';
document.getElementsByTagName('body')[0].innerHTML = "You have already completed the maximum number of HITs allowed by this requester. Please click 'Return HIT' to avoid any impact on your approval rating.";
}
}
})();
</script>
実際には単一の HIT であるヒットを作成しますが、表示されるたびに JavaScript を使用して HIT を動的に変更します。次に、HIT を投稿するときに、「HIT ごとの割り当ての数」を希望する参加者の数に設定します。このようにして、一意の参加者のみを取得します。
実行したい HIT のタイプによっては、これが有効な手法となる場合があります。これを使用して、参加者に表示される刺激をランダム化しました。
これは、外部の質問でも行うことができます。私は機械的なタークで心理学の実験を行っているので、ユニークな参加者が必要です。ワーカーが HIT を 1 回だけ実行するように要求することに加えて、Python スクリプトを使用して一意性を検証します。私の HIT はすべて CGI スクリプトを実行して質問を生成します。スクリプトはログ ファイルを参照し、ワーカーが以前に関連するジョブを受け入れていた場合は、一意の参加者が必要なため HIT を利用できないことを丁寧に通知します。
以前は資格を持ってこれを行っていましたが、実際には参加が制限されていることがわかりました。
x 個の一意のユーザーが必要な場合は、「設計」セクションで HIT あたりの割り当て数を x に等しくします。次に、csv ファイルをロードするときに、ファイルに HIT を 1 つだけ入れます。
見る
http://docs.amazonwebservices.com/AWSMechanicalTurkRequester/2008-08-02/
次の 2 種類の制限を設定できます。
- 作成した特定の HIT タイプに対してワーカーが受け入れることができる割り当ての最大数。この値は、設定するまで未定義です。
- HIT タイプ固有の制限が割り当てられていないすべての HIT に対して、Worker が受け入れることができる割り当ての最大数。デフォルトの初期値は 10 です。
最初に、すべての HIT がグループ化され、HIT タイプに関係なく、グループに適用される全体的な制限 (デフォルトは 10) が適用されます。
これは、ワーカーが現在受け入れることができる割り当ての数を指すことに注意してください。作業者が割り当てを送信すると、別の割り当てを受け入れることができます。
おそらく、ワーカーが全体で完了した HIT の数を気にする必要はありませんが、ワーカーが現在受け入れ可能な数をデフォルトの 10 から変更したい理由があるかもしれません。複数の割り当てを持つHIT。
ワーカーが実際に実行できる HIT の数を本当に本当に制限したい場合は、ワーカーごとに特定の数を超えて受け入れないことを明示的に指定する必要があります。制限に達したら提出を拒否するか、それを行うために資格タイプをモンキーすることができます (ただし、それは大変な作業になる可能性があります)。
後者の例として、誰かが合計 N 個の割り当てを行うように制限したい場合、HIT ごとに資格タイプを作成し、1 人のワーカーに N 個以下のタイプを付与することができます。
一意のワーカーのみが単一のヒットを完了するようにするかどうかを明確にするために、必要な数の一意のワーカーに最大割り当てを設定するだけで、デフォルトで Mechanical Turk はそのヒットに一意のワーカーのみを割り当てます。
複数のヒットで一意のワーカーが必要な場合は、工夫を凝らして、ワーカー ID の拡張子をログに記録するスクリプトと組み合わせた外部の質問を使用する必要があります...
psiTurk (MTurk 行動研究アプリ) は、@david-l と同様のアプローチを使用して、ワーカーが HIT を繰り返すのを自動的に防ぎます。開示: 私はプロジェクトの開発者の 1 人です。