5.4.2 Turkit——为人类编程
土耳其机器人平台上的任务大多是可以分解成微任务的,并且可以让工人们并行操作。然而,现实生活中的很多问题是需要复杂的流程的,一部分人需要先完成一定的任务之后才去做下一步的任务,也有可能有一些任务需要反复地去做。也就是说,真正的任务可能会像计算机程序一样需要一个复杂的流程。那么,我们能不能将人类计算任务看作子程序,从而通过写代码而编排出复杂的流程,完成对人类的程序调用呢?
答案是肯定的。
Turkit 就是这样一个为人类进行编程的平台 ³²。在这个平台上,你可以像写普通 Java 程序一样写下你的代码。只不过,在这些代码中,有一些语句实际上是在调用人类计算。例如图 5-20 所示的这段代码。
其中黑体部分就是要由人类计算完成的任务。一旦运行到mturk.prompt 这个函数,Turkit 系统就会自动调用你在土耳其机器人市场上的账号,并提交一个任务让托客们去做。例如 prompt 这句提交的任务就是让这群土耳其机器人给出纽约市哪里好玩的若干建议,然后把这些建议串起来作为这一句人类计算命令的返回值。系统会自动等待,直到土耳其机器人市场的任务完成,再返回一个值给这个程序。接下来,这段程序才开始继续执行,然后到了 mturk.vote 这句则再一次调用土耳其机器人市场上的托客们,让他们进行投票。注意,第二次调用的托客们很可能和第一句调用的完全不同。
下面,我们举一个例子来看看 Turkit 平台是如何解决手写体识别问题的。图 5-21 是一张手写的纸条,测试者为了增加测试的难度故意写得比较模糊。
Little G, et al. TurKit: Tools for Iterative Tasks on Mechanical Turk, HCOMP '09: Proceedings of the ACM SIGKDD Workshop on Human Computation, 29-30, 2009.
之后,我们给 Turkit 平台编写脚本,让系统调用土耳其机器市场的人类计算来识别这些字符,之后再做一个循环,让托客们反复矫正这段识别的句子。得到的迭代结果如图 5-22 所示。
Little G, et al. TurKit: Tools for Iterative Tasks on Mechanical Turk, HCOMP '09: Proceedings of the ACM SIGKDD Workshop on Human Computation, 29-30, 2009.
这里展现的是第一个版本,以及迭代 6 次后 3 次的版本,我们看到经过迭代,这段文本的识别已经相当靠谱了。这就是人类机器人强大能力的展现。
当然,这个 Turkit 平台也有很多弊端,比如人类计算的实时性往往得不到满足,于是后来又有人提出了各种各样的改进方案,我们在这里不再赘述了。我们也可以预期,如果把游戏化也作为一种全新的激励方式引入进来,会进一步拓展 Turkit 平台的使用范围。
总之,Turkit 平台以及土耳其机器人市场是了不起的发明,它们开启了人类计算和众包的新篇章。可以预期,随着各种自动化设施以及人类计算的发展,对人类的调用也会越来越便利。Turkit 加土耳其机器人市场也是一台名副其实的使用人类占意资源来做功的机器,在未来,我们可以将人类的占意流加以引用,来完成更丰富的工作。
本书评论