前言
本文尝试用通俗的语言为大家介绍人工智能是如何实现“黄图”的识别的,全文没有复杂的公式和晦涩的术语,适合初级技术人员和有强烈好奇心的读者。如果有兴趣对文章内提及的一些人工智能的基础概念(神经网络,梯度下降,卷积等)深入研究,网上资料已经很多了,可以自行查阅。(注意:由于演示需要,本文可能包含一些尺度较大的图片。)
色情作为人类最基本欲望的体现之一,一直伴随着人类社会的发展而以不同形式展现着。互联网时代的到来也给色情的表现形式带来了巨大的机会,有文章说互联网上的流量有50%都是与色情相关的,我不能证实这个数据的真实性,不过读者可以在日常生活中自行体会。
当然今天我们不讨论色情产业的合理性,只专注于从技术角度研究如何鉴别互联网上的这些数字内容。接下来我结合网易信息安全部门的实践经验来解释如何做到这件事。
鉴黄的历史
在计算机的“远古时代”,其实也就是十几年前吧,我们识别黄图的做法简单粗暴:人工审核。别小看了这个方法,其实针对当时的网络环境(带宽小,产品少,图片数据也少),效果还是很不错的。一天几万的图片量,安排几个人肉眼盯着看,发现有不良的图片人工删掉就好了。
后来,互联网产品普及率高了,网络数据量暴增,一个产品一天出现几百万的图片量也是很正常的情况,这个时候想要靠堆人力去完成审核几乎不可能了。(再说,有多少产品可以支撑得起几百上千审核人员的成本呢)。幸好相应的计算机视觉技术也有进步了,我们用肤色识别算法过滤掉一些没那么多“黄色”内容的图片,剩下的再进入到人工审核,可以大大节约审核量。据统计,经过机器肤色识别过滤后大约只有20%的图片还需要人工审核。
等到移动互联网普及,各种类型的网络数据量暴增,人工审核连20%的数据量也无法承受了,加上视频、直播等业务和数据的爆发式增长,我们迫切需要一个更加有效的方案来解决审核的问题。很自然的,我们也紧跟人工智能的技术热潮开始研发机器学习的鉴黄系统,并且取得了显著成果。
人工智能鉴黄原理
辨别一张图是不是黄图,从机器学习的角度看,本质上是一个分类问题:给定一张图片,让机器判断是不是“黄图”。我们要做的就是研发一个“分类器”,它能根据输入的图片计算出该图片属于“黄图”类别的概率,然后再根据这个概率值输出一个“是”或者“否”的结果。众所周知,电脑擅长的是数学运算,所以我们要把这个“分类器”先抽象成某种数学模型,这样才有可能用电脑来运算。
为了方便理解,我们把数学模型定义为:y=f(x)。即给定图片x,我们要找到一个函数f,通过计算f(x)可以得到这个图片的黄图概率y。很简单吧!理论上这个数学模型可以解决所有的分类问题。好了,那这个看似简单的工作到底应该怎么实现呢?我们按下面的步骤慢慢来:
第一步:给出定义。既然你要教机器分类,自然要有明确的分类标准,如果标准都没有,那机器计算出来的值就没有意义了。很自然的,我们先把露点的图片归类到黄图,再明确一点,就是男性露下体,女性露乳房或者下体的图。不过,多年的实践经验告诉我们只根据是否漏点来判断图片类别是远远不够的。比如这张图:
【介于图片尺度问题,无法公开,大家可以想象一张裸体XXOO但不露点的侧身图】
(图1: 没露点的色情)
它并没有露点,但是很明显不能认为它是一个正常图片。(不考虑政策监管因素,仅从学术研究的角度讲,也应该把这个图片归类到黄图的一种)。反之,也并不是所有露点的图片都是黄图,比如图2:
(图2 :特殊但合理)
然而,意识到这些仅仅是定义工作的开始,在真实世界的数据形态和政策法规的约束下,更多的图片需要被分类,比如图3、图4等等:
(图3: 此处想象一张低俗但不漏点的图片)
(图4 :泳装)
通过上面的例子是为了让大家明白,仅靠“黄图”这样一个笼统的定义是无法满足实际情况的。我们得把一个“二分类问题”演进成更加复杂的“多分类问题”,并且尽量把定义和标准清晰化,这显然是一个庞大和繁杂的工作。我们组建了专门的运营团队对数据和政策法规进行研究,根据实际情况积累了许多的分类定义和标准。
第二步:收集样本。有了定义之后,我们就要根据定义来收集样本数据。幸好我们之前多年的审核工作积累了大量的图片数据,其中有很多经过了人工审核确认是黄图的,所以我们从里面筛选出部分图片作为训练的数据。由于定义的分类数量非常多,我们不得不开发专门的分类标签系统并组建额外的人工标注团队,把训练数据做进一步的筛选。训练数据的质量好坏对效果的影响非常大,所以我们必须很有耐心地投入到训练数据准备的工作中。这个工作消耗了大量的时间和人力成本,并且还一直在持续进行中。由于都是违禁的图片,为了避免二次传播,我们也难以像ImageNet一样通过众包的形式来完成。
第三步:训练模型。回到一开始的数学模型y=f(x),训练模型的目的就是为了得到f。我们通过前面的两步得到了标注好的图片样本集,把标注的结果定义为y*,图片为x,现在我们要想办法找到一个f,可以对样本集中所有的图片计算得到的y跟y*最接近,也就是得到使|y- y*|的值最小的f。我们可以把|y- y*|定义为损失函数。如何找一个函数的最小值在数学界已经有成熟的算法。一般采用梯度下降法去寻找合适的f。
虽然所有图片数据在电脑看来也都是0和1的二进制数据,比如下图就是前面图1的二进制形态的片段。但是直接拿这些0和1的数据计算,容易导致运算量过大,图片特征提取的效率和准确度都难以保证。
(图5 :图片的二进制值)
如何高效地提取出特征数据来代表图片x是很关键的一步。技术上称之为特征提取。幸好许多前辈科学家已经做了大量的研究,近些年来,基于深度学习的神经网络模型在各种图像识别的比赛中获得了突破性的进展。所以我们选用了CNN(卷积神经网络)、GoogLeNet、ResNet(残差网络)三种深度网络模型结构作为研究的基础。通过这些模型,我们就可以更加高效地把图片数据转变成了可以运算的数学模型,使我们可以更快更好地得到f。
当然实际情况下f是一个非常复杂的函数,为了简化运算,我们把f拆分成了fn(fn-1(fn-2(f…(f2(f0))…)),每一个f可以理解为神经网络的一层,n个f就是n层,这种层层递进的关系就是算法名称中“深度”的由来。理论上我们可以搭建任意深度(层次)的神经网络模型。把f拆分之后,我们用倒推的办法就能得到每一层的f。
我们以图4为例,经过不同层次的f运算得到的结果,如下图6:
(图6: 不同网络层次特征结果)
每一个层次的f可能会得到许多特征结果,有一些是模型对应特征的响应(对应图中有高亮的部分),有一些没有响应(图中黑色部分)。最终经过所有层级的f运算所得结果经过Sigmoid函数映射到0-1之间,得到的就是y值了。y越接近1,那么它命中类别的概率就越大。演化到多分类的问题上,y就是一个多维度的数,理论上每个维度都可以得到一个0-1之前的值,我们按照一定算法选择某一个维度的y作为结果输出即可(一般按照y值大的)。
第四步:验证。经过前面3步运算我们得到了f。(其实是n层神经网络的参数,也就是所谓的“黄图”模型)。f的可视化结果可以参看图7(以GoogLeNet为例),图7展示了10个224*224的RGB图片作为输入,在第二个卷积层的时候就需要64*3*3*64=36864个f的参数。当然这个是在计算一个非常简单的图示情况下的数据量,实际情况的输入数据和网络深度都要远远大于图片所展示的。我们常说的算法调参,就是指调整这些f的上万甚至上百万个参数。
(图7 :神经网络结构模型)
接下来我们需要有一个验证的图片集来测试f的效果。由于f是根据训练集生成的,那么直接用训练集不足以反映它在真实环境下的效果。得益于我们大量的历史样本数据集,我们专门挑选一些图片作为验证使用。通过一个自动化的测试平台不停地对迭代出来的f做验证。在准确率达到更优的程度之后再更新上线。
人工智能鉴黄现状
我们经过不断迭代,得到了越来越精准的f(模型),在验证图集上也达到了99.8%以上的准确率。那么,我们就可以高枕无忧了么?恐怕还不行。
首先我们考虑真实世界里的场景:虽然互联网产品类型多样,但产品里面黄图的比例往往很小,一般都是万里挑一甚至是十万分之一的级别(明目张胆玩情色的产品在中国活不久)。我们假设10k张图像中有1张是黄图,我们的系统准确率为99.9%,即1k张图像会判错一张,那么我们计算伪阳性率(False Positive Rate),即判断为违禁图像集合中正常样本的比例为:
即11张判定为黄图的结果里面竟有10张是误判!不过用户也不用过分担心,统计为误判的图像,多数情况属于一些边界的情况,实际使用效果会更好。
其次,深度学习的模型会有一些奇怪的行为表现,比如相关论文([1] Goodfellow, Ian J., Jonathon Shlens, and Christian Szegedy. "Explaining and harnessing adversarial examples." arXiv preprint arXiv:1412.6572 (2014).)里面描述的情况(图8)
(图8)
一张原本能被正确识别的大熊猫图像,在添加人眼几乎不可辨认的微小变化之后,竟然以99.3%的置信度被判别为长臂猿。
是神经网络结构有问题吗?不是,这个实验是基于获得ILSVRC竞赛冠军的GoogLeNet网络进行的。
是训练数据的问题吗?也不是,网络是基于目前最大的物体识别分类数据集ImageNet训练的。
也就是说,对于一个卷积神经网络,出现难以解释的正常图像误判是普遍现象。即便是在实际应用或比赛中取得满意效果和优异成绩的算法,也会犯反人类直觉的“低级”错误。
基于以上的原因,在真实的场景下,我们往往采取机器审核+人工审核的方式来做到双重保险。
结语
以上通过尽量简单的描述说明了网易云安全(易盾)反垃圾系统在识别黄图这个工作中所作的努力和成果。但是也提到了许多的挑战,比如反人类直觉的低级误判问题,对于边界条件的图片识别准确率问题等。技术的进步是无止境的,网易云安全(易盾)实验室的算法工程师们也一直在努力。目前,网易云安全(易盾)已经面向企业市场,我们每天会为中国的互联网过滤1亿条左右的有害信息。除了智能鉴黄,网易云安全(易盾)同时开放有广告过滤、暴恐识别、谣言检测等内容安全服务,验证码、营销反作弊、应用加固等业务安全服务,以及DDoS 防护、SSL 证书管理等网络安全服务。