写点什么

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:003477
用户头像

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

关注

评论

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

没有一个人喜欢被改变 ——阅读《高绩效教练》有感

研发管理Jojo

倾听 敏捷教练 引导和教练

阿里云 Serverless 助力企业全面拥抱云原生

阿里巴巴云原生

阿里云 Serverless 云原生 企业

云原生体系下 Serverless 弹性探索与实践

阿里巴巴云原生

阿里云 Serverless 云原生 弹性 SAE

爱奇艺TFServing负载均衡问题研究及改进实践

爱奇艺技术产品团队

如何使用 Java 代码给图片增加倒影效果

汪子熙

Java API 图片处理 11月日更 Java图片

[Pulsar] Batch Messge的基本原理

Zike Yang

Apache Pulsar 11月日更

架构训练营 - 模块 5 作业

焦龙

架构训练营

KubeMeet 深圳站回顾:应对云原生边缘计算落地挑战

阿里巴巴云原生

阿里云 Kubernetes 云原生 线下活动

如何在P4中管理Unreal Engine 代码

龙智—DevSecOps解决方案

版本控制 游戏开发 版本管理 游戏引擎 虚幻引擎

java开发之DOS命令学习及运行环境配置安装

@零度

java开发学习 DOS命令学习

1 分钟 Serverless 极速抽盲盒,自己部署自己抽!

阿里巴巴云原生

阿里云 Serverless 云原生

16张图解锁Spring的整体脉络

4ye

Java spring 程序员 后端 签约计划第二季

react源码解析3.react源码架构

buchila11

源码 React React Hooks react源码

react源码解析4.源码目录结构和调试

buchila11

React React Hooks

Linux学习方法《Linux一学就会》Centos8软件包的管理与安装

侠盗安全

Linux linux运维 运维工程师 云计算架构师

瞰见 | 刚刚,暴涨的 GitLab 给我们带来了怎样的开源思考?

OpenTEKr

狄安瞰源

微博评论架构分析

🌾🌾🌾小麦🌾🌾🌾

架构实战营

dart系列之:时间你慢点走,我要在dart中抓住你

程序那些事

flutter 架构 dart 程序那些事 11月日更

大厂算法面试之leetcode精讲9.位运算

全栈潇晨

算法 LeetCode

内存数据库的分布式架构提升之道

鲸品堂

数据库

Perforce用户文章转载:每个游戏从业者都应该学学P4

龙智—DevSecOps解决方案

版本控制 游戏开发 版本管理 perforce 游戏厂商

PackML从会到不会——状态机(1)

陈的错题集

标准化 PackML

移动计算云分布式数据缓存服务,实现快速可靠的跨区域多活复制

华为云开发者联盟

可用性 云数据缓存 跨区域多活 无冲突复制数据类型CRDT

应对 Job 场景,Serverless 如何帮助企业便捷上云

阿里巴巴云原生

阿里云 Serverless 云原生 函数 Job

架构实战营模块五作业

孙志强

架构实战营

百度商业大规模高性能全息日志检索技术揭秘

百度Geek说

软件架构

phpstudy开启Apache服务显示80端口被占用

咿呀呀

PHPStudy

大厂算法面试之leetcode精讲10.递归&分治

全栈潇晨

LeetCode 算法面试

服务API版本控制设计与实践

vivo互联网技术

API 服务器端开发 客户端开发 迭代

Elasticsearch云生态下的开源共生之路

大咖说

云计算 elasticsearch 开源

直播预告|数以智用——大数据应用探索与实践

智联卓聘

大数据 数据管理 线上沙龙

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