人工智能(高中版)
上QQ阅读APP看书,第一时间看更新

2.5 创建数据集

现代的机器学习算法,如深度学习等,往往需要大量的数据,比如超过百万个数据点。如何确保能够构建这么大的一个高质量数据集呢?

首先是输入的采集。如果仅仅需要收集图片、文字,可以考虑从互联网上获取。但如果要获取含有隐私信息的数据,例如病历、生活习惯、日常决策等数据,就会非常困难。不过这一步通常面临的不是技术上的困难,因此这里不做进一步讨论。

接下来,假设已经收集了N条数据,记为X=(x1x2,…,xN)。那么,如何找到对应的Y=(y1y2,…,yN)呢?当数据量N很大时,单靠几个人的力量是远不足够的。这个时候,一个可行的方法是使用众包(cloud sourcing)。众包是通过互联网的力量,让成千上万的人共同参与对数据的标注工作。一般来会搭建一个网络平台,将数据的标注工作分成成千上万的小任务进行发布。

任何用户只要通过网络平台完成任务,便可得到对应的报酬。尽管众包的想法听起来非常简单,但要高质量地完成任务,还需要克服许多困难。例如,如何检测胡乱标注的情况,如何奖励认真准确但效率较低的用户,这些都需要良好的机制设计。

下面,图2.6中通过COCO数据集的标注流程简单地介绍一下众包的实现。

图2.6 COCO数据集示意图

在这个数据集中,需要同时标注图片中物体的类别与轮廓。如上所述,众包的做法是流水线化生产,将整个标注任务分成许多小步骤,让每个用户在同一时刻只做一个步骤。图2.7给出了COCO数据集的拆分方式。

图2.7 标注任务示意图

具体来说,在COCO数据集中,任务被分成了3步:第一步,标注图片中有什么物体,并将每个物体大概拖动到具体的位置;第二步,标注每种物体有多少个,并标注物体的中心;第三步就是根据这些中心对轮廓进行详细地描画。根据COCO官方的统计,采用这样的方法标注数据集,比Imagenet标注的代价小了许多。由此可见,设计科学的方法来标注数据其实是非常重要的。

除了众包,另一种常见的方法是填验证码。填验证码是很多网络在用户注册或者登录等行为时所要求的操作,目的是判断当前的操作是否为机器自动进行。reCAPTCHA公司从这个小地方看到了商机,成功地把这个任务转换成了数据集生成的工具。图2.8显示了一个具体的例子。

如图2.8所示,想要通过验证,用户需要正确填写图中的两个词。但其实这两个词中有一个系统是知道正确答案的,而另一个是从英文书中摘选的片段。系统希望通过以这样的方式,让用户帮其正确标注另一个部分未知的内容。如果用户将系统已知的词填对了,系统会认为这是一个人类用户,且该用户对另一个词的标注也是相对准确的。接下来,系统将所有人类用户对该词的答案进行统计和处理,并选出最后的正确答案。这个机制只占用单个用户的一点点时间,但是通过把全世界几百万甚至上亿的用户聚集到一起进行数据标注,它能高效地完成标注任务。

图2.8 ReCaptcha举例

当然,这个模式也不一定适合所有的任务。例如医疗、法律、教育等领域的任务需要很强的专业知识,因此无法简单地通过互联网的众包进行标注。如何对这些专业知识进行标注,是人工智能现代化进程面临的重要问题之一。