炼数成金 门户 商业智能 深度学习 查看内容

美国的“大众点评网”Yelp如何利用深度学习对美食照片进行评分

2016-12-30 17:33| 发布者: 炼数成金_小数| 查看: 16006| 评论: 0|原作者: 足下 译|来自: InfoQ

摘要: Yelp的数据库中已经存储了几千万张相片,用户们现在每天都会上传大概十万张,而且速度还在不断加快。事实上,我们发现相片的上传增长率大于相片的查看率。这些相片反映着本地商业的内容和质量,提供了非常丰富的信息 ...

网络 工具 算法 模型 神经网络 方法

Yelp的数据库中已经存储了几千万张相片,用户们现在每天都会上传大概十万张,而且速度还在不断加快。事实上,我们发现相片的上传增长率大于相片的查看率。这些相片反映着本地商业的内容和质量,提供了非常丰富的信息。

关于这些相片非常重要的一方面,就是展示出来的内容的类型。在2015年8月,我们上线了一套新系统,用于将传统饭店有关的相片分为食物、饮料、外观、内景和菜单等几大类。从那以后,我们又为咖啡店、酒吧等类似的商店上线了类似的系统,以此来帮助用户们尽快发现他们想要寻找的那些相片。最近的一段时间,我们又在研究如何进一步提高用户的满意度,具体方法就是给他们看更多漂亮的图片,改进我们的相片排名系统。

理解相片的质量
对比相片的质量,看起来很像是一件非常主观性的工作。喜欢哪张相片或不喜欢哪张相片,有许多因素会影响这样的决定,而且依正在做搜索的用户个人不同,结论也会有所不同。为了能为Yelp的用户提供更好的体验,相片理解团队必须担当起这项非常有挑战性的工作:确定哪些特点会让相片更受人喜爱,并研发出一套算法,可以依据这些特点来可靠地对相片做出评判。

首先我们试着为相片构建一个点击率预测器,数据源就是从日志中挖掘出来的点击数据。我们的假设是,那些被点击了更多次数的相片应该很明显地会比其它相片好。可事实上这个想法的效果却没有想象中好,原因有几点。首先,人们常常会点开那些比较模糊、或者里面有非常多文字的相片,这么来看看里面到底是什么内容。另外,因为Yelp上的相片有许多种展示方法,所以很难有效地对比某些特定相片的指标。

之后,我们试用了好几种不同的计算机视觉技术,试着发现一些相片的内在特征,希望可以直接用于质量评分。比如,对摄影师来说有个非常重要的特征叫“景深”,它用来测量相片有多少内容是在焦点里面的。用浅景深可以非常有效地将相片中的物体与它的背景区别开来,上传到Yelp的相片也不例外。很多时候,在关于某间饭店的许多张相片中,那些最美的总是那些非常明确地对焦到某个具体物体上的。

景深
亚历山大牛排屋
桌面上的艺术

另一个人们判断相片的非常重要的方法就是对比。对比可以测量出在一张相片中,一个物体和它旁边的物体在亮度和颜色等方面的不同。有许多种公式可以用于计算对比,但大多数都要对比亮度,或者相片中附近区域的光强度。

对比
安东尼点心
Tac N Roll

最后,相片中不同物体之间的相对位置也是一个非常重要地审美方面的考虑。比如研究表明,人们对艺术的对称性有着天生的倾向。另外,有些摄影师也非常推崇所谓的“第三法则”,这是一种将相片中的重要元素都按照某个轴排列起来的方法,以此来创建出一种运动或活力的感觉。

对齐
Traif
Augie Chang 摄影室

深度学习来构建相片评分模型
所有这些考虑都依赖于对相片内不同区域之间的关系的理解。所以当要实现一个相片评分算法时,我们希望算法中也会把这个关系放在非常重要的地位。结果,我们当时非常抱以厚望的就是卷积神经网络模型,或者说是CNN。

在过去的十年里,卷积神经网络模型在图片分类与处理领域内取得了巨大的成功,比如人脸识别和分子疾病检测等。和普通的神经网络类似,它们都会对输入向量做一系列的转换,并使用输出的错误来动态地改进对未来的预测。可是,CNN还有另外的几层,用到了上文中我们详细讨论过的几个特征。尤其是卷积层会对相片加以许多过滤器,汇聚层也会缩减之前各层的输出规模,以减少计算量。

为了开发这个模型,我们先要收集训练数据。得到训练数据的方法之一就是手工地为成千上万张相片加上标签,标记成漂亮或不漂亮。可是这样的方法代价太大,太耗时,而且会非常依赖于我们的评分员的喜好。另外,还有一点可供我们利用的就是,在相片被上传到Yelp的时候,它们通常都会包含着额外的信息,也就是EXIF数据。

