Google要逆天!Google Wear 2.0 最新離線AI技術(shù)解析
原創(chuàng)【51CTO.com原創(chuàng)稿件】近幾年,人工智能領(lǐng)域顯得異常的活躍。除了傳統(tǒng)的機構(gòu)學術(shù)圈外,Google、Microsoft、Facebook、蘋果以及國內(nèi)的百度、阿里等等優(yōu)秀的互聯(lián)網(wǎng)企業(yè)也紛紛成立了相關(guān)的研究團隊,并取得了很多令人矚目的成果。
Google的AlphaGo向全世界展示了強大的運算能力,Siri和Google Now中的語音識別能力,國內(nèi)百度的小度機器人在“***大腦”上展現(xiàn)的語音、圖像識別能力,這些優(yōu)秀的項目都極大的反應了人類在人工智能領(lǐng)域的飛速發(fā)展。但是,無論是語音還是圖像識別,很大程度上都依賴于云計算來滿足大量的運算和存儲,而移動、PC設(shè)備,都需要時時刻刻通過互聯(lián)網(wǎng)的連接,獲取計算資源來達到人工智能的目的。
不過近期,在Google發(fā)布的Android Wear 2.0中,除了允許手表脫離手機直接使用外,更加讓人震驚的是“智能回復”(Smart Reply)能力,官方技術(shù)團隊認為,這是基于離線AI實現(xiàn)的,無需接入網(wǎng)絡(luò)去尋求云計算幫助,就能夠?qū)崿F(xiàn)自我學習的目的。
(圖片來自 engadget)
在此之前,包括作者在內(nèi),都認為對于智能手表這樣的移動設(shè)備,在有限的計算能力和內(nèi)存容量上,如果不連接云端就能夠擁有自我學習,“智能回復”等能力,這幾乎是不可能的事情。直到Google的一支名為“Expander”的AI研發(fā)團隊做到了,并移植到Android Wear 2.0上且得到很好的效果!他們通過重新設(shè)計了一套更加輕量、全新的機器學習框架,不僅能驅(qū)動 Android Wear 2.0 上的 Smart Reply,還可以給更多其他離線移動應用帶來巨大的幫助。不過在此之前,他們也嘗試了很多比較流行的神經(jīng)網(wǎng)絡(luò)和圖形學習技術(shù),但是建立的模型并不適合應用在移動平臺,限制回復的數(shù)量也打不到預期效果。通過這套輕量,簡單的系統(tǒng),可以將預期回復相似的消息,比如“你最近好嗎?”“過得怎么樣?” 迅速歸類到一起,以此減輕Smart Reply給內(nèi)存帶來的壓力。
在此之間,作者聯(lián)系到了在Google 負責Android工作的梁宇凌老師,他介紹說,AI一般指的都是機器學習,主要分為訓練和預測兩個流程。訓練時需要海量數(shù)據(jù)和強大的計算能力,因此通常還是在云端進行訓練。訓練結(jié)束以后得到的模型,進行單次預測時不需要海量數(shù)據(jù)和計算能力,所謂的離線AI,往往是指把網(wǎng)上訓練好的模型存在移動設(shè)備上,進行預測。因此技術(shù)難點往往在于如何把模型的size縮小,以及減少預測時的計算量和加快預測速度。這方面有很多辦法,現(xiàn)在很熱的AI芯片加速就是其中一種辦法。
其實Android Wear 2.0的離線AI技術(shù)并沒有采用深度學習,而是通過一種叫semi-supervised graph learning(半監(jiān)督圖學習[1])的技術(shù),其中技術(shù)核心部分在于對設(shè)備上的信息內(nèi)容(例如聊天,短信等等)高效地映射到相應可能的自動回復。而在Smart Reply中采用了一套全新、且比較輕量化的機器學習架構(gòu),他不僅僅能夠滿足智能回復功能,將來還會在很多離線的移動應用中帶來巨大的幫助。
接下來,作者整合了梁老師的建議以及Google官方技術(shù)團隊的博客,具體分析Android Wear 2.0離線AI技術(shù)的實踐思路。
Google wear 2.0 智能回復
學習與投射
建立輕量級會話模型的一個簡單的策略是,在設(shè)備上創(chuàng)建的內(nèi)容是常見的、且有規(guī)則的小字典(比如輸入→回復映射),并且在推理時使用一種較為樸素的查詢策略。這里牽涉到使用幾個特征的一小組類預測任務,(比如二元情感分類,“我愛這部電影”傳遞了一種積極的情感,而“演得很糟糕”這句話傳遞了消極的情感)。但是,它缺乏良好的擴展性,無法支持聊天消息中常見的豐富詞匯和眾多復雜的語言變化。另一方面,遞歸神經(jīng)網(wǎng)絡(luò)(比如LTSM)等機器學習模型是功能極其強大的工具,適用于自然語言理解任務中的復雜序列學習,包括“智能回復”。然而,壓縮這類豐富的模型用來適應很小的內(nèi)存設(shè)備,并通過降低計算成本獲得可靠的預測(迅速按照需要處理),那非常有挑戰(zhàn)性。Android Wear 2.0團隊早期嘗試通過限制模型、只預測一小批回復,或者使用量化(quantization)或字符級模型(character-level model)等技術(shù),但是都未能獲得很好的結(jié)果。
***,通過為設(shè)備端機器學習系統(tǒng)構(gòu)建一套不同的解決方案。思路是,先使用一種快速、高效的機制,將相似的消息分成一組,并將它們投射到相似(“鄰近”)的位向量表示。雖然有幾個方法可以執(zhí)行這個投射步驟,比如使用單詞嵌入或者編碼器網(wǎng)絡(luò),但***Android Wear 2.0采用了一種經(jīng)過改動的局部敏感哈希算法(LSH), 將維度從數(shù)百萬個獨特的單詞簡化為短小的、固定長度的位序列。這樣能夠非常快地為消息即時計算投射,并且在設(shè)備上占用的內(nèi)存空間更小,因為不需要存儲消息、單詞嵌入或者甚至是用來訓練的整個模型。
投射步驟:相似的消息分到一組,被投射到鄰近向量。比如說,“hey, how's it going?”和“How's it going buddy?”這兩條信息有著相似的內(nèi)容,可能被投射到同一個11100011。另一個相關(guān)的信息“Howdy, everything going well?”被映射到只相差2位的鄰近向量11100110。
接下來,系統(tǒng)通過消息及其投射后,共同訓練成“消息投射模型”,該模型學會使用半監(jiān)督式圖形學習框架,預測可能合適的回復。圖形學習框架想要訓練成一個可靠的模型,其辦法是結(jié)合來自多個來源的語義關(guān)系(消息/回復交互、單詞/短語相似性、語義聚類信息),并且學習有用的投射操作,這些投射操作可以映射到出色的回復預測。
學習步驟:(上面)消息連同投射和相應回復一起用于機器學習框架,共同學習一個“消息投射模型”。(下面)消息投射模型學會將回復與相應的消息投射關(guān)聯(lián)起來。比如說,該模型將兩個不同的消息:“Howdy, everything going well?”和“How’s it going buddy?”(底部中間)投射到鄰近位向量,并學習將其映射到相關(guān)回復(底部右邊)。
上述值得一提的是,雖然可以使用復雜機器學習和云計算的能力,訓練消息投射模型,但是模型本身駐留在設(shè)備上,而且完全在設(shè)備上執(zhí)行并推理。設(shè)備上運行的應用程序可以傳遞用戶的消息,并從設(shè)備端模型接收回復預測,而數(shù)據(jù)不用離開設(shè)備。而且還可以改動該模型,以適應用戶的書寫風格和個人偏好,從而提升個性化的體驗。
推理步驟:該模型將學到的投射運用于消息(或消息序列),并建議相關(guān)的不同回復。推理工作在設(shè)備上執(zhí)行,讓模型得以適應用戶數(shù)據(jù)和個性化書寫風格。
為了讓設(shè)備端系統(tǒng)能夠開箱即用,Android Wear團隊也不得不進行幾個額外的改進,比如專門進行了優(yōu)化,以便加快設(shè)備端計算,以及從模型生成豐富多樣的回復。
離線AI從手表交流到應用
從一開始,Google Wear團隊開始踏上從零開始開發(fā)這項技術(shù)時,對于模型的預測是否有用和準確率其實心里沒底。但是完成整個項目后,他們驚奇的發(fā)現(xiàn)這項技術(shù)在即便在計算能力和存儲資源非常有限的Android可穿戴設(shè)備上效果能夠達到預期,這使得整個團隊都非常的興奮。接下來他們還會繼續(xù)改進模型,為用戶提供更出色的會話體驗,也會充分利用這個設(shè)備端機器學習平臺,帶來全新的應用,類似此前Google推出基于人工智能應用Allo 的APP,讓溝通更加簡單,工作效率更高。
因此,Android Wear團隊還提供了非常豐富的API接口,為第三方使用Wear的設(shè)備接入并使用Smart Reply能力,比如,如果想要對您的通知操作啟動Smart Reply,需要執(zhí)行以下操作:
- 使用NotificationCompat.MessagingStyle
 - 對通知操作調(diào)用setAllowGeneratedReplies(true)
 - 確保通知操作具有RemoteInput(相應駐留)
 
