10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

  • 2015-11-06
  • 本文字数:2403 字

    阅读完需:约 8 分钟

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 照片分类的质量,请随意标注你看到的任何未分类的照片。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-11-06 18:003607
用户头像

发布了 268 篇内容, 共 134.2 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

听说你会缓存?

架构师修行之路

redis 缓存 微服务

epoll服务器解析

菜鸟小sailor 🐕

socket编程

菜鸟小sailor 🐕

websocket

一致性 hash

garlic

极客大学架构师训练营

mongodb源码实现、调优、最佳实践系列-Mongodb网络模块源码实现及性能调优(一)

杨亚洲(专注MongoDB及高性能中间件)

MySQL mongodb 中间件 架构师 分布式数据库mongodb

Java中的String到底占用多大的内存空间?你所了解的可能都是错误的!!

冰河

Java 内存泄露 string 性能调优 内存溢出

设计数据库集群读写分离并非易事

架构师修行之路

分布式 微服务

如果只推荐一本 Python 书,我要 Pick 它!

Python猫

Python 学习 编程 程序员 码农

Week 4学习总结

balsamspear

极客大学架构师训练营

容器开发运维人员的Linux操作机配置优化建议

东风微鸣

Kubernetes 最佳实践 k8s入门

区块链赋能供应链金融|应用优势与四类常见模式

CECBC

区块链

食堂就餐卡系统设计

Griffenliu

关于编码

西贝

Java 编码

如何基于消息中间件实现分布式事务?我想说的都在这儿了!!

冰河

分布式事务 微服务 分布式数据库 数据一致性 海量数据

数据安全无小事:揭秘华为云GaussDB(openGauss)全密态数据库

华为云开发者联盟

安全 数据 加密

谁说AI看不懂视频?

华为云开发者联盟

视频 剪辑

终于,SM2国密算法被Linux内核社区接受了!

阿里云基础软件团队

架构师训练营第 2 期第一周作业

井中人

大明湖畔昇腾绽放,趵突泉里智能奔涌

脑极体

二十一、深入Python强大的装饰器

刘润森

Python

Week 4命题作业

balsamspear

极客大学架构师训练营

商用密码与区块链共推数字经济发展

CECBC

网络安全 数字经济

小熊派开发实践丨漫谈LiteOS之传感器移植

华为云开发者联盟

开发 IoT stm32

Java中String占用空间的评估标准

陈德伟

Java jdk 源码剖析

微服务的理想与现实

京东科技开发者

云原生

架构师训练营第2期-第一周-学习总结

井中人

架构作业:一致性hash

Nick~毓

在K8S Volume中使用 subPath

东风微鸣

Kubernetes 最佳实践

为什么Java容器推荐使用ExitOnOutOfMemoryError而非HeapDumpOnOutOfMemoryError?

东风微鸣

Kubernetes 最佳实践 jvm调优

一文读懂线程池的工作原理(故事白话文)

捡田螺的小男孩

Java 面试 线程池 线程池工作原理

C/C++最佳实践

jiangling500

c c++ 最佳实践

Yelp是如何使用深度学习对商业照片进行分类的_语言 & 开发_张天雷_InfoQ精选文章