在项目中愉快地使用 tf 进行头像 / 留言审核、素材分类去重.etc

本人所在的项目是一个游戏项目,游戏本身以休闲竞技为主,数值最好的时候日活将近 2kw(自卖自夸),有一些社交类的内容产出,比如用户生活照(头像)、留言等。初期实现了一套审核后台,主要是应急给客服进行照片和留言审核,客服做的工作很简单,就是去给头像和留言一条条检查是否有涉黄涉暴涉政的内容,然后打标签调接口审核。量最高时每天 200w+ 的图片和超过 2kw 的留言数,给客服造成的压力可想而知。当时还没有接触 tensorflow,不过令人欣慰的是一开始客服这边花费的大量人力反而为后期深度学习的应用提供了宝贵财富(继续自卖自夸)。

所以项目内部决定引入机器学习一开始也是出于减少成本的需求,目标就是提高头像 / 留言审核的实时性,并保持甚至提高审核的精度。

起初因为没有人用过相关的深度学习框架或产品,查了一圈资料,和传统机器学习比较下来,深度学习的精度通常会更高,但是训练达到收敛需要的数据量也更多,但是因为我们不缺数据(再次庆幸),所以采用深度学习非常适合,各个框架比较下来,决定用 tf,因为:

  1. python API 入门门槛低,底层 c++ 保证性能。
  2. 大谷歌产品,功能和维护都有保障,stackoverflow 和 GitHub 讨论也较多。
  3. 完善的官方文档。
  4. 虽然当时是 1.0 版本,但是配合 dashboard,能够给训练过程增加可视化,减少可视化的额外工作。
  5. preview 中提到融合 keras,可以进一步提高框架的易用性。
  6. 之后在上海参加了 tensorflow summit,对 eager execution 和分布式训练相关进展激动不已。

于是先从官方文档上的例子入手,对比跑了几个 LR 和深度学习的例子,了解到基于 tf 使用深度学习是多么的简单易用,精度相比传统机器学习方法是多么的高自信心提高不少。同时同步学习吴恩达的机器学习课程,视频教程的内容比较适合新手,一些推导过程非常清晰明了,但是我个人觉得最有价值的反而是课后习题,比如基于 yolo 的对象检测算法、基于卷积神经网络做人脸识别和人脸验证、将绘画风格迁移到照片上等。

基于吴恩达机器学习课程的编程练习里人脸验证这部分功能,发现比较适用于验证美术素材是否重复,或者风格是否太相似,因为游戏内的素材以 “球形” 皮肤为主,随着时间推移素材量越来越多,美术在设计的时候可能没有意识到这个素材和以前的某个素材风格很相近。具体实现原理是使用 Inception 网络,将 96x96x3 的原始图片转成 128 维的向量保存到 h5 文件,当有新的素材提交时,将新素材的 128 维向量和库中的列表一一对比,计算 L2 范数,作为相似度的一个度量,当 “相似度” 在 2 以内时,则认为素材太过相近。实际使用时,可能还需要经过人工审核的过程,但一般情况下准确度能达到 95%以上。为了便于操作,我们基于 KODExplorer 和 yii2 框架进行了简单的二次开发,可以更简便的上传管理素材,见截图:

image

为了便于线上部署和使用,实际的模型部署在了 tf-serving,使用 docker 进行业务托管,使用 uwsgi 进行接口封装,相关代码:https://github.com/allenwxf/ART-MATERIAL-CLASSFICATION。

基于 Inception 网络和 ResNet 网络的尝试,使用之前客服标注的用户照片信息以及从网络爬取的一些人物比如明星照片,训练出来的模型初步召回率达到了 97%以上,准确度 95%以上。

留言审核部分主要涉及文字,基于神经网络的处理方式一般是先把文字分词转成词向量矩阵,再通过基本的后向迭代训练就可以得到不错的结果了。我们一开始并没有采用深度学习的方式训练模型,而是利用结巴分词得到词向量,再基于 td-idf 基于关键词对留言进行审核,准确度能够达到 90%以上。之后利用 deep&wide 模型,将每条留言转化为词向量和 one-hot 序列,训练之后准确度达到了 97%以上。最初接触 deep&wide 模型也是在 tensorflow 官方公众号上推的一篇通过红酒品酒词预测价格的文章入手的,我自己依葫芦画瓢做了一些改进,通过品酒词和价格预测葡萄品种,模型训练好之后部署到 docker tf-serving,再利用微信小程序简单做了个界面(请不要介意界面风格,纯后端):

image

相关代码:

最近使用 python 的 crawler 库把 wine.com 上的酒标和相关数据都爬下来了,打算业余时间在红酒这块做一些有意思的应用,比如用户拍一张正在喝的酒标,推荐一些 “臭味相投” 的酒;用户上传一段品酒词,推荐一些风格相近的酒;用户哼一段小曲儿,猜心情推荐一些红酒;输入一款酒,和一些历史名画或者音乐结合一起来,做风格迁移等等,这个脑洞比较大。

总的来说,tensorflow 让我觉得在使用上得心应手,而且特别有乐趣,感谢谷歌。


分享人:wxf,发帖时间:2018-11-14 11:38:34