當 TensorFlow Lite 遇到有道翻譯王 2.0 Pro
文 / 有道 AI 技術團隊
2018 年 9 月 6 日下 午, 網易有道在 AI 開放日上釋出了全新一代有道翻譯王 2.0 Pro 。隨後在 9 月 20 日舉辦的 Google 開發者大會上,有道技術總監林會傑分享了端側 AI 在智慧硬體產品上的重要性,並 且現場演示了有道翻譯王基於端側 AI 技術實現的全離線語音翻譯功能。與雲側 AI 相比,端側 AI 具有無網路延遲、更高的穩定性、資料隱私性、響應實時性, 這些特性使得端側 AI 滿足超低延遲場景,如文件掃描、AR 翻譯、實時語音翻譯等。
在這場釋出會之前,有道技術團隊已經在移動端離線 AI 技術上做了很多努力和探索。尤其是在端側 AI 部分應用了 Google 釋出的 TensorFlow Lite,本文將介紹有道翻譯王的 AI 技術,以及 TensorFlow Lite 在有道翻譯王上的應用。
有道翻譯王主要用到的 AI 技術有 OCR(光學字元識別)、NMT(神經機器翻 譯)、ASR(自動語音識別)、TTS(語音合成)。這些技術滿足了一個翻譯機的基本要求,通過在 TensorFlow Lite 框架上實現和加速,使得應用效果更加優異。
一臺有道翻譯王包括多少種 AI 技術?
OCR
光學字元識別(Optical Character Recognition,OCR)是指對文字資料的影象檔案進行分析識別處理,獲取文字及版面資訊的過程。亦即將影象中的文字進行識別 ,並以文字的形式返回。有道 OCR 主要分為兩個部分,一個是檢測部分,另一個是識別部分。檢測部分是指在一張圖片上尋找文字所在區域並框選出來,然後將標出的區域送入識別部分從而得出結果。
NMT
近年來,深度學習技術的發展為解決上述挑戰提供了新的思路。將深度學習應用於機器翻譯任務的方法大致分為兩類:
仍以統計機器翻譯系統為框架,只是利用神經網路來改進其中的關鍵模組 ,如語言模型、調序模型等;
不再以統計機器翻譯系統為框架,而是直接用神經網路將源語言對映到目 標語言,即端到端的神經網路機器翻譯(End-to-End Neural Machine Translation, End-to-End NMT),簡稱為 NMT 模型。
ASR
自動語音識別技術 ( Automatic Speech Recognition,ASR ) 是一種將人的語音轉換為文字的技術。語音識別是一個多學科交叉的領域,它與聲學、語音學、語言學、數字訊號處理理論、資訊理論、電腦科學等眾多學科緊密相連。由於語音訊號的多樣性和複雜性,語音識別系統目前只能在一定的限制條件下獲得滿意的效能,或者說只能應用於某些特定的場合。
TTS
語音合成(Text To Speech,TTS)技術將文字轉化為聲音,目前廣泛應用於語音助手、智慧音箱、地圖導航等場景。TTS 的實現涉及到語言學、語音學的諸多複雜知識,因合成技術的區別,不同的 TTS 系統在準確性、自然度、清晰度、還原度等方面也有著不一樣的表現。
以上這些 AI 技術會用到 CNN、RNN 等神經網路,這些網路會用到較為常用的運算元 ,如卷積層、全連線層、池化層、Relu 層。由於 TensorFlow 工作流程相對容易, API 穩定,相容性好,並且 TensorFlow 與 Numpy 完美結合,使其較為容易上手,所以我們在訓練模型時主要採用 TensorFlow 框架,可以大大的降低成本和節省精 力。
有道首個運用 TensorFlow Lite 技術的智慧硬體裝置
TensorFlow Lite 簡介
TensorFlow Lite 是 TensorFlow 針對移動和嵌入式裝置的輕量級解決方案。它為裝置上的機器學習預測降低了延遲,減小了二進位制大小。TensorFlow Lite 還支援硬體加速的 Android NNAPI。這樣一來,就對演算法的開發和部署有了很大的優勢。
TensorFlow Lite 優勢
-
輕量級:允許小 binary size 和快速初始化/啟動的裝置端機器學習模型進行推斷。
-
快速:專為移動裝置進行優化,包括大幅提升模型載入時間,支援硬體加速。
TensorFlow Lite 整合 Android 專案
(1) 首先新增 TensorFlow Lite 庫到專案中:
compile ‘org.tensorflow:tensorflow-lite:+’
(2) 然後匯入 TFlite interpreter:
import org.tensorflow.lite.Interpreter;
(3) 這樣就可以建立一個 Interpreter:
protected Interpreter tflite;
tflite = new Interpreter(loadModelFile(activity));
(4) 載入模型函式示例:
/** Memory-map the model file in Assets. */
private MappedByteBuffer loadModelFile(Activity activity) throws IOException {
AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(getModelPath());
FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
FileChannel fileChannel = inputStream.getChannel(); long startOffset = fileDescriptor.getStartOffset();
long declaredLength = fileDescriptor.getDeclaredLength();
return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
}
(5) 執行模型:
tflite.run(imgData, labelProbArray);
模型速度測試及比較
我們測試了常用的深度學習模型在 TensorFlow 和 TensorFlow Lite 上的執行速度, 模型分別為 InceptionV3、MobileNetV1、MobileNetV2。
同時,在 TensorFlow Lite 平臺上,對浮點模型和量化模型進行速度測試比較。
TensorFlow 和 TensorFlow Lite 具有良好的通用性,除此之外,對於專有硬體平臺 ,我們還對比了高通公司的SNPE ( Snapdragon Neural Processing Engine),測試 InceptionV3 模型執行在驍龍 835 晶片的 CPU、GPU、DSP 上的速度。
測試有道 OCR Detection 模型在 TensorFlow、TensorFlow Lite 和高通 SPNE 上的執行情況。
由此可見,SNPE 的 CPU 執行速度要比 TensorFlow 的 CPU 速度慢了很多,但是在 DSP 上的執行速度明顯優於 CPU 和 GPU。雖然各大晶片廠商積極推出了高效能的神經網路處理器(NPU),但在模型轉換和平臺整合方面不盡如人意,其通用性和便利性遠遠不如 TensorFlow Lite。
TensorFlow Lite + 有道翻譯王 探索更多可能性
近年來,網易有道在 AI 領域已經做出了很多嘗試和探索,積累了很多經驗,同時也創造了很多價值。隨著深度學習的模型所需算力的增加,在移動端流暢執行模型則成為了一大挑戰,為了解決這一大問題,各大硬體廠商推出神經網路加速晶片,軟體廠商也通過各種優化來提高速度。Google 也為此做出了努力, 推出了 TensorFlow Lite,優化了模型體積,提高了執行速度,還可以通過 NNAPI 實現硬體加速。
由於 TensorFlow Lite 具有良好的通用性,可以適應多種不同的硬體平臺,所以在模型適配上節省了很多成本。目前 TensorFlow Lite 對 LSTM 的支援在不斷完善,有道未來打算進一步完成相關模型的遷移和適配。同時也希望 TensorFlow Lite 能通過 Android NNAPI 可以整合更多的硬體平臺,包括 Google 最新發布的 Edge TPU 等, 充分利用不同硬體平臺的神經網路晶片加速,從而能夠使得更多的 AI 技術能夠更加高效率、低功耗、低延遲的執行在各種智慧硬體裝置上,真正實現讓 AI 無處不在。