另外,我们发现有个判断质量的非常好的方法,就是相片是不是由单反相机(Digital Single-Lens Reflex Camera,DSLR)拍摄的。单反相机可以让摄影师调节透镜类型和光圈大小,更好地控制把相片里的哪个部分作为焦点。更进一步,单反相机的传感器更大,对光线更敏感,即使在非常昏暗的环境下也可以拍出非常漂亮的相片。最后,总是使用单反相机的人经验会更丰富,也可以抓拍到质量更好的相片。

把这样的相片送给我们的模型去学习,就可以学到这些重要的相片特征,那么即使是在那些不是由单反相机拍出来的相片中,也可以识别出好相片。
即使这张相片是由iPhone拍出来的,我们的模型也还是给了它非常高的评分。

我们尝试了好多种方法来训练这个模型。一开始,我们收集了十万张单反相机和非单反相机拍出来的相片,分别标上好的和差的标签,然后送给名为AlexNet的模型中去学习,这个模型是由多伦多大学的研究员在2012年提出的。为了提高这个模型的精度,我们还用了几百万张相片的数据量去训练了另一个模型。最后,我们还尝试过一个名叫GoogLeNet的模型,这是Google的研究员在2014年开发的,艺术水平非常高,比之前较好的模型的层次还明显深。

同时Yelp的工程师们也手工评判了几千张相片,里面的相片都是我们可以非常自信地说非常好或者非常差的。在上面的每个测试中,我们还会把每个模型的训练成果,用于评判这几千张相片,来进一步看看效果。我们发现每经过一次迭代,我们正确判断好图或者差图的能力都得到了提高。
最后,为了把我们模型的判断结果转化为质量评分,我们在模型的最后一层使用了可能性输出的方法,为每一张输入的相片都生成一个确定的标签。换句话说,如果我们的模型认为有80%的机会标签应该是“高质量”,那我们就给那张相片打分0.8。这种方法可以很直观地把一个二元分类器的输出结果转化成了很容易打分的结果。

更进一步
我们的初步分析表明,我们的算法推荐的图片都是那些焦点更突出、更明亮和在审美上使人更愉悦的。可是有些时候也不是让我们非常满意,这就促使我们去找到办法对某些相片进行重新评估和排序。最终,我们为大家提供的系统可以把多种不同的信息整合起来,为商户提供较好的相片,展示给用户。
相片评分算法
商户相片评级流水线

在我们现在的流水线中,我们先用上面描述的模型为一家商户生成所有的品质评分。然后再根据下面的特征对这些得分进行调整:
标志过滤:我们发现商户标志的相片通常被我们的模型打出很高的分,即使用户压根对它们不感兴趣,不会看也不会点击它们。比如说,其中可能会包含一张海报,里面只有饭店的名字。于是,我们就基于相片的亮度直方图的熵训练了一个单独的分类模型,用它来降低这类相片的分值。

分辨率:为了对我们的神经网络的输入进行标准化,也为了加快计算速度,我们在把每张相片输入系统之前都进行了转换,缩小成了227*227像素的大小。可是这意味着模型无法判断这样的相片会不会太小,因而无法为用户提供关于商户的足够好的内容。为了处理这样的情况,我们对达不到某个标准的图片降低评分。

最后,我们用上了分类算法算出来的标签,用它们来保证不同种类的相片都可以显示在一家商户的相片列表的前面。

应用:封面相片排序
在Yelp上,每家商户的页面都会展示一些最漂亮的相片,我们叫做封面相片。在之前的许多年,我们都是根据喜欢、投票、上传日期和相片标题等来计算、挑选这些相片。可是,这样的方法有许多弊端。

首先,这样的系统非常容易产生选择性偏见。封面相面比别的相片有更多的机会被查看和点击。结果,一旦某张相片出现在了商户的封面上,它就有极大的可能性一直留在那里,即使更有吸引力更有用的相片在之后被上传上来,这一点也很难改变。另外,只是根据喜欢来选定的相片最终有可能会推荐一些“点击诱饵”,比如某些质量很差、也不怎么相关、但却由于包含了某些有引诱性的内容而受到了很多支持的相片。

现在有了排名算法,我们相信出现在饭店首页的封面相片的质量一定会大大提高。大家自己去看看吧!

弗里蒙特,Country Way
旧版本
高质量版本

旧金山,Octavia
旧版本
高质量版本

圣克拉拉,Kunjip
旧版本
高质量版本

旧金山,Gary Danko
旧版本
高质量版本

下一步的计划
我们收到的关于这个变化的反响非常好,我们也还有许多可以做的工作,来进一步提供相片的可用性和相关性。相片理解团队正在开发一套更全面的系统,也会把商户的类型和摄影师的身份、以及上文中讨论的用户反馈和品质因素等考虑进来,进一步为Yelp的用户提供更好的体验。请期待我们接下来的更新吧!

鸣谢:相片排名系统由Wei-Hong C.、Alex M.、Colin P.、Prasanna S.、Joel O.和Frances H.设计并实现。

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2017-12-11 19:05 , Processed in 0.162403 second(s), 25 queries .