DannyDong 2019-02-23
Christopher Bonnett 来自Summer 2016 New York Data Science Fellowship ,后为Insight中的一员。在Insight期间,他曾经在Lynks项目中,使用深度学习与自然语言处理等方法对电子产品进行分类。目前他是alpha-I公司的一名研究员。
我在Insight 公司工作期间,Y-combinator公司启动一个叫 Lynks的创业项目,当时我是这个项目的技术顾问。这个项目的目的很明确,就是为了让那些远在埃及的顾客,也可以在美国的电子网站上购买到那些最时髦的产品。这个项目价值巨大,因为先前,美国的电商不会接收海外订单。Lynks 项目的具体运作流程如下: Lynks 首先以消费者的名义,将他们要购买的商品放在一个“通用购物车”里,然后将消费者订购的商品运送到位于Delaware的仓库中.之后将用户的订单进行整合分类打包,将最终打包好的商品送到终端买家手中.
除了通过Lynks 仓库中转几天的商品外, Lynks 本身并没有库存。因此在理论上,Lynks 的商品除了那些消费者清单列表上的商品,没有任何其它东西。所有的商品都需要分类打包,但目前这一工作是靠人力完成的。为了使这一流程可以自动进行,我设计了一个模型来解决这个分类问题。
首先我们应进行数据采集,采集的数据包括产品的图像及产品的相关描述信息。具体信息如下所示,可以看到下面的实例中包含Lynks添加的标签。
如图所示,图片信息与文字描述信息差异巨大。以图片信息为例,图片中的商品可以以任何形式展示,甚至包括穿在模特身上或纯衣服图片(即没有人穿时,衣服呈现的效果).同样,我们的文字描述形式也是多种多样的,细节描述的详尽程度也不相同,有的可以包括服装品牌信息,有的包含一些特定的描述。上述信息从结构到内容的多变性,是我们解决分类问题的一大挑战。在构建分类模型时,以上这些因素都是我们需要考虑的。
我们的项目目标很明确,给定一幅相关商品的图像和一段简短描述,预测Lynks员工会将该商品分为哪一类。但这其中也有不明确的地方,那就是如何对类别按照层次进行划分。原则上,如果我们能够构建一个理解并能够使用这种结构的模型,那么其分类效果必定会很好。假定我们构建了一个这样的原始模型。这个原始模型中忽略了类别之间的层级结构,同时假设这些类别是相互独立的。换句话说,我们在不知道类别‘Clothing>>Men>>Top’与类别‘Clothing>>Women>>Top’关系相近的情况下,预测商品属于‘Clothing>>Women>>Top’类。这样做尽管效果不会特别理想,但却简化了算法并且可以实现快速迭代。
这种算法最终可以将商品分为99类,但这些类别之间的数据是极不均衡的:即有的类别商品数据多,而有的类别商品数据却很少,甚至只有几个。在我们的模型中,我们仅对排名前10的类别商品进行处理(这类商品已经占到总数的50%)。之所以选择排名前十的商品,主要有两个原因:一、这些类别的数据较多,二、商品分布比较均匀。这样一来,我们就可以比较容易的找到一个有效的分类模型来对这些商品数据进行分类。
由于图片信息与文本信息具有互补性,因此我打算将图片信息与文本信息融入到一个机器学习模型中。目前可采用的模型有多种,最终我采用了一种灵活、但能满足Lynks 公司项目需求的模型。
理解图像信息很难。尤其当图像有显著变化的时候,这会变得更难。目前用于图像分类最好的方法就是卷积神经网络(CNNS)。卷积神经网络在图像识别领域处于主导地位,这种方法的出现使得图像识别的准确率达到甚至超过了人类的水平。
卷积神经网络训练起来很难,因为训练一个模型不仅需要计算能力强大的GPU,还需要海量的数据。尽管目前我们数据不算少(大概有5000个训练样本),但还是没法与 Image-Net数据集相比,这个数据集有1000个类,120万个训练数据。因此我们可以利用 预先基于Image-Net的数据集训练好的神经网络模型。这样做是合理的,因为上述模型经过预训练后,已经获得了从原始图像里抽取有效特征的能力。
将预训先训练好的模型,应用于其他领域,进行学习的方法,我们称之为迁移学习。迁移学习的基本思想很简单,在一个训练集上训练一个模型,然后将训练好的模型应用于另一个数据集中。关于怎样将迁移学习应用到实际当中的细节问题,在这我就不细讲了,如果大家对这个比较感兴趣,可以关注François Chollet的教程,在教程中,他给出了一些关于迁移学习的指导。正如他所指出的一样,我使用了François’ Keras的深度学习库,这个库提供了一个已经预训练好的VGG-16卷积神经网络接口。想用的话,直接调用相关接口就可以了。直接调用这个VGG-16卷积神经网络接口,简直就是一个明智的选择,因为在2014年的Image-Net比赛中,VGG CNN架构性能最好,取得了第一名。
相对于图像数据,文本数据处理起来要更简单一点。标准的方法就是将文本用词袋模型表示,然后使用逻辑回归模型对文本进行处理,这种方法效果不错,因为出现的单词往往包含着很多的信息量。
但是,不同的文本包含的信息量是千差万别的。有的时候我们只需要知道一些简单的文本信息,就可以确定商品的类别(如:‘men’s shirt’),但有的时候文本中包含的信息量不是太多,导致我们无法根据文本描述对商品进行分类。例如,一件商品的描述中包括‘bronx 84 graphic t’,但由于这个短语中不包含任何性别信息,因此仅仅依靠这个短语,你很难分清这个产品到底是男装还是女装。正如我们前面所讲,在大多数情况下,我们的文本还是包含足够的信息量的,到时候我们可以采用文本信息与图像信息结合的方式来提高我们的模型性能。
为了生成最终模型,这里我构建了一个神经网络模型,这个模型包括两部分,一部分为处理图像的卷积神经网络,一部分为处理词向量的部分。
上图就是图像+文本处理的模型结构。图片的左上部分是用来处理图像的卷积神经网络,右上部分是用词袋模型表示的文本向量。图形与文本集合做为最终模型的输入,模型输出就是商品所属类别(上面为输入,下面为输出。)
VGG神经网络负责对图像部分的处理(左上部分),一个简单的全连接神经网络负责对文本进行处理(右上部分),最后一层将两个模型的结果结合在一起做为一个新的输入,其输出就是商品的类别。
正如我前面所讲的那样,我将使用一个即能处理图像又能处理文本的神经网络模型来对商品进行分类,这个组合模型要比那些单独处理图像或者文本的模型要更加庞大、更加复杂。为了理解与判断我们模型的效果提升程度,我们将文本模型、图像模型、组合模型分别对商品数据进行处理,比较三者之间的准确率。比较结果如下。
结果很有意思,纯文本模型要比纯图像模型效果稍好(同时对文本进行处理,要比处理图像容易得多)。然而从结果上来看,图像特征本身就是一个好的分类依据。虽然两者从不同的角度对商品进行分类,但是分类效果却差不多,所以我们有理由相信将两者结合后,分类效果必将得到提升。事实也是如此,当我们将两个模型进行融合后,我们发现分类效果提升明显。
为了达到Lynks的项目需求,我尝试对神经网络的层数和隐藏单元数进行微调。此外,优化的最终手段,在于训练得到一个比手动选择效果更好的卷积过滤层(convolutional filters)。这里我们使用的VGG 网络模型,是在Image-Net数据集上进行预训练的,这一数据集包含1000余个类别,但这其中没有服装或者时尚物品的相关类别。为了使预训练的网络适用于电子商务数据,我们对预训练网络的最后几层调整,使它能够提取那些来自于训练集商品中的特征,这一步我们称作是微调(fine tuning)。我选择对网络的最后3层进行调优。经过调优后,我们的商品分类准确率又提高了一个百分点,达到94%。具体结果如下图所示。
将电子商品中的图片与文本信息以不同的方式进行组合,这是一件十分有趣的事。在考虑如何进行模型组合的过程中,数据数量、内容的多样性都是难以处理和解决的的挑战。但不管怎样,最终我设计的模型成功的降低了Lynk的人力成本。Lynks 项目组也对这一结果比较满意,目前他们正在考虑将我的模型融入到他们工作中去,以提高其工作效率。
如果想知道更多技术和探索过程中的细节,可以查看这里的原始版本(http://cbonnett.github.io/Insight.html)。
作者:克里斯托弗·邦尼特(Christopher Bonnett)原文地址:https://blog.insightdatascience.com/classifying-e-commerce-products-based-on-images-and-text-14b3f98f899e#.t6kdpaees(*本文由于AI科技大本营编译,转载请联系微信 1092722531)