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