本文由 「AI前線」原創(chuàng),原文鏈接:基于深度學(xué)習(xí)技術(shù)的AI輸入法引擎
作者| 姚從磊
編輯|Emily绝淡、Debra
AI 前線導(dǎo)讀:”目前宙刘,幾乎所有的輸入法基本能實(shí)現(xiàn)在用戶輸入第一個(gè)字后預(yù)測(cè)用戶接下來輸入的文字,并進(jìn)行推薦牢酵。AI 在輸入法中的應(yīng)用悬包,能夠通過大量的語言、語義的學(xué)習(xí)馍乙,了解人的用語習(xí)慣布近,甚至是性格和思維。
當(dāng)輸入法可以更加準(zhǔn)確地了解用戶之后潘拨,機(jī)器與人類之間的交流的以加深吊输,人機(jī)交互的體驗(yàn)得以提升饶号,進(jìn)而提高用戶粘度铁追。輸入法引擎 AI 化已成為輸入法產(chǎn)品發(fā)展的趨勢(shì)。
Kika 早在 2014 年就推出了首款輸入法產(chǎn)品 Kika Keyboard茫船,在海外進(jìn)入了 140 多個(gè)國(guó)家琅束,支持 173 種語言,全球用戶數(shù)量達(dá) 4 億算谈,月活 6000 多萬涩禀,這與此產(chǎn)品背后的輸入法引擎有著密不可分的聯(lián)系。
以下內(nèi)容整理自 AI 前線 2018 年 1 月 25 日社群分享
各位好然眼,我是姚從磊艾船,非常高興能夠有這樣一個(gè)跟大家交流的機(jī)會(huì)。今天主要想為大家介紹一下手機(jī)輸入法最核心的模塊 - 輸入法引擎的技術(shù)方案高每,為什么以及如何從傳統(tǒng) N-gram 引擎演化到深度神經(jīng)網(wǎng)絡(luò)引擎的屿岂。
主要的內(nèi)容分為五個(gè)部分:
什么是輸入法引擎;
基于傳統(tǒng) N-gram 語言模型的輸入法引擎鲸匿;
為什么要轉(zhuǎn)向深度神經(jīng)網(wǎng)絡(luò)引擎爷怀;
深度神經(jīng)網(wǎng)絡(luò)輸入法引擎的那些坑;
高級(jí)預(yù)測(cè)功能带欢。
先用一張圖介紹一下我們公司的情況运授。
作為一家面向全球用戶提供 173 種語言輸入法的公司,Kika 利用 AI 技術(shù)乔煞,為用戶提供了一流的輸入體驗(yàn)吁朦,也在全球獲得了大量的用戶。
這張圖中列出了目前全球輸入法市場(chǎng)上用戶量較大的產(chǎn)品渡贾,背后的公司既包括 Kika逗宜、百度、搜狗、Go 以及觸寶這樣國(guó)內(nèi)的公司锦溪,也包括 Google(產(chǎn)品為 GBoard)不脯、微軟 (Swiftkey) 等國(guó)外大公司。大家都在輸入法引擎的核心技術(shù)上投入大量研發(fā)精力刻诊,期望為全球各國(guó)用戶提供一流的輸入體驗(yàn)防楷。
什么是輸入法引擎
輸入法 (Input Method,簡(jiǎn)稱 IME) 是最常用的工具軟件之一则涯,也常被稱為 Keyboard复局、鍵盤等。對(duì)每種語言粟判,輸入法會(huì)提供一個(gè)字母布局 (Layout)亿昏,上面按照用戶習(xí)慣將對(duì)應(yīng)語言的基礎(chǔ)字母放置在合適的位置,比如英文鍵盤的 QWERT档礁、漢語鍵盤的九宮格等角钩。用戶輸入文字其實(shí)就是按照順序來敲擊 Layout 上的字母,字母敲擊序列稱為鍵碼序列呻澜;在用戶敲擊字母的過程中递礼,鍵碼序列以及之前用戶輸入的詞會(huì)被傳入 Layout 下層的「輸入法引擎」,引擎會(huì)根據(jù)從大規(guī)模數(shù)據(jù)中訓(xùn)練得到的語言模型羹幸,來預(yù)測(cè)用戶當(dāng)前以及接下來可能輸入的詞 / 詞序列脊髓,并將最可能輸入的詞 / 詞序列在鍵盤的候選區(qū)上展示給用戶,供用戶選擇栅受。
例如将硝,如果一位用戶期望輸入的完整文本內(nèi)容為「What’s the weather today?」屏镊,當(dāng)前輸入到了「weather」的第三個(gè)字母「a」依疼,此時(shí)詞序列「What’s the 」和鍵碼序列「W h a t ’ s SPACE t h e SAPCE w e a」(SPACE 表示空格) 作為輸入傳送至輸入法引擎,引擎基于訓(xùn)練好的語言模型進(jìn)行預(yù)測(cè)闸衫,并將最有可能的候選詞「weather」涛贯、「weapon」等展示給用戶,供用戶選擇蔚出。在這個(gè) case 中弟翘,如果「weather」排在第一位,則可以認(rèn)為引擎是合格的骄酗,可以打 60 分稀余。如果僅輸入到「weather」的第一個(gè)字母「w」,就可以將「weather」排在第一位趋翻,則可以打 70 分睛琳。如果在輸入到「weather」的第一個(gè)字母「w」后,就可以直接預(yù)測(cè)用戶接下來要輸入的詞序列為「weather today?」,那就會(huì)更好师骗,可以認(rèn)為是 90 分历等。
總的來講,輸入法引擎的功能可以細(xì)分為「糾錯(cuò)」辟癌、「補(bǔ)全」和「預(yù)測(cè)」三類寒屯。
所謂糾錯(cuò),指的是在用戶輸入一個(gè)錯(cuò)誤的詞黍少,比如「westher」寡夹,會(huì)自動(dòng)建議改為「weather」;
所謂補(bǔ)全厂置,指的是輸入一個(gè)詞的一部分即預(yù)測(cè)整體菩掏,比如「w」預(yù)測(cè)「weather」;
所謂「預(yù)測(cè)」昵济,指的是用戶沒有輸入任何字母時(shí)直接預(yù)測(cè)用戶接下來會(huì)輸入什么智绸,比如輸入「What’s the 」,預(yù)測(cè)出用戶會(huì)輸入「weather today?」砸紊。
同時(shí)传于,在拉丁等語系的輸入法中,會(huì)提供滑行輸入的功能醉顽。
用戶在鍵盤上快速滑行詞的字母序列,即便滑行軌跡有所偏差(因?yàn)榛兴俣群芸炱教簦脩糨^難準(zhǔn)確定位各個(gè)字母的位置)游添,也可以準(zhǔn)確預(yù)測(cè)用戶所想輸入的詞。在滑行輸入中通熄,引擎的輸入是滑行點(diǎn)的軌跡唆涝,輸出是預(yù)測(cè)的詞。在本文中唇辨,我們不會(huì)深入探討滑行輸入的引擎實(shí)現(xiàn)邏輯廊酣。
更進(jìn)一步,隨著用戶越來越多地傾向于利用 Emoji赏枚、表情圖片等非文字內(nèi)容表達(dá)自己的情感亡驰,引擎也需要能夠根據(jù)用戶輸入詞 / 鍵碼序列來預(yù)測(cè) Emoji 或表情圖片。而 Emoji 往往具有多義性(表情圖片也類似)饿幅,此類預(yù)測(cè)的復(fù)雜度會(huì)更高凡辱,我們已經(jīng)利用基于深度學(xué)習(xí)的建模技術(shù)較好地解決了這一問題。本文不會(huì)深入探討栗恩,有興趣的小伙伴可以單獨(dú)談?dòng)憽?/p>
本文主要討論在手機(jī)的按鍵文本輸入場(chǎng)景下透乾,輸入法引擎高效準(zhǔn)確地預(yù)測(cè)的相關(guān)技術(shù)。
此類技術(shù)的演化可以分兩個(gè)階段:
1)N-gram 統(tǒng)計(jì)語言模型階段;
2)深度神經(jīng)網(wǎng)絡(luò)語言模型階段乳乌。
前者主要基于大規(guī)模語料進(jìn)行統(tǒng)計(jì)捧韵,獲取一個(gè)詞在 N-1 個(gè)詞組成的序列 (N-gram) 之后緊鄰出現(xiàn)的條件概率;但由于手機(jī)內(nèi)存和 CPU 的限制汉操,僅能對(duì) N 較小 (N <= 3) 的 N-gram 進(jìn)行計(jì)算纫版,預(yù)測(cè)效果存在明顯天花板。后者通過構(gòu)建深度神經(jīng)網(wǎng)絡(luò)客情,利用大規(guī)模語料數(shù)據(jù)集進(jìn)行訓(xùn)練其弊,不僅可以突破 N-gram 中 N 的限制,且可利用詞與詞的語義關(guān)系膀斋,準(zhǔn)確預(yù)測(cè)在訓(xùn)練語料中未出現(xiàn)的詞序列梭伐,達(dá)到遠(yuǎn)超統(tǒng)計(jì)語言模型的預(yù)測(cè)效果。
基于傳統(tǒng) N-gram 語言模型的輸入法引擎
在輸入「What’s the weather today仰担?」的這個(gè) case 中糊识,當(dāng)用戶輸入到「weather」的第一個(gè)字母「w」時(shí),引擎要做的事情摔蓝,就是根據(jù)前面輸入的詞序列「What’s the」來預(yù)測(cè)下一個(gè)最可能的以「w」打頭的單詞赂苗,而其中最關(guān)鍵的就是如何預(yù)測(cè)下一個(gè)最可能的詞。
假設(shè)輸入詞序列為 w1,?,wN-1贮尉,預(yù)測(cè)下一個(gè)詞的問題實(shí)際上變成了 argmaxWNP(WN |w1,?,wN-1 )拌滋,這個(gè)簡(jiǎn)單的模型稱為輸入法引擎的語言模型。
根據(jù)條件概率計(jì)算公式猜谚,P(WN |w1,?,wN-1 )=P(w1,?,wN-1, WN )/P(w1,?,wN-1, WN )败砂,,根據(jù)最大似然估計(jì)原則魏铅,只有在語料數(shù)據(jù)規(guī)模足夠大以至于具備統(tǒng)計(jì)意義時(shí)昌犹,上述概率計(jì)算才會(huì)具有意義。
但事實(shí)上览芳,如果 N 值過大斜姥,并不存在「足夠大」的語料數(shù)據(jù)可以支撐所有概率值的計(jì)算;并且沧竟,由于 WN 實(shí)際上僅同 w1,?,wN-1 中的部分詞相關(guān)铸敏,上述計(jì)算會(huì)造成大量的計(jì)算資源浪費(fèi)。
因此屯仗,實(shí)際計(jì)算中搞坝,一種方式是引入馬爾科夫假設(shè):當(dāng)前詞出現(xiàn)的概率只與它前面有限的幾個(gè)詞有關(guān),來簡(jiǎn)化計(jì)算魁袜。如果當(dāng)前詞出現(xiàn)的概率只與它前面的 N-1 個(gè)詞相關(guān)桩撮,我們就稱得到的語言模型為 N-gram 模型敦第。常用的 N-gram 模型有 Unigram (N=1),Bigram (N=2)店量,Trigram (N=3)芜果。顯然,隨著 N 的增大融师,語言模型的信息量會(huì)指數(shù)級(jí)增加右钾。
為了得到有效的 N-gram 語言模型,一方面需要確保語料數(shù)據(jù)規(guī)模足夠大且有統(tǒng)計(jì)意義旱爆,另一方面也需要處理「數(shù)據(jù)稀疏」問題舀射。所謂數(shù)據(jù)稀疏,指的是詞序列 w1,?,wN 并沒有在語料數(shù)據(jù)中出現(xiàn),所以導(dǎo)致條件概率 P(WN |w1,?,wN-1 ) 為 0 的情況出現(xiàn)。這顯然是不合理的盅抚,如果數(shù)據(jù)規(guī)模繼續(xù)擴(kuò)大,這些詞序列可能就會(huì)出現(xiàn)邢羔。我們可以引入平滑技術(shù)來解決數(shù)據(jù)稀疏問題。平滑技術(shù)通過把在訓(xùn)練語料集中出現(xiàn)過的 N-gram 概率適當(dāng)減小桑孩,而把未出現(xiàn)的概率適當(dāng)增大拜鹤,使得全部的 N-gram 概率之和為 1,且全部的 N-gram 概率都不為 0流椒。經(jīng)典的平滑算法有很多種敏簿,個(gè)人推薦 Laplace 平滑和 Good-Turing 平滑技術(shù)。
在利用 N-gram 語言模型完成下一個(gè)詞的預(yù)測(cè)后镣隶,還需要根據(jù)用戶的按鍵序列來對(duì)預(yù)測(cè)的結(jié)果進(jìn)行調(diào)整极谊,可以利用編輯距離等衡量序列相似度的方法,將按鍵序列同預(yù)測(cè)詞的字母序列進(jìn)行對(duì)比安岂,細(xì)節(jié)不再贅述。
利用 N-gram 語言模型構(gòu)建的輸入法引擎帆吻,在手機(jī)端運(yùn)行時(shí)域那,存在著如下問題:
不能充分利用詞序列信息進(jìn)行預(yù)測(cè):受制于手機(jī)有限的 CPU 和內(nèi)存資源,N-gram 中的 N 通常都不能太大猜煮,基本上 N 為 3 已經(jīng)是極限次员。這意味著只能根據(jù)最近的 1 到 2 個(gè)詞來進(jìn)行預(yù)測(cè),會(huì)丟失大量的關(guān)鍵信息王带;
不能準(zhǔn)確預(yù)測(cè)語料數(shù)據(jù)集中未出現(xiàn)的單詞序列淑蔚。例如,如果在語料數(shù)據(jù)中出現(xiàn)過「go to work」愕撰,而沒有出現(xiàn)過「go to school」刹衫。即使用戶輸入「A parents guide to go to s」醋寝,引擎也不能準(zhǔn)確地將「school」排在候選區(qū)靠前的位置。
上述問題带迟,利用深度神經(jīng)網(wǎng)絡(luò)技術(shù)可以很好地解決音羞。
為什么要轉(zhuǎn)向深度神經(jīng)網(wǎng)絡(luò)引擎
深度神經(jīng)網(wǎng)絡(luò) (Neep Neural Networks, DNN) 是一種具備至少一個(gè)隱層的神經(jīng)網(wǎng)絡(luò),通過調(diào)整神經(jīng)元的連接方式以及網(wǎng)絡(luò)的層數(shù)仓犬,可以提供任意復(fù)雜度的非線性模型建模能力嗅绰。基于強(qiáng)大的非線性建模能力搀继,深度神經(jīng)網(wǎng)絡(luò)已經(jīng)在圖像識(shí)別窘面、語音識(shí)別、機(jī)器翻譯等領(lǐng)域取得了突破性的進(jìn)展叽躯,并正在自然語言處理财边、內(nèi)容推薦等領(lǐng)域得到廣泛的應(yīng)用。
典型的深度神經(jīng)網(wǎng)絡(luò)技術(shù)有卷積神經(jīng)網(wǎng)絡(luò) (Convolutional Neural Networks, CNN) 险毁、遞歸神經(jīng)網(wǎng)絡(luò) (Recurrent Neural Network制圈,RNN) 、生成對(duì)抗網(wǎng)絡(luò) (Generative Adversarial Nets, GAN) 等畔况,分別適用于不同的應(yīng)用場(chǎng)景鲸鹦。其中,RNN(如圖 1 所示)特別適合序列到序列的預(yù)測(cè)場(chǎng)
圖1:RNN網(wǎng)絡(luò)結(jié)構(gòu)
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)中層與層之間是全連接的跷跪,但層間的神經(jīng)元是沒有連接的(其實(shí)是假設(shè)各個(gè)數(shù)據(jù)之間是獨(dú)立的)馋嗜,這種結(jié)構(gòu)不善于處理序列化預(yù)測(cè)的問題。在輸入法引擎的場(chǎng)景中吵瞻,下一個(gè)詞往往與前面的詞序列是密切相關(guān)的葛菇。RNN 通過添加跨越時(shí)序的自連接隱藏層,對(duì)序列關(guān)系進(jìn)行建模橡羞;也就是說眯停,前一個(gè)狀態(tài)隱藏層的反饋,不僅僅作為本狀態(tài)的輸出卿泽,而且還進(jìn)入下一狀態(tài)隱層中作為輸入莺债,這樣的網(wǎng)絡(luò)可以打破獨(dú)立假設(shè),得以刻畫序列相關(guān)性签夭。
RNN 的優(yōu)點(diǎn)是可以考慮足夠長(zhǎng)的輸入詞序列信息齐邦,每一個(gè)輸入詞狀態(tài)的信息可以作為下一個(gè)狀態(tài)的輸入發(fā)揮作用,但這些信息不一定都是有用的第租,需要過濾以準(zhǔn)確使用措拇。為了實(shí)現(xiàn)這個(gè)目標(biāo),我們使用長(zhǎng)短期記憶網(wǎng)絡(luò) (Long-Short Memory Networks, LSTM) 對(duì)數(shù)據(jù)進(jìn)行建模慎宾,以實(shí)現(xiàn)更準(zhǔn)確的預(yù)測(cè)丐吓。
LSTM(圖 2)是一種特殊的 RNN浅悉,能夠有選擇性地學(xué)習(xí)長(zhǎng)期的依賴關(guān)系。 LSTM 也具有 RNN 鏈結(jié)構(gòu)汰蜘,但具有不同的網(wǎng)絡(luò)結(jié)構(gòu)仇冯。在 LSTM 中,每個(gè)單元都有三個(gè)門(輸入門族操,輸出門和遺忘門)來控制哪部分信息應(yīng)該被考慮進(jìn)行預(yù)測(cè)苛坚。利用 LSTM,不僅可以考慮更長(zhǎng)的輸入序列色难,并且可以利用三種門的參數(shù)訓(xùn)練來自動(dòng)學(xué)習(xí)篩選出真正對(duì)于預(yù)測(cè)有價(jià)值的輸入詞泼舱,而非同等對(duì)待整個(gè)序列中所有的詞。
圖 2 LSTM 網(wǎng)絡(luò)結(jié)構(gòu)
并且枷莉,可以在 LSTM 的網(wǎng)絡(luò)結(jié)構(gòu)中添加嵌入層 (Word Embedding Layer) 來將詞與詞的語義關(guān)系加入到訓(xùn)練和預(yù)測(cè)過程中娇昙。通過 Word Embedding,雖然在語料數(shù)據(jù)中沒有出現(xiàn)過「go to school」笤妙,但是因?yàn)椤竒o to work」出現(xiàn)在語料庫中冒掌,而通過 Word Embedding 可以發(fā)現(xiàn)「work」和「school」具有強(qiáng)烈的語義關(guān)聯(lián);這樣蹲盘,當(dāng)用戶輸入「A parents guide to go to s」時(shí)股毫,引擎會(huì)根據(jù)「work」和「school」的語義關(guān)聯(lián),以及 LSTM 中學(xué)習(xí)到的「parents」同「school」間存在的預(yù)測(cè)關(guān)系召衔,而準(zhǔn)確地向用戶推薦「school」铃诬,而非「swimming」。
深度神經(jīng)網(wǎng)絡(luò)輸入法引擎的那些坑
從理論上來講苍凛,LSTM 可以完美解決 N-gram 語言模型的問題:不僅能夠充分利用詞序列信息進(jìn)行預(yù)測(cè)趣席,還可以準(zhǔn)確預(yù)測(cè)語料數(shù)據(jù)集中未出現(xiàn)的單詞序列。但是醇蝴,在實(shí)際利用 LSTM 技術(shù)實(shí)現(xiàn)在手機(jī)上可以準(zhǔn)確流暢運(yùn)行的輸入法引擎時(shí)宣肚,在云端和客戶端都存在一些坑需要解決。
在云端悠栓,有兩個(gè)問題需要重點(diǎn)解決:
充分利用詞序列和鍵碼序列信息钉寝。如前所述,在輸入法引擎的預(yù)測(cè)過程中闸迷,LSTM 的輸入包含詞序列和鍵碼序列兩類不同的序列信息,需要設(shè)計(jì)一個(gè)完備的 LSTM 網(wǎng)絡(luò)可以充分利用這兩類信息俘枫。對(duì)此腥沽,我們經(jīng)過若干實(shí)驗(yàn),最終設(shè)計(jì)了圖 3 所示的兩階段網(wǎng)絡(luò)結(jié)構(gòu)鸠蚪。在第一個(gè)階段今阳,詞序列信息被充分利用师溅,然后將最后一個(gè)詞對(duì)應(yīng)隱層的輸出作為下一個(gè)階段的輸入,并和鍵碼序列一起來進(jìn)行計(jì)算盾舌,最后通過 Softmax 計(jì)算來生成最終結(jié)果墓臭。同時(shí),在兩階段間加入「Start Flag」妖谴,以區(qū)隔詞序列和鍵碼序列窿锉。
圖 3 詞序列 / 鍵碼序列混合
高質(zhì)量訓(xùn)練數(shù)據(jù)的生成:在訓(xùn)練 LSTM 語言模型時(shí),訓(xùn)練語料的質(zhì)量和覆蓋度是關(guān)鍵因素膝舅。從質(zhì)量角度來講嗡载,必須確保其中沒有亂碼、其他語言以及過短的句子等數(shù)據(jù)仍稀。從覆蓋度角度來講洼滚,一方面要確保訓(xùn)練語料的規(guī)模,使其能夠覆蓋語言中的大部分詞匯技潘,并足以支持語言模型的統(tǒng)計(jì)有效性遥巴,一般來講訓(xùn)練語料的量級(jí)應(yīng)該在千萬或者億;覆蓋度的另一個(gè)角度為文本類型享幽,需要確保訓(xùn)練語料中文本類型 (比如新聞铲掐、聊天、搜索等) 的分布同目標(biāo)應(yīng)用場(chǎng)景一致琉闪,對(duì)于手機(jī)輸入法來講迹炼,日常聊天類型的數(shù)據(jù)應(yīng)該占足夠大的比例;覆蓋度的第三個(gè)維度為時(shí)間維度颠毙,需要確保訓(xùn)練語料可以覆蓋對(duì)應(yīng)國(guó)家 / 語言固定時(shí)間周期 (通常為年) 中各個(gè)時(shí)間段的數(shù)據(jù)斯入,尤其是大型節(jié)日的數(shù)據(jù)。
在客戶端蛀蜜,性能和內(nèi)存是必須解決的關(guān)鍵問題刻两。一個(gè)優(yōu)秀的輸入法引擎,在手機(jī)端運(yùn)行時(shí)滴某,需要始終穩(wěn)定地保持低內(nèi)存占用磅摹,確保在 Android Oreo (Go edition) 系統(tǒng)上也可以穩(wěn)定運(yùn)行,且保持良好的性能 (每次按鍵響應(yīng)時(shí)間小于 60ms)霎奢。而 LSTM 原始模型通常較大 (例如美式英語的模型超過 1G)户誓,在手機(jī)端運(yùn)行時(shí)響應(yīng)時(shí)間也遠(yuǎn)超 1s,需進(jìn)行大幅優(yōu)化幕侠〉勖溃可以利用稀疏表示與學(xué)習(xí)的技術(shù),來壓縮圖 3 LSTM 網(wǎng)絡(luò)中的 word/ch embedding 矩陣及輸出端 softmax 向量矩陣晤硕,同時(shí)基于 Kmeans 聚類對(duì)模型參數(shù)進(jìn)行自適應(yīng)量化學(xué)習(xí)悼潭,最終可以將超過 1G 的模型量化壓縮到小于 5M庇忌。性能優(yōu)化則意味著需要控制手機(jī)端的計(jì)算量,需要在保證效果的前提下優(yōu)化模型結(jié)構(gòu)舰褪,減少不必要的層數(shù)和神經(jīng)元皆疹;同時(shí),可基于 TensorFlow Lite (而非 TensorFlow Mobile) 進(jìn)行手機(jī)端計(jì)算模塊的開發(fā)占拍,大幅提升性能和內(nèi)存占用略就,唯一的成本是需要自己實(shí)現(xiàn)一些必備的 operators。我們采用該方案可以將運(yùn)行時(shí)內(nèi)存占用控制在 25M 以內(nèi)刷喜,且響應(yīng)時(shí)間保持在 20ms掖疮。圖 4 是 TensorFlow Mobile 和 TensorFlow Lite 在相同 benchmark 上的對(duì)比數(shù)據(jù)初茶。
圖 4 TensorFlow Mobile 和 TensorFlow Lite 在相同 Benchmark 上的對(duì)比數(shù)據(jù)
基于以上的云端建模和客戶端預(yù)測(cè)技術(shù),我們完成了基于深度神經(jīng)網(wǎng)絡(luò) (LSTM) 的輸入法引擎方案的整體部署浊闪,并在大量語言上恼布,同基于 N-gram 的語言模型進(jìn)行了對(duì)比測(cè)試。在對(duì)比測(cè)試中搁宾,我們關(guān)注的關(guān)鍵指標(biāo)為輸入效率 (Input Efficiency):
輸入效率 = # 輸入的文字長(zhǎng)度 / # 完成文字輸入所需的按鍵次數(shù)
我們期望輸入效率越高越好折汞;同時(shí),我們也會(huì)關(guān)注每種語言對(duì)應(yīng)的線上用戶的回刪率盖腿,在此不再贅述翩腐。
下圖是在一些語言上 LSTM 引擎相對(duì) N-gram 引擎輸入效率的提升幅度鸟款。
圖 5 LSTM 引擎相對(duì) N-gram 引擎輸入效率的提升幅度
高級(jí)預(yù)測(cè)功能
高級(jí)預(yù)測(cè)功能在第一部分提到過,輸入法引擎也需要能夠準(zhǔn)確預(yù)測(cè)用戶可能輸入的 Emoji 或表情圖片茂卦,而這些內(nèi)容往往具有多義性处渣,因此此類預(yù)測(cè)的復(fù)雜度會(huì)更高。
同時(shí)蛛砰,對(duì)于 Emoji 來講罐栈,用戶往往會(huì)創(chuàng)造出一些有趣的 Emoji 組合,例如「??????」泥畅,如何自動(dòng)挖掘出這樣的 Emoji 組合悠瞬,并將其整合進(jìn) LSTM 的模型框架中,也是一個(gè)很有趣的問題。
另一方面浅妆,從文字輸入效率的角度看,如果每次預(yù)測(cè)能夠準(zhǔn)確預(yù)測(cè)不只一個(gè)詞障癌,而是詞組凌外,對(duì)用戶的體驗(yàn)會(huì)是一個(gè)很大的提升。如何發(fā)現(xiàn)有意義的盡可能長(zhǎng)的詞組涛浙,并且整合進(jìn) LSTM 的模型框架中康辑,也會(huì)是一個(gè)很有挑戰(zhàn)的工作。
Q/A 環(huán)節(jié)
Q1: 請(qǐng)問姚老師轿亮,這里 softmax 輸出是疮薇?
A1: 因?yàn)檫@個(gè)網(wǎng)絡(luò)的目的是預(yù)測(cè)下一個(gè)詞,所以 softmax 的輸出是預(yù)測(cè)詞的 id 和概率值我注。在實(shí)際產(chǎn)品中按咒,我們會(huì)選擇 Top 3 的預(yù)測(cè)詞,按照概率值從高到底顯示在候選區(qū)但骨。
Q2: 輸入法本質(zhì)上就是根據(jù)用戶前面的輸入預(yù)測(cè)他接下來要輸入什么励七。訓(xùn)練數(shù)據(jù)集和預(yù)測(cè)模型是在云端完成然后定期更新到手機(jī)端的嗎?還是完全在手機(jī)上端完成的奔缠?
A2: 我們的方案是包含兩個(gè)部分掠抬。對(duì)每種語言,我們會(huì)在云端迭代訓(xùn)練一個(gè)新 general language model校哎,在新 model 效果得到離線評(píng)測(cè)驗(yàn)證后两波,下發(fā)到手機(jī)端。并且闷哆,在手機(jī)端腰奋,會(huì)根據(jù)每個(gè)用戶的個(gè)人輸入歷史,來訓(xùn)練 personalized model (這個(gè) model 的訓(xùn)練頻率會(huì)更高)阳准。在實(shí)際預(yù)測(cè)時(shí)氛堕,會(huì)將這兩個(gè) model 的 inference 結(jié)果 merge 起來得到最終結(jié)果。在手機(jī)端的訓(xùn)練野蝇,需要尤其注意訓(xùn)練的時(shí)機(jī)讼稚,不能在用戶手機(jī)負(fù)載高的時(shí)候執(zhí)行訓(xùn)練。
Q3:TF Lite 對(duì)手機(jī)有要求嗎绕沈?
A3:TF Lite 對(duì)手機(jī)沒有要求锐想。但是 TF Lite 為了性能的考慮,砍掉了很多的 operators乍狐,我們?cè)趯?shí)現(xiàn)的過程中實(shí)現(xiàn)了自己模型 inference 必需的 operators.
Q4: 接上 Q1 的問題赠摇,針對(duì)英文情況,假如詞表為 1w,softmax 層 1w 個(gè)節(jié)點(diǎn)藕帜,怎么優(yōu)化 softmax 層呢烫罩?
A4:softmax 層的壓縮,本質(zhì)上就是 softmax 向量矩陣的壓縮洽故,其原理就是將巨大的向量矩陣轉(zhuǎn)換為少量的過完備基向量組合贝攒,而過完備基向量可以自動(dòng)學(xué)習(xí)獲得。
Q5: 請(qǐng)問:每訓(xùn)練一次模型 LSTM 需要多少個(gè) cell 這個(gè)是由什么決定的时甚?
A5: 每訓(xùn)練一次模型 LSTM 需要多少個(gè) cell隘弊,決定因素大體有兩類:1)我們可以接受的模型的復(fù)雜度,這直接決定了最終量化壓縮后的模型的大谢氖省梨熙;2)我們期望達(dá)到的效果。最終的決定主要是在這兩類之間進(jìn)行平衡刀诬。當(dāng)然咽扇,也同語言本身的復(fù)雜度有關(guān),比如德語同英語對(duì)比舅列,會(huì)更加復(fù)雜肌割,因此 cell 的數(shù)量多一些會(huì)更好。如果不考慮這個(gè)限制帐要,我們可以通過云端 service 的方式來進(jìn)行 inference.
Q6:未來輸入法會(huì)支持語音輸入嗎把敞?
A6: 我們正在開發(fā) Kika 的語音識(shí)別和語義理解引擎,目前在英文上的語音識(shí)別水平接近 Google 的水平榨惠,所以會(huì)逐步上線 Kika 的語音輸入功能奋早。同時(shí),我們基于 Kika 的一系列語音技術(shù)赠橙,已經(jīng)在 CES 2018 發(fā)布了 KikaGO 車載語音解決方案耽装,獲得了很多好評(píng)和 CES 的四項(xiàng)大獎(jiǎng),并正在準(zhǔn)備產(chǎn)品的正式發(fā)布期揪。我們的全語音解決方案除了為車載場(chǎng)景下提供服務(wù)外掉奄,還會(huì)在場(chǎng)景上做出更多的嘗試。
Q7:”可以在 LSTM 的網(wǎng)絡(luò)結(jié)構(gòu)中添加嵌入層 (Word Embedding Layer) 來將詞與詞的語義關(guān)系加入到訓(xùn)練和預(yù)測(cè)過程中” 能具體解釋下凤薛,在實(shí)際的數(shù)據(jù)預(yù)處理中姓建,是如何添加的?簡(jiǎn)單拼接還是啥缤苫?LSTM cell 的輸入又是啥速兔?
A7:Word Embedding Layer 的作用是將高維的詞空間映射到低維的向量空間,確保在低維空間上語義相似的詞的向量距離比較小活玲。Word Embedding Layer 的輸出作為 LSTM 的輸入涣狗。TensorFlow 本身自帶 Word Embedding Layer谍婉,其實(shí)就是一個(gè)簡(jiǎn)單的 lookup table。但如果所處理的問題領(lǐng)域不是 general domain镀钓,建議用所在 domain 的語料數(shù)據(jù)利用 Word2vector 來訓(xùn)練得到對(duì)應(yīng)的 domain specific word embedding穗熬,用來替換掉 TensorFlow 自帶的 Word Embedding Layer。
Q8: 輸入法的研究應(yīng)該是很有挑戰(zhàn)的領(lǐng)域掸宛,尤其是人類語言太多了死陆。能談?wù)勥@方面的發(fā)展趨勢(shì)嗎?
A8:「趨勢(shì)」都是大拿才可以談的事情唧瘾,我只談一些自己的淺薄想法。輸入法本質(zhì)為了解決人類通過機(jī)器 (手機(jī)别凤、電腦饰序、智能家居等) 和網(wǎng)絡(luò)達(dá)成的人與人的溝通問題。而這樣的溝通問題规哪,最重要的是能夠達(dá)到或超越人與人在現(xiàn)實(shí)世界中利用語音求豫、表情和肢體動(dòng)作面對(duì)面溝通的效果,能夠全面诉稍、準(zhǔn)確蝠嘉、快速地達(dá)到意圖、信息和情感的溝通杯巨。
因此蚤告,我們認(rèn)為輸入法的下一步發(fā)展一定是圍繞著「全」、「準(zhǔn)」服爷、「快」三個(gè)方面進(jìn)行的杜恰。「全」是指能夠提供文字仍源、語音心褐、表情、多媒體內(nèi)容等的溝通方式笼踩,「準(zhǔn)」指的是使得接收方能夠準(zhǔn)確接收到表達(dá)方的意圖逗爹、信息和情感,不會(huì)產(chǎn)生誤解嚎于,「快」指的是表達(dá)放產(chǎn)生到接收方接收的時(shí)間足夠短掘而。
而「全」、「準(zhǔn)」匾旭、「快」這三方面的用戶體驗(yàn)镣屹,通過 AI 的技術(shù),都可以大幅提升价涝。
Q9: 我還想提問這樣的 ai 輸入法和百度輸入法怎么競(jìng)爭(zhēng)女蜈。謝謝。
A9: 產(chǎn)品之間的競(jìng)爭(zhēng),本質(zhì)就是如何為用戶創(chuàng)造價(jià)值伪窖。Kika 輸入法的定位逸寓,就是解決全世界用戶在人與人溝通之間產(chǎn)生的問題,就是為用戶提供極致的「全」覆山、「準(zhǔn)」竹伸、「快」的溝通方式,為用戶創(chuàng)造更多的價(jià)值簇宽。從市場(chǎng)劃分上來看勋篓,兩款產(chǎn)品也不在一個(gè)維度上競(jìng)爭(zhēng)—國(guó)內(nèi)的輸入法巨頭像搜狗、百度主要解決的是中文魏割,而 kika 則重點(diǎn)為中文之外的其他語種的用戶創(chuàng)造價(jià)值譬嚣。
更多干貨內(nèi)容,可關(guān)注AI前線钞它,ID:ai-front拜银,后臺(tái)回復(fù)「AI」、「TF」遭垛、「大數(shù)據(jù)」可獲得《AI前線》系列PDF迷你書和技能圖譜尼桶。