Mechanical Turk

总览

oTree提供与Amazon Mechanical Turk (MTurk)的集成:

  1. 从oTree的管理员界面,你可以将你的会话发布至MTurk。
  2. Mechanical Turk上的worker可以参与你的会话。
  3. 从oTree的管理界面,你可以向参与者发放他们的报酬和额外奖励(payoff)。

安装

MTurk模板

将下面的内容放入你的 mturk_template.html:

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script>

<crowd-form>
  <div style="padding: 20px">
    <p>
      This HIT is an academic experiment on decision making from XYZ University....
      After completing this HIT, you will receive your reward plus a bonus payment....
    </p>

    <p>After
      you have accepted this HIT, the URL to the study will appear here: <b><a class="otree-link">link</a></b>.
    </p>
    <p>
      On the last page, you will be given a completion code.
      Please copy/paste that code below.
    </p>

    <crowd-input name="completion_code" label="Enter your completion code here" required></crowd-input>
    <br>
  </div>
</crowd-form>

你可以轻易地测试页面的外观,通过将内容放入一个.html文件,并双击在浏览器中打开。你可以根据你的需要修改 <crowd-form> 内部的内容,但注意下面的事项:

  1. 实验的链接应当如 <a class="otree-link">Link text</a>。一旦用户接受了任务,oTree会自动为这些链接添加 href 使它们指向你的实验。
  2. 如果你想要完成代码显示在oTree管理员页面(Payments选项卡),你需要一个名为 completion_code<crowd-input>

让你的会话在MTurk上运行

在你的实验的最后一个页面,给用户一个完成代码。例如,你可以简单地显示:“你已经完成了实验。你的完成代码是TRUST2020。”如果你愿意,你可以生成唯一的完成代码。你无需过于担心完成代码,因为oTree追踪了每位worker的MTurk ID并将其显示在管理员页面上,同时显示他们是否到达了最终页面。完成代码只是一层额外的验证,它给与了worker一个特定的他们习惯于有的目标。

不使用oTree Studio用户的额外步骤

如果你不使用oTree Studio,你需要按照 这里 的步骤操作。

本地沙箱测试

在开始实验之前,你必须创建一个MTurk雇主账户,获取你的 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

你可以在 这里 获取这些证书:

AWS key

为了在进行本地MTurk沙箱测试,查看实验展示给worker的样子,你需要将这些证书存储进你的电脑。

如果使用Windows,在控制面版里搜索“环境变量”,并像下面这样创建两个环境变量:

_images/env-vars.png

在Mac上,将你的证书像这样放入你的 ~/.bash_profile 文件:

export AWS_ACCESS_KEY_ID=AKIASOMETHINGSOMETHING
export AWS_SECRET_ACCESS_KEY=yoursecretaccesskeyhere

重启你的命令行窗口并运行oTree。在oTree管理员界面,点击“Session”,在按钮 “Create New Session”下,选择”For MTurk”:

_images/create-mturk-session.png

在你的web服务器上设置环境变量

如果你使用Heroku,前往你的App Dashboard的”settings”界面,并设置config vars AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

资格要求

oTree使用boto3语法进行资格要求。下面是两个资格要求的例子,你可以将其复制到你的 qualification_requirements 设置中:

[
    {
        'QualificationTypeId': "3AWO4KN9YO3JRSN25G0KTXS4AQW9I6",
        'Comparator': "DoesNotExist",
    },
    {
        'QualificationTypeId': "4AMO4KN9YO3JRSN25G0KTXS4AQW9I7",
        'Comparator': "DoesNotExist",
    },
]

下面展示了如何要求worker来自美国。 (00000000000000000071 是基于位置的资格类型代码。)

[
    {
        'QualificationTypeId': "00000000000000000071",
        'Comparator': "EqualTo",
        'LocaleValues': [{'Country': "US"}]
    },
]

参见 MTurk API reference。(然而,注意到这里的代码示例使用的是JavaScript,所以你需要修改语法才能使之运行在Python下,例如为字典的键添加引号。)

注意:当运行在沙箱模式下时,oTree忽略资格要求。

避免重复参加(重复的worker)

为了避免一个worker参加两次,你可以在实验中对每一个worker设置一个验证(Qualification),并屏蔽已有此验证的人。

登录到你的MTurk账号并创建一个验证。前往你的oTree MTurk设置并粘贴验证ID到 grant_qualification_id 。然后,添加一个条目到 qualification_requirements:

{
    'QualificationTypeId': "YOUR_QUALIFICATION_ID_HERE",
    'Comparator': "DoesNotExist",
},

多人游戏与中途退出者

涉及到等待页面的游戏在Mechanical Turk上实现困难,因为有些参与者会中途退出或直到接受任务之后一段时间才开始游戏。

为了减少这种事情的发生,参考 避免玩家卡在等待页面 中的推荐做法。

当你为MTurk创建了一个N个参与人的会话,oTree实际上会创建(N*2)个参与者,因为在某些MTurk worker开始但又退回了任务时需要这种冗余。

管理HIT

oTree提供了通过/拒绝任务,发送奖励,提前终止HIT等功能。如果你想要更多的功能(例如延长到期时间,与worker交互,发送自定义的奖励等等),你需要安装 MTurk command-line tools 或使用第三方 Manage HITs Individually 工具。

杂项

如果你使用其他服务如TurkPrime发布到MTurk,你可能无需按照本页面的步骤操作。