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