以下示例為如何使用智能回復響應創(chuàng)建MessagingStyle通知:
- // Create an intent for the reply action
 - Intent replyIntent = new Intent(this, ReplyActivity.class);
 - PendingIntent replyPendingIntent =
 - PendingIntent.getActivity(this, 0, replyIntent,
 - PendingIntent.FLAG_UPDATE_CURRENT);
 - // Create the reply action and add the remote input
 - NotificationCompat.Action action =
 - new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon,
 - getString(R.string.label), replyPendingIntent)
 - .addRemoteInput(remoteInput)
 - // 1) allow generated replies
 - .setAllowGeneratedReplies(true)
 - .build();
 - Notification noti = new NotificationCompat.Builder()
 - .setContentTitle(messages.length + " new messages with " + sender.toString())
 - .setContentText(subject)
 - .setSmallIcon(R.drawable.new_message)
 - .setLargeIcon(aBitmap)
 - // 2) set the style to MessagingStyle
 - .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
 - .addMessage(messages[0].getText(), messages[0].getTime(), messages[0].getSender())
 - .addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getSender()))
 - // 3) add an action with RemoteInput
 - .extend(new WearableExtender().addAction(action)).build();
 
如果想要接入更多的擴展能力,需要進入>>
***,梁老師還跟作者表示,Google現(xiàn)在有好幾個項目都有離線AI,例如Google翻譯。但針對不同應用場景,具體的實現(xiàn)技術(shù)有所不同,例如Google翻譯上的方法和Wear 2.0的Smart Reply用的就不是同一種技術(shù)。針對Smart Reply是否能夠開源的問題,梁老師沒有去評論,不過他建議大家可以關(guān)注一下剛剛發(fā)布的TensorFlow 1.0版本[2],里面演示了在Android和ios上實現(xiàn)基于深度學習的圖像識別的能力,也有非常好的例子。
[1]:https://arxiv.org/pdf/1512.01752
[2]:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】




















 
 
 


 
 
 
 