鉴黄师是一个因为“扫黄打非”的需要而设立的特殊岗位。在互联网色情内容暴增的情况下其在净化网络的任务中扮演着非常重要的角色。
然而长期面对大量色情内容的刺激使这类工作者往往要承受心理、生理的双重压力。
机器学习和深度学习发展到了今天,造出的AI已经可以在下棋方面狂虐人类。设计个识别不雅图片的算法也不难实现。GitHub上开源了一款鉴定不雅内容的js库NSFWJS,你可以根据他的教程,搭建属于你自己的鉴黄客户端,甚至都不需要让文件离开用户的电脑。
NSFW:不适合在工作场合出现的内容(英语:NotSafe/SuitableForWork,缩写:NSFW)是一个网络用语,多指裸露、暴力、色情或冒犯等不适宜公众场合的内容。在给出含有上述内容的超链接旁标注NSFW,用于警告观看者。
贡献者的背景非常复杂,例如GantLaborde是InfiniteRed的首席技术战略家,JamonHolmgren是InfiniteRed的联合创始人。FrankvonHovenIII是InfiniteRed的软件工程师,SeanNam和GilbertEmerson则都是计算机专业的学生。
懒得动手的小伙伴,作者也给出了网页版的AI,只需要把图片上传到网页,只需几秒就能出来识别结果。
先给出github项目地址和网页地址:
网页地址:
https://nsfwjs.com/
项目地址:
https://github.com/infinitered/nsfwjs
打开网页是这样的☟
输入图片后的表现是这样的☟
嗯,算法还算准确,两个人物露了这么多的肉,还能准确识别这不属于不雅内容。
注意这五个标签的意思是:绘画(Drawing):无害的艺术,或艺术绘画。变态(Hentai):色情艺术,不适合大多数工作环境下观看。中立(Neutral):一般,无害的内容。色情(Porn):不雅的内容和行为,通常涉及生殖器。性感(Sexy):不合时宜的挑衅内容。
那我们再来一张,升级一下难度☟
不错不错,竟然能识别出来裸体的思考者不属于不雅内容,可以说厉害极了。
那....再来一张☟
色情艺术和绘画艺术几乎五五开,这让人有点摸不着头脑了!
数据
准确率如此优秀的模型,怎么可能少了优质的数据做支撑。
根据项目github的介绍,这个算法的训练来自一位名叫AlexanderKim的数据科学家贡献的数据集。
数据集地址:
https://github.com/alexkimxyz/nsfw_data_scraper
数据集一共将内容分为5类,分别是:hentai、sexy、neutral、drawings、porn,代表的含义和上文介绍的一样。
除此之外,还有每个脚本的作用也做了解释,使用者可以做到心中有数!
这些数据集可以用来训练图像分类器,使用CNN做出来的分类器,分辨上述的5种图像准确度可以达到91%。
数据集中,一共有227995张图片。其中,hentai类别中有45228张;sexy类别19554张;neutral有20960张、drawings有25732张;porn类别最多,有116521张。而这些图片,都以txt格式的形式存储图片的网页链接,以drawings类别为例:
注意:注意有少数图片的网址已经失效
另外,这个数据集的github项目,也对运行环境和以及运行方式做了介绍,需要的小伙伴可以去github地址查看:
https://github.com/alexkimxyz/nsfw_data_scraper
如何使用
根据网站给出的博客文章,只有三个步骤:1.获取代码;2.在客户端加载模型;3.对图像进行分类。
博客主要展示的是node风格的用法,首先引入NSFWJS,当然,需要事先获取ensorflowJS。
然后在JS文件中导入Node模块:
// Load files from the server to the client!constmodel=awaitnsfwjs.load('/model/')
//orjustuserequire('nsfwjs')
然后在客户端加载模型,这个“模型”是用来评价函数的。模型的文件可以下载,而且这些文件是4MB大小的分片,便于在客户端进行缓存。在示例中,作者将它们放在public/model/文件夹中。
加载模型的路径要注意,如果你的目录也和作者一样,可以☟
// Load files from the server to the client!constmodel=awaitnsfwjs.load('/model/')
现在,模型已经在客户端的内存当中了,接下来做的是对页面上的图像元素进行分类。
//Gimmethatimageconstimg=document.getElementById('questionable_img')
//Classifytheimageconstpredictions=awaitmodel.classify(img)//Shareresultsconsole.log('Predictions: ',predictions)
预测在默认情况下将返回5个分类结果,按照概率的大小进行排序!例如:
所有概率的加起来等于1。在使用的过程中,你可以标记关注概率超过0.6分类,或者仅关注概率值最高的那个。
另外,模型可以会出现一定概率的误报,原因可能是标记的数据存在偏差,随着对数据的校正,误报会逐渐减少,当然,这是一个渐进的过程。但是对于不雅内容,出现识别误差要比漏报好很多。
因为是开源的,模型一直在改进,你也可以加入算法改进的队列当中去哟~
最后,作者建议在做一些项目的过程中要打开你的想象力,正如下面的幻灯片说说的那样☟
"MachineLearningdoesthingsahumancando;trainedwithalotoftimeandalotofexamples."