Yelp是如何使用深度学习对商业照片进行分类的

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

Yelp是美国最大点评网站,拥有世界各地的Yelper上传的成千上万的照片。各种各样的照片给进入当地的商业提供了一个丰富的窗口。通过开发一个照片理解系统使Yelp能够创建有关个人照片的语义数据。跟Yelp第一次在基于内容的照片多样化方面所做的尝试一样,由系统生成的数据正在增强Yelp近期推出的封面照片多样化、标签式照片浏览等服务。

构建一个照片分类器

对于理解照片中的模棱两可的目标,其实有许多不同的方式。一开始,为了帮助简化Yelp的问题,Yelp只专注于将照片分类为几个预定义的类。之后,Yelp又只专注于关于饭店的照片类别。

事实上将照片进行分类,就可以将其当做机器学习中的分类任务,需要开发一个分类器,Yelp首先需要做的就是收集训练数据,在图片分类任务中就是收集很多标签已知的照片。Yelp收集这些信息可以通过几种不同的方式:

  • 照片标题:在很多照片的标题中都包含代表照片自身含义的词汇,例如,很多“菜单”照片的标题中包含单词“菜单”。为了识别这些关于食物的项目,Yelp依靠自己的菜单结构(例如, http://www.yelp.com/menu/gary-danko-san-francisco/ ),它保留了每种食物的商业名单。Yelp发现,将列表中的食物项目与照片的标题进行匹配产生了一个高准确率的数据集。

  • 照片属性:当上传照片到Yelp上时,用户允许标记照片的一些属性,虽然它们并不总是准确的,但仍然可以很有效地帮助照片分类。

  • 众包:通过众包可以让大众自动参与照片的标注,并同时纠正一些错误的标注。Yelp已经发现,通过众包Yelp通过合理的成本(在时间和金钱)获得了质量总体良好的标签。众包体现了一种群体智能。

一旦Yelp有了标签数据,Yelp就开始采用“AlexNet”形式的深度卷积神经网络(CNNs)来识别这些图片(因为这种方法是一种监督学习方法,非监督学习目前仍然是深度学习的难点方向)。CNNs是由多个卷积层组成,ReLU层、pooling层、局部响应正则化层和全连接层。Yelp的CNN被建立在基于Caffe架构的AWS EC2 GPU实例上。Yelp喜欢Caffe,因为它简单易用、高性能、模块化、开源、还一直在不断完善。为了应对Caffe的软件依赖,Yelp使用Docker封装了Yelp的CNN,以便它可以更容易地部署。

Yelp还创建了抽象,以确保Yelp的CNN可以很容易地与其他形式的分类器进行集成,包括CNN的不同实例。如下图所示,Yelp的基线是一个“Caffe分类器”,它通过Caffe的方式运行CNN;它是一个抽象分类器的一种特殊形式,可以采取不同的信号,并执行不同的分类算法。Yelp目前的“facade”分类器,是一个集成分类器,采用了不同分类结果的加权平均。如果Yelp决定进一步集成依赖于其它信号的新的分类器,这将让问题变得更加简单。

深度学习

Yelp在一个均匀黄金分割的2500张照片的测试集上进行试验,Yelp目前的“facade”分类器的整体精确度达到了94%,召回率达到了70%。根据Yelp的描述,虽然这些数字绝对可以再提高,但Yelp发现对于下面描述的应用它们已经足够了。

照片分类服务

Yelp使用面向服务的架构(SOA),Yelp做了一个RESTful照片分类服务,用来支持现有的和即将推出的Yelp的应用程序。由于服务预计拥有不止一个分类器(例如,不同的版本或为不同类型的业务),该服务API使用一个分类器ID,一个行业ID,以及可选的类,然后返回所有属于该行业的照片,其已经通过分类器被归类:

深度学习

Yelp使用一个标准的MySQL数据库服务器来承载所有的分类结果,所有的服务请求可以通过简单的数据库查询被处理。为了避免更昂贵的实时分类,因为Yelp目前的应用并不取决于最新的照片分类,所以Yelp只执行线下分类。该架构如下图所示:对于每一个新的分类器,Yelp扫描所有的照片,并且将分类结果存储在一个数据库中。扫描在计算上消耗很大,但通过将分类器在任意多的机器上进行并行处理,Yelp可以减轻这一点。扫描结束后,Yelp会每天自动收集新的照片,并将它们发送到一个进行分类和数据库负载的批次中:

深度学习

应用:封面照片多样化

一旦有了照片分类服务,就可以有效地增强Yelp的许多关键功能。Yelp的业务详细信息页面显示了一组“封面照片”,基于用户的反馈和某些照片的属性,它们能够通过照片评分引擎进行推荐。但是,目前Yelp的封面照片存在一个典型问题,即所选的照片缺乏多样性,例如,如下图所示,所有封面照片都是关于食物的(拉面),用户无法看到其他方面的照片,除非他们点击“查看全部”按钮。

深度学习

通过照片分类服务,现在就可以让封面照片变得多样化,Yelp可以容易地确定最高得分的非食品的照片,然后将其纳入封面照片。通过严格的A / B测试,Yelp已经证实饭店的浏览者更愿意看到一个显示突出的“食品”照片和突出的“非食品”照片,以及两个小“食品”的照片和另外两个“非食品”照片,如下图所示。多样化大大增加了Yelp用户与照片之间的互动。

深度学习

应用:标签式浏览照片

因为任何人浏览Yelp照片都是在有了解之前,大部分来自于饭店的Yelp照片都是食物。但Yelp从用户中得到反馈,他们发现用户关心的可不仅仅是食物。有些人使用Yelp的图片用来检查一个特殊事件的气氛或导航到一个第一次去的地点,而其他人使用Yelp的照片用于一些更严肃的应用,如发现餐厅是否能容纳残疾的顾客。随着标签式照片浏览的推出,所有这些任务现在都变得更容易、更高效。

Yelp表示,标签式照片浏览是他们的照片分类服务现在提供的最显著的应用。照片现在在各自的标签(类)下进行组织;从下图可以看出,跳到你正在寻找的准确信息现在变得更加容易。

深度学习

下一步是什么

任何机器学习系统都不可能是完美的。Yelp表示,如果你想帮助提高Yelp照片分类的质量,请随意标注你看到的任何未分类的照片。

via:InfoQ

End.

随意打赏

提交建议
微信扫一扫,分享给好友吧。