Google翻譯是如何把深度學習“塞進”手機的?

原文於2005年8月3日發表於CSDN:http://www.csdn.net/article/2015-08-03/2825363



前幾天谷歌更新了它們的翻譯App,該版本有諸多提升的地方,其中最大的是提升了所謂“字鏡頭”實時視頻翻譯性能和通話實時翻譯性能。怎麼提升的呢?字鏡頭技術首創者、Google 研究院翻譯項目組資深軟件工程師Otavio Good近日在Google Research Blog詳述了相關原理。

以下是正文:

今天(2015年7月29日),我們發佈了Google翻譯手機App,現在這款App可支持20多種語言的即時視覺翻譯(Visual Translation),也就是說,您可拿着手機攝像頭對着實物,實物中的文字就可被即時識別出,並被翻譯成目標語言。這項技術就是Google翻譯中最新增加的特性——字鏡頭(Word Lens),如圖1所示。 


圖 1  Google翻譯手機版(圖片來源:Google)

因此,倘若下一次您有機會蒞臨一個陌生國家的城市,例如布拉格(Prague,捷克共和國首都和最大城市),當您飢腸轆轆地邁進一家飯館時,再也不用擔心看不懂那“宛如天書般”外文菜單了,因爲此刻我們這款App可以悄然地幫您化解點菜的尷尬。那麼,這款App是如何能夠快速識別這些新語言的?下面我就給大家說道說道這款App背後的事兒。

言簡意賅地說,我們的這款即時視覺翻譯App,用到了深度神經網絡(deep neural network,DNN)技術。

當年,我們字鏡頭(Word Lens)研究團隊加入Google這個大家庭時,我們非常興奮,因爲這樣就有機會和Google深度學習領域的大牛們一起工作。在過去幾年裏,神經網絡猶如“磐涅重生”,重新喚起人們的極大關注,研究人員們亦不負衆望,在諸如圖像識別等領域取得不斐的成就。

就在五年前,如果您交給計算機一幅阿貓或阿狗的圖像,讓它識別,通常它會很作難——水平有限,貓狗難辨。但時過境遷,由於卷積神經網絡(convolutional neural network)技術的誕生,計算機不但可輕易分別出阿貓阿狗,它們甚至還可以分別出狗的不同品種,不管這狗是中國藏獒、德國牧羊犬,還是拉布拉多犬、西伯利亞雪橇犬,計算機都能分辨出個“子醜寅卯”來。


圖2 數碼迷幻藝術(圖片來源:Google DeepDream)

是的,現在計算機的威力,已經不限於“玩玩”數碼迷幻藝術(trippy art,參見例圖2)了。如果你下載了Google翻譯App的最新發布版,用之翻譯您看不懂的外文菜單,那背後爲您服務就是深度神經網絡技術。

或許,您會不以爲然,唔,這個…… 這個還好吧,Google已經把深度學習用得“爐火純青”了,再把這技術用在文字翻譯上,似乎在情理之中,意料之內。在人工智能時代,這類演示好像已有不少了吧。

但是,您可能不知道的是,我們這款App最棒的地方在於,它可在不聯網的情況下也能正常工作,也就是說,所有深度學習的計算完全在手機上完成的。您是知道的,深度學習的計算量是不容小覷的。可這又是怎麼做到的呢?

一步一步來,循序漸進

(1)找到圖片中字符

當利用手機攝像頭把圖像讀取進來後,Google即時翻譯App要做的是,找到圖片中需要翻譯的字母。這款App首要要剔除諸如樹木或汽車等背景對象,凸顯出想要翻譯的文字。在識辨圖片中的文字過程中,這款App通過識別類似的、連續的色素塊,來完成任務。如果某些像素顏色相似、位置彼此靠近,那麼就可能是我們要找的字符,這些字符連接成一行,或許就是我們要找的一行文字(下圖左1子圖爲原始圖片,左2子圖中紅色方框框出的,即爲標識出來的字符)。


 圖3 圖片文字識別及翻譯流程

(2)識別圖片中字符

接下來,這款App就要識別出第(1)步定位的字符。這時就該讓“深度學習”出馬了。我們要用到卷積神經網絡,並在字母和非字母集合上訓練這個網絡,這樣做的目的在於,讓它學習到不同字母的長得是啥模樣(在圖3左3子圖中,瑞典語“Mörk”爲識別出的字符)。

有意思的是,我們的訓練集,並非都是那些方方正正的“純潔的”字符集合,因爲倘若不是這樣,訓練出來的識別器,就無法識別出在這個“並不純潔”的大千世界中的字符。要知道,在真實的世界裏,這些字符可能會因爲反射、灰塵、污跡及各種稀奇古怪的破損,導致攝像頭拍攝出來的字符“似是而非”。

因此,我們構建了一個字符生成器,來僞造生成各式各樣的陰影、扭曲字符。或許您要問,爲什麼你們不用真實世界中的圖片字符,而是使用合成的數據集,來訓練深度神經網絡呢?

嗯,其實原因很簡單,我們很難找到足夠多的、多種語言的、各種“光怪陸離”文字樣本。當我們想要訓練一個真正高效的,緊湊的神經網絡時,更加困難的是,真實世界的字符樣本非常難以精細控制。


圖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從入門到精通》一書。

發佈了41 篇原創文章 · 獲贊 57 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章