转转风控「违禁物品识别」 背后的那些事儿

语言: CN / TW / HK

一、导语

转转作为一家二手电商公司,用户可以自由的在该平台上发布商品。风控的其中一项职责就是保证用户发布的内容是“干净的”,所谓的“干净”指的是不能出现黄赌毒、违禁物品等内容。其中,违禁物品的识别是我们的重点。商品发布内容包括文本和图像两部分。早期我们主要通过文本关键词去识别违禁物品,但是文本的修改成本很低,导致我们往往疲于应对。因此,我们着手从图像的维度去识别违禁物品。违禁物品涉及的类别较多,包括人民币、危险武器、香烟等数十个类别。在算法架构上,考虑到业务需要快速迭代、控制成本、灵活添加分类的特点,我们选择最直接的分类模型作为基本的识别模块,构造一个可快速迭代、新增分类的模型架构。

物品图

二、业务难点

违禁物品问题与其他内容审核有明显区分,如涉黄这类问题有着明确的类别划分,即涉黄、非涉黄两类,类别数量固定所以后期优化也只是提升算法模型的准召。但是违禁物品类别不能说完全固定,随时面临产品同学新增分类的需求。其次,每日新增商品图片的数量巨大,这就导致线上情况较为复杂,模型极容易误召,精度优化困难。总结下来有下面几个主要问题:

  1. 优化某一类准召或新增分类时要保证其他分类效果不变;
  2. 每次新增分类都需将历史数据重新标注一遍,面对20w左右的数据量极大的耗费人力且耗时较长;
  3. 线上情况极其复杂,导致误召较高,精度优化困难;

基于这三点问题我们提出自己的解决方案,下面将进行详细阐述。

三、解决方案

3.1 整体模型架构设计

如果是简单的分类问题,我们可以直接使用多分类模型对商品图片进行分类。我们的早期方案也是这样做的,这样就直接面临上述的问题1和问题2,导致模型优化、新分类开发、数据标注难度递增,模型迭代周期越来越长,因此为了尽可能的解决这两个问题,我们设计了下面的方案:

模型整体架构

我们会针对每个分类单独训练二分类模型,上线时将所有小模型集成合并为一个大模型,因为小模型间参数不共享,这样在优化某一分类时就可以保正其他分类不受影响,只需更新大模型中对应分类的小模型权重就可以完成更新,同时在新增分类时也无需再对历史数据进行标注。但是,这样我们又会遇到两个新问题:

  1. 小模型参数量较小,是否能够达到初期多分类大模型效果;
  2. 随着分类数量的增加,小模型集成大模型的耗时、参数量会不断的增加;

首先,针对第一个问题我们使用小模型与初期多分类大模型效果进行对比,小模型采用的是efficientNet-b0,项目初期采用的大模型为inceptionResnetV2。经验证小模型效果完全可行,甚至因为小模型只需要考虑单一分类效果,优化更具针对性,效果会优于大模型效果。其次,针对第二个问题我们进行了耗时与参数量验证:

  • 实验参数设置
    1. batch size = 5
    2. input image size = 300 * 300
    3. 环境:线上gpu机器, 型号:TITAN V
  • 结果

    |模型 |集成数量|耗时 |模型size| |:-----------------:|:-----:|:-----:|:-----:| |inceptionResnetV2 |1 |115ms |219MB | |efficientnet-b0 |12 |132ms |198MB | |efficientnet-b0 |20 |208ms |330MB | |efficientnet-b0 |30 |302ms |494MB | |efficientnet-b0 |40 |484ms |659MB |

在做实验时我们初期多分类大模型分类数量为12个类别,可以看出当使用12个小模型时新集成的大模型与多分类大模型耗时与参数量相差不大。但是小模型数量不能无限的增加,在与工程侧沟通后我们将耗时上限定为200ms, 也就是使用上述方案我们最多可以应对20个类别。同时,20个小模型集成的大模型消耗的机器资源也在接受范围内。因此我们制定新的策略来处理这种情况:

模型策略流程图

通过上述策略我们将集成模型的数量控制在20个以内,采用这种折中的办法来达到模型推断耗时的要求。到此我们介绍完模型架构的整体设计。

3.2 数据标注策略

风控业务中一个重要的问题就是线上的情况极其复杂,需要模型在每天海量的发布图片中发现几百张甚至几张问题样本。这就对模型的准确率有较高的要求,否则我们的人工审核成员无法承受模型的推审量。因此,在开发模型过程中对数据集中负样本的多样性提出了较高的要求。在违禁物品识别项目开展初期,我们会标注尽可能多的负样本来保证准确率,往往需要大约20w量级的负样本。这就使得我们的标注成本很高,而且违禁物品模型的迭代频率较高,长此以往标注成本过高且迭代周期很长。基于此我们尝试使用active learning(主动学习)的方式来标注数据,降低我们的标注成本。

首先,我们来介绍一下什么是active learning。Active learning是机器学习(更普遍的说是人工智能)的一个子领域,在统计学领域也叫查询学习、最优实验设计。从定义中我们可以看出这里也是主要运用了统计学的知识和运筹学的知识。简单得讲,active learning就是一个帮我们标注数据的“模型”。

如上图所示,我们从标注人来顺时针看:

  1. 标注人,这个标注人首先对未标注的数据进行标注;
  2. 传入到我们已经标注的训练集中;
  3. 传入到机器学习的模型中,进行一个模型的学习;
  4. 导出无法标记的数据池;
  5. 通过一个选择策略,选择出一些高价值的数据(什么是高价值的数据呢?就是机器不确定的,信息熵在0.5左右的);
  6. 这些数据传给标注人,标注人进行标注,再重复之前的步骤直到我们的数据足够好为止;

以上是active learning基本思想,基于此我们设计了我们的标注方案:

  1. 标注少量的负样本(通常为1w+)和尽量多的正样本;
  2. 训练二分类模型;
  3. 测试模型准确率。如果满足需求结束,否则进行下面步骤;
  4. 使用步骤2训练好的模型给未标注的图片打分,筛选分数大于0.5部分的数据进行标注,我们认为这部分数据为高价值数据;
  5. 将新标注数据加入到数据集中,返回步骤2,直到结束;

通过上述方案,我们可以快速的收集负样本中的困难样本,这样我们大概只需要2w左右负样本就可以达到与之前使用20w负样本训练模型的效果,量级缩小了10倍,极大的节省标注人力成本,同时因为标注时间变短,缩短了模型开发的时间,可以更快的响应业务需求。

四、总结与展望

本文重点介绍了我们风控违禁物品识别模型的整体模型架构以及数据标注策略,目前该方案使我们可以快速、高质量的响应业务需求。由于当前方案类别过多时不太合理,后续我们计划改进我们的模型设计方案,在如何实现一个开集违禁物品分类模型问题上发力。


贾云龙,高级算法工程师,负责转转风控相关算法开发。