欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

Google翻译是如何把深度学习“塞进”手机的?

程序员文章站 2022-05-27 13:29:36
...
前几天谷歌更新了它们的翻译App,该版本有诸多提升的地方,其中最大的是提升了所谓“字镜头”实时视频翻译性能和通话实时翻译性能。怎么提升的呢?字镜头技术首创者、Google 研究院翻译项目组资深软件工程师Otavio Good近日在Google Research Blog详述了相关原理。
以下是正文:

今天(2015年7月29日),我们发布了Google翻译手机App,现在这款App可支持20多种语言的即时视觉翻译(Visual Translation),也就是说,您可拿着手机摄像头对着实物,实物中的文字就可被即时识别出,并被翻译成目标语言。这项技术就是Google翻译中最新增加的特性——字镜头(Word Lens),如图1所示。

Google翻译是如何把深度学习“塞进”手机的?

图 1  Google翻译手机版(图片来源:Google)

因此,倘若下一次您有机会莅临一个陌生国家的城市,例如布拉格(Prague,捷克*首都和最大城市),当您饥肠辘辘地迈进一家饭馆时,再也不用担心看不懂那“宛如天书般”外文菜单了,因为此刻我们这款App可以悄然地帮您化解点菜的尴尬。那么,这款App是如何能够快速识别这些新语言的?下面我就给大家说道说道这款App背后的事儿。

言简意赅地说,我们的这款即时视觉翻译App,用到了深度神经网络(deep neural network,DNN)技术。

当年,我们字镜头(Word Lens)研究团队加入Google这个大家庭时,我们非常兴奋,因为这样就有机会和Google深度学习领域的大牛们一起工作。在过去几年里,神经网络犹如“磐涅重生”,重新唤起人们的极大关注,研究人员们亦不负众望,在诸如图像识别等领域取得不斐的成就。

就在五年前,如果您交给计算机一幅阿猫或阿狗的图像,让它识别,通常它会很作难——水平有限,猫狗难辨。但时过境迁,由于卷积神经网络(convolutional neural network)技术的诞生,计算机不但可轻易分别出阿猫阿狗,它们甚至还可以分别出狗的不同品种,不管这狗是中国藏獒、德国牧羊犬,还是拉布拉多犬、西伯利亚雪橇犬,计算机都能分辨出个“子丑寅卯”来。

Google翻译是如何把深度学习“塞进”手机的?

图2 数码迷幻艺术(图片来源:Google DeepDream)


是的,现在计算机的威力,已经不限于“玩玩”数码迷幻艺术(trippy art,参见例图2)了。如果你下载了Google翻译App的最新发布版,用之翻译您看不懂的外文菜单,那背后为您服务就是深度神经网络技术。

或许,您会不以为然,唔,这个…… 这个还好吧,Google已经把深度学习用得“炉火纯青”了,再把这技术用在文字翻译上,似乎在情理之中,意料之内。在人工智能时代,这类演示好像已有不少了吧。

但是,您可能不知道的是,我们这款App最棒的地方在于,它可在不联网的情况下也能正常工作,也就是说,所有深度学习的计算完全在手机上完成的。您是知道的,深度学习的计算量是不容小觑的。可这又是怎么做到的呢?

一步一步来,循序渐进
(1)找到图片中字符

当利用手机摄像头把图像读取进来后,Google即时翻译App要做的是,找到图片中需要翻译的字母。这款App首要要剔除诸如树木或汽车等背景对象,凸显出想要翻译的文字。在识辨图片中的文字过程中,这款App通过识别类似的、连续的色素块,来完成任务。如果某些像素颜色相似、位置彼此靠近,那么就可能是我们要找的字符,这些字符连接成一行,或许就是我们要找的一行文字(下图左1子图为原始图片,左2子图中红色方框框出的,即为标识出来的字符)。

Google翻译是如何把深度学习“塞进”手机的?

图3 图片文字识别及翻译流程

(2)识别图片中字符

接下来,这款App就要识别出第(1)步定位的字符。这时就该让“深度学习”出马了。我们要用到卷积神经网络,并在字母和非字母集合上训练这个网络,这样做的目的在于,让它学习到不同字母的长得是啥模样(在图3左3子图中,瑞典语“Mörk”为识别出的字符)。

有意思的是,我们的训练集,并非都是那些方方正正的“纯洁的”字符集合,因为倘若不是这样,训练出来的识别器,就无法识别出在这个“并不纯洁”的大千世界中的字符。要知道,在真实的世界里,这些字符可能会因为反射、灰尘、污迹及各种稀奇古怪的破损,导致摄像头拍摄出来的字符“似是而非”。

因此,我们构建了一个字符生成器,来伪造生成各式各样的阴影、扭曲字符。或许您要问,为什么你们不用真实世界中的图片字符,而是使用合成的数据集,来训练深度神经网络呢?

嗯,其实原因很简单,我们很难找到足够多的、多种语言的、各种“光怪陆离”文字样本。当我们想要训练一个真正高效的,紧凑的神经网络时,更加困难的是,真实世界的字符样本非常难以精细控制。

Google翻译是如何把深度学习“塞进”手机的?

图4 本图显示的是我们用作训练的各种“脏”字母。这些“脏”字母包括有污垢的,有亮点的和有扭曲的等各类字符,但这些情况不能有太多,因为太多这样的非正常字符会让我们的神经网络“迷糊”。
(3)查询字典,翻译识别出的字符

接下来,就是通过查字典,将这些识别出来的文字翻译为目标语言。在第(2)步的字符识别过程中,可能存在失准的地方,比如说,将“super”识别成“5uper”(也就是说,把字符S识别成5),但这也关系不大,在字典查询过程中,匹配允许存在一定的模糊性,“5uper”还是有可能被纠正为“super”(在图3左3子图中,将瑞典语的“Mörk”翻译成英语的“Dark”)。

(4)重新渲染翻译的文字

最后一步,我们会重新渲染翻译出来的文字,让翻译文字和图片中原文的字体和颜色一致。之所以我们可以做到这点,是因为我们已经从图像中找到并识别出我们要想的字符,并已确切地知道它们在原始图片中的位置。于是,在获取字符周围的颜色后,就可以从原始图像中“剔除”原始字符。然后,我们在保持原始前景色不变的基础上,在原始文字位置上,添加翻译出来的字符,这样就可以达到,加工出的图像和翻译出来的文字犹如 “浑然天成”(对比一下:图3左1子图为原始图,左4子图为即时翻译系统的加工图,如果不了解内情,可能您都会认为,这是厂商发布的两种语言版本的广告呢)。

将深度学习 “塞进”手机中

如果要将上述4步即时视觉翻译的流程,放置到我们的数据中心(data center)上去完成,这看起来并不是什么太难的事情。

但是,想一想,很多我们的手机用户,特别是那些仅在下载我们App时才仅此一次的用到我们数据中心的用户,他们的手机网络,要么慢如蜗牛,要么时断时续,加之智能手机又耗电得要命,让他们的手机将拍摄到的图像,发送到远程的Google数据中心上,在计算完毕后,再将识别结果发回手机,在上述场景下,是非常的不便!

那些低端手机的性能,可能要比一个稍微好点的笔记本电脑慢上50倍,而这个性能稍好的笔记本电脑,在计算性能上,和我们的数据中心相比,亦是差得何止十万八千里。而事实上,我们的数据中心,才是运行常规图像识别系统的平台。

那么,在没有和任何云计算平台相连的背景下,如何利用这些四处移动的手机摄像头捕获图像,并完成即时的视觉翻译呢?

答案很简单:自力更生,丰衣足食!我们开发了一个非常小型的神经网络,让它在计算能力有限的智能手机上,独立工作。在训练这个小型的神经网络时,我们做了若干个严格的限定,也就是说,我们设置了它所能处理的信息密度上限。因此,工作的挑战——如何生成最有效的训练数据,立马凸显出来了。

在生成适用的训练数据上,我们可是费了老大劲的。例如,我们仅希望识别出小幅扭曲变型的字符。因为如果字符扭曲幅度过大,为了识别它,神经网络就会在过多不重要的事物上,使用过高的信息密度,这就大大增加深度神经网络的计算量。所以,我们花了很大功夫,做出了一套工具,这些工具极大地提升了迭代效率和可视化渲染效果。在数分钟内,我们可以改变我们的神经网络算法,让这个算法产生训练数据,并重新训练参数,最后给出可视化识别结果。

从这里,我们可以找到,哪些字符识别失败,并及时查明原因。在这点上,我们故意将训练数据过度扭曲,这样一来,字符“$” 一开始可能被识别为“S”。但这没有关系,我们能够快速地确认这种“失误”何在,然后调整数据扭曲参数,来降低“失误率”。这就有点像,在现实生活中,我们要徒手画一副画,刚开始,我们画得可能很不像,但我们不断地修正,每次重画,都能进步一点点,最后您会看到,中途所有的不完善,都是为了画出一个完美的画面。

为了达到翻译的即时性,我们也做了大量的优化工作,而且优化和反复调试的工作量很大。此外,为了改善计算性能,在某些数学运算上,也需要手工重度调优。我们充分利用SIMD(Single instruction, multiple data,单指令流多数据流),这是一种数据并行的模式,来挖掘智能多核手机的并行潜能。同时,我们还优化矩阵乘法,提高矩阵运算的局部性,使之在各级缓存(Cache)中,提高Cache的命中率。

最后,如您所见,我们终于让这个基于深度神经网络的翻译系统在手机上跑起来了,而翻译的效果比老版翻译系统高出一大截,而在运行速度上,一点也不逊色于老版翻译系统。

有时候,新技术看起来非常抽象,找到诸如卷积神经网络这类新技术的用武之地,并不总是那么显而易见。打破语言障碍——做一款棒棒的、多语言的即时视觉翻译系统,我想,这应是一个伟大的应用案例。

原文来自:Google Research Blog

译者介绍:张玉宏,博士。2012年毕业于电子科技大学,现执教于河南工业大学。中国计算机协会(CCF)会员,ACM/IEEE会员。主要研究方向为高性能计算、生物信息学,主编有《Java从入门到精通》一书。