0
本文作者: 楊曉凡 | 2017-10-24 09:58 |
雷鋒網(wǎng) AI 科技評論按:蘋果的新一期機器學習開發(fā)日記來了~ 這次蘋果介紹了通過講話就能喚醒Siri的“Hey Siri”功能是如何從技術上實現(xiàn)的,同時也介紹了為了從用戶體驗角度改善“Hey Siri”的表現(xiàn),蘋果的工程師們都做了哪些取舍和調整。與之前的文章一樣,蘋果的產(chǎn)品開發(fā)中并沒有令人震驚的新技術,但嚴謹、細致、以用戶為中心打磨產(chǎn)品的態(tài)度是自始至終的。雷鋒網(wǎng) AI 科技評論全文編譯如下。
iOS設備上的“Hey Siri”功能可以讓用戶無需接觸設備就喚醒Siri。在iOS設備上,有一個非常小的語音識別器一直在運行著,就等著聽這兩個詞。當它檢測到用戶說“Hey Siri”后,Siri 其它的部分就會把接下來的語音分解成一個控制指令或者一次查詢?!癏ey Siri”檢測器中使用了一個深度神經(jīng)網(wǎng)絡(DNN),每時每刻把你的語音模式轉換成一個不同講話聲音的概率分布。它使用了一個時間積分的過程對聽到的語音計算一個置信度分數(shù),判斷你說的詞語是不是“Hey Siri”。如果這個分數(shù)足夠高,Siri 就會醒來。這篇文章就簡單介紹了其中蘊含的技術,它的主要目標讀者是對機器學習有一些了解但是對語音識別了解不多的研究者們。
如果要讓 Siri 做什么,只需說:“Hey Siri”。當說出“Hey Siri”時不需要按設備上的任何一個按鈕,這使得 Siri 無需觸碰就可以操作。這件事看起來簡單,但是在幕后有許多的故事才能讓 Siri 喚醒得又快又高效。硬件、軟件和網(wǎng)絡服務無縫共同合作,提供了出色的用戶體驗。
在做飯或者開車這種雙手很忙的時候,能夠不按按鈕就使用 Siri 顯得尤其的有用,使用 Apple Watch時也是這樣。如圖1所示,整個系統(tǒng)包含許多組件。Siri 的大多數(shù)功能都是在云端實現(xiàn)的,包括主要的自動語音識別、自然語言轉述以及各種豐富的信息服務。也有一些服務器會給手機中的檢測器提供聲學模型的更新。這篇文章重點介紹系統(tǒng)中運行在本地設備上的部分(比如iPhone或者Apple Watch上)。這篇文章尤其關注了檢測器:一個專用的語音識別器,它始終在聆聽,而且僅僅聽它的喚醒短語(在較為近期的iPhone上,并開啟了“Hey Siri”功能時)。
iPhone或者Apple Watch上的麥克風會把你的聲音轉化成一組短時的波形采樣流,采樣速率是每秒16000次。一個頻譜分析階段會把波形采樣留轉換成一組音頻幀,每一個幀都描述了大概0.01秒的聲音頻譜。每次會有大約20個這樣的幀(0.2秒長的音頻)送入聲學模型,這是一個深度神經(jīng)網(wǎng)絡,把音頻樣本中的每一個都轉換成一組語言聲音類別的概率分布:“Hey Siri”短語中用到的聲音,或者靜音和其它語音,加起來一共大約20個聲音類別。詳見圖2。
這個深度神經(jīng)網(wǎng)絡主要由矩陣乘法和邏輯非線性組成。每一個隱含層的內(nèi)容都是DNN經(jīng)過訓練后發(fā)掘出的中間層表征,最終把過濾器中每個頻道的輸入轉換為不同的聲音類別。最終的非線性階段本質上是一個Softmax函數(shù)(也就是一個一般邏輯或者正則化指數(shù)函數(shù)),不過由于蘋果的工程師們想要的是對數(shù)概率,所以實際的數(shù)學計算會比這個簡單一點。
不同的設備上運行“Hey Siri”時有不同的運算資源,蘋果的工程師們據(jù)此為隱含層中的神經(jīng)元設定不同的數(shù)目。蘋果用的網(wǎng)絡一般含有五個隱含層,每層都有同樣的神經(jīng)元數(shù)目,根據(jù)設備的內(nèi)存和能源限制,數(shù)目為32、128或者192個。在iPhone上,蘋果設計了兩個網(wǎng)絡,一個用于初始檢測,另一個用于第二步檢測。初始檢測中的神經(jīng)元數(shù)目比第二步檢測中的少。
這個聲學模型的輸出是為每一幀計算語音類別的概率分布。一個語音類別可以是“前有一個舌位較高的前元音、后面有一個前元音的/s/發(fā)音的第一部分”這樣的東西。
為了檢測“Hey Siri”,這個目標短語的讀音經(jīng)過聲學模型之后的輸出應當在輸出序列中靠前的位置上。為了給每一幀計算單獨的分數(shù),蘋果工程師們按照時間順序把這些局部的值累計在一個序列中。這部分就是圖2中最終層(頂層)的部分,一個循環(huán)網(wǎng)絡中帶有到同一個神經(jīng)元和下一個神經(jīng)元的連接。在每個神經(jīng)元中都有一個取最大值操作和一個加法操作。
其中:
Fi,t是模型中狀態(tài)i的累計分數(shù)
qi,t是聲學模型的輸出。這個輸出是語音類別的對數(shù)分數(shù),它與時間t附近給定語音模式的第i個狀態(tài)有關
si是和留在狀態(tài)i相關的開銷
mi是從狀態(tài)i繼續(xù)向后移動的開銷
其中si和mi都是基于訓練數(shù)據(jù)中語音分割時長和相關標簽的分析得到的。(這個過程中應用了動態(tài)編程,而且可以由隱馬爾可夫模型HMMs的思路得到)
每一個累計分數(shù)Fi,t都和前一幀帶有狀態(tài)的標簽有關,正如一系列最大化操作結果中展示的那樣。每一幀的最終分數(shù)是Fi,t,這個語音段落的最后一個狀態(tài)是狀態(tài)i,在幀序列中一共通過N幀得到了這個結果。(N可以通過回溯最大化操作的序列得到,但實際上的做法是向前傳播幀的數(shù)目,因為這條路徑進入的是語音段落的第一個狀態(tài))
“Hey Siri”檢測器的計算幾乎都是在這個聲學模型中完成的。這個時間積分計算的代價還比較低,所以在評估模型大小或者計算資源的時候都不需要考慮它。
看看下面的圖4,你應該能更好地理解這個檢測器是如何工作的。其中在假設使用了最小的深度神經(jīng)網(wǎng)絡的情況下,不同階段中聲學信號是什么樣的。在最下面是麥克風采集到的聲音的頻譜圖。在這個例子中,有人在說“Hey Siri what”,其中較亮的部分是語音段落中最響亮的部分?!癏ey Siri”聲音的模式就是兩條垂直線之間的部分。
倒數(shù)第二個橫向圖中是把同一段語音用Mel濾波器組分析后的結果,其中根據(jù)感知測量的結果給不同的頻率賦予了權重。這個轉換同時也讓頻譜圖中能看到的細節(jié)變得更平滑,這是由于人聲中激活特性的精細結構,要么是隨機的,比如/s/中這樣,或者是持續(xù)性的,體現(xiàn)為圖中的豎向條紋。
圖4中標注為H1到H5的綠色和藍色的橫條是5個隱含層中每個神經(jīng)元的數(shù)值(激活狀況)。這張圖中每一層32個神經(jīng)元經(jīng)過了重新排列,讓具有類似輸出的神經(jīng)元距離更近一些。
再網(wǎng)上的一個橫條(帶有黃色信號的)展示的是聲學模型的輸出。在每一幀中,語音段落中的每一個狀態(tài)都會有一個輸出,另外還有其它對應著靜音或者其它語音聲音的輸出。最終的評分顯示在最上方,是按照公式1,沿著發(fā)光的信號把每個局部的分數(shù)積分起來得到的。值得注意的是,一旦整個語音段落都輸入了系統(tǒng),這個最終評分就會達到最高點。
蘋果的工程師們?yōu)樽罱K評分設立了兩個閾值來決定是否要激活Siri。實際上,閾值并不是固定的數(shù)值。蘋果工程師們設定了一定的靈活性,在嘈雜的環(huán)境下更容易激活Siri,同時也不會顯著增加誤激活的次數(shù)。兩個閾值中一個是主閾值,或者是普通閾值,還有一個較低的閾值,達到這個較低閾值并不會像正常那樣啟動Siri。如果最終評分達到了較低的閾值但是沒有達到普通閾值,有可能確實是設備沒有識別出用戶說的“Hey Siri”。當評分在這個范圍時,系統(tǒng)會進入一個更敏感的狀態(tài)并保持幾秒鐘,這樣如果用戶重新說這句話,即便他沒有說得更大聲更清晰,Siri也會被喚醒。這種“二次機會”機制極大地提升了系統(tǒng)的可用性,同時還沒有讓誤喚醒率提升多少,因為設備也只會在這個非常敏感的時間保持很短的時間(下文會更多地討論準確率的測試和調節(jié))
“Hey Siri”檢測器不僅需要檢測結果準確,還要在達到高識別速度的同時不造成明顯的電量消耗。同時還需要盡量降低對內(nèi)存和處理器的需求,尤其是對于處理器需求峰值。
為了避免讓iPhone的主處理器全天運行就為了等待聽到激活短語,iPhone 6S以及之后的iPhone上都搭載了一個 Always On Processor (持續(xù)工作處理器,AOP) ,這是一個小體積、低功耗的協(xié)處理器,也就是iPhone上內(nèi)置的型號M開頭的運動協(xié)處理器。它能夠獲取麥克風采集的信號。蘋果的工程師們拿出了AOP中有限的計算資源的一小部分來運行一個“Hey Siri”檢測器中的深度神經(jīng)網(wǎng)絡的縮小版本。當評分達到了一個閾值之后,運動協(xié)處理器會喚醒主處理器,主處理器就會用一個更大的深度神經(jīng)網(wǎng)絡分析聲音信號。在第一個帶有AOP支持的“Hey Siri”檢測器版本中,前一個協(xié)處理器中的檢測器中的5個隱含層每個隱含層有32個神經(jīng)元,第二個主處理器中的檢測器中的5個隱含層每個隱含層有192個神經(jīng)元。
在Apple Watch上實現(xiàn)“Hey Siri”檢測器的時候蘋果工程師們遇到了更大的困難,因為它的電池要小得多。Apple Watch用的是一個一步檢測的檢測器,其中的聲學模型大小介于剛才說到的其它iOS設備中第一步檢測和第二步檢測的模型大小之間。這個“Hey Siri”檢測器只有當手表中的運動協(xié)處理器檢測到手腕抬起動作的時候才開始工作,同時也會亮起屏幕。這時WatchOS其實要做許多的事情,喚醒電源、準備屏幕等等,整個系統(tǒng)只會在本來就非常有限的計算資源中分配給“Hey Siri”檢測器很小的一部分(大概5%)。及時啟動音頻采集抓住激活詞語是一項挑戰(zhàn),所以蘋果也在檢測器的初始化過程中預留了一些空間,允許出現(xiàn)一些斷續(xù)。
一直開著的“Hey Siri”檢測器可以對附近任何人說的激活短語做出響應,蘋果的工程師們最初是這樣設計的。為了減少誤激活帶來的麻煩,在iOS設備上打開“Hey Siri”功能后,用戶需要進行一個簡短的注冊環(huán)節(jié)。在注冊環(huán)節(jié)中,用戶需要說五個以“Hey Siri”開頭的短語,然后這些語音樣本會被保存在設備上。
未來設備上錄制到的任何“Hey Siri”語音都會和存儲的樣本做對比。(第二步)檢測器會產(chǎn)生時間信息,可以把語音樣本轉換成一個固定長度的向量,這個過程中會把每一幀對齊到每個狀態(tài)之后取平均。另外一個單獨的、專門訓練過的深度神經(jīng)網(wǎng)絡會把這個向量轉換到一個“講話者空間”中去。這個設計的想法是,同一個講話者的語音樣本會較為接近,不同講話者之間的語音樣本就會離得比較遠。識別時,會把新語音和之前注冊時錄制的語音之間的距離和一個閾值進行對比,判斷觸發(fā)了檢測器的這個聲音有多大可能是來自注冊過的用戶的。
這個過程不僅降低了另一個用戶說的“Hey Siri”會激活iPhone的可能,同時也降低了其它聽起來接近的詞語激活Siri的可能。
在通過iPhone上的層層識別階段之后,這段語音會被傳到Siri服務器上去。如果服務器上的主語音識別器認為說的內(nèi)容并不是“Hey Siri”(比如其實說的是 “Hey Seriously”),服務器就會給手機發(fā)回一個取消信號,讓它重新進入睡眠狀態(tài)(圖1中所示)。在有些系統(tǒng)中,蘋果也會在本地設備上設置一個縮減版本的主語音識別器,在更早的時候提供多一步檢查。
深度神經(jīng)網(wǎng)絡的聲學模型是“Hey Siri”的核心所在。下面來詳細看看它是如何訓練的。早在推出“Hey Siri”功能之前,就有一小部分用戶使用在Siri時在講命令之前先說“Hey Siri”;這時候激活Siri都是靠按下按鈕的。蘋果的工程師們就使用了這些“Hey Siri”語音用作美國英語的檢測模型的初始訓練集。他們同時還用了一些一般的語音樣本,就像訓練主語音識別用到的那樣。在這兩種情況下,蘋果都使用了訓練短語的自動文本轉錄結果。Siri團隊檢查了這些轉錄結果中的一部分,確認正確率足夠。
蘋果為不同語言單獨設計了“Hey Siri”短語的語音特征。以美國英語為例,系統(tǒng)中設計了兩種變體,其中的“Siri”有兩種不同的首元音,一個像“serious”中那樣,另一個像“Syria”中那樣。他們還考慮了如何應對這兩個詞中間的短暫間隔,尤其是這個短語書寫的時候都經(jīng)常會帶上一個逗號變成“Hey,Siri”。每個語音符號都會被分為三種語音類別(開頭,中部以及結尾),每一個在經(jīng)過聲學模型后都會得到各自的輸出。
蘋果使用了一個對話語料庫來訓練這個檢測器的深度神經(jīng)網(wǎng)絡,同時Siri的主語音識別器會給每一幀提供一個聲音類別標簽。主聲音檢測器中有數(shù)千種聲音類別,不過只有大約20種是檢測“Hey Siri”的讀音時用得到的(包括一個初始聲音),然后把所有其它的聲音都歸為一個大類就可以。訓練過程的目標是根據(jù)局部音頻樣本,讓DNN對標識了相關的狀態(tài)和音素的幀輸出的判別結果盡量接近1。訓練過程通過標準的反向傳播和隨機梯度下降調節(jié)連接權值。開發(fā)過程中,蘋果使用了許多種不同的神經(jīng)網(wǎng)絡訓練工具包,包括Theano、Tensorflow 以及 Kaldi。
訓練過程中根據(jù)給定的局部聲學樣本估計音素和狀態(tài)的概率,但是這些估計值中會包括音素在訓練集中的出現(xiàn)概率(首選),它們的分布可能不均勻,而且也和檢測器的實際應用場景關系不大,所以蘋果工程師們在應用聲學模型之前先對這些首選做了補償。
訓練一個模型通常需要花一天的時間,蘋果通常也會同步訓練好幾個模型。一般一次會訓練三個版本,一個小模型用在運動協(xié)處理器的第一步檢測上,一個大模型用在主處理器的第二步檢測上,以及一個中等大小的模型用于Apple Watch。
“Hey Siri” 功能可以支持所有Siri支持的語言,不過讓Siri開始聆聽的指令不一定非要是“Hey Siri” 這兩個詞。比如,講法語的用戶需要說 “Dis Siri”,講韓語的用戶說“Siri ?”(發(fā)音類似“Siri Ya.”)在俄羅斯,用戶要說“привет Siri “ (聽起來像“Privet Siri”),在泰國就是“?????? Siri”.(聽起來像“Wadi Siri”)。
無論用戶在什么時候說“Hey Siri”,一個理想的檢測器都應該馬上啟動起來,同時不在其它的時候啟動。蘋果用兩種不同的錯誤描述檢測器的準確率,一個是在錯誤的時候啟動,一個是沒能在正確的時候啟動。前者是錯誤接受率(FAR或誤警率),是每小時平均誤啟動的數(shù)目(或者是誤啟動之間的平均間隔時間);后者錯誤拒絕率(FRR)是嘗試激活Siri的動作中失敗的比例。(值得注意的是,用來衡量FAR的單位和衡量FRR的不一樣,甚至測量的指標都不一樣。所以不存在FAR和FRR相等的狀況)
對于一個給定的聲學模型,可以在兩種錯誤率中做平衡取舍,改變激活的閾值就可以。圖6中表現(xiàn)的就是在兩個開發(fā)早期的模型基礎上做這種取舍的例子,做的操作就是沿著曲線改變閾值。
在開發(fā)過程中,蘋果的工程師們嘗試用一個很大的測試集估計系統(tǒng)的準確率,這樣的測試集采集和準備起來很花錢,但卻是必不可少的。測試集中有正例數(shù)據(jù)也有負例數(shù)據(jù)。正例數(shù)據(jù)中確實含有目標激活詞語。你可能會想,用“Hey Siri”系統(tǒng)本來采集到的聲音來做測試不行嗎?但其實系統(tǒng)并沒有捕捉到?jīng)]能激活Siri的那些語音,而蘋果的目標是提升系統(tǒng)表現(xiàn),盡量讓以前激活失敗的聲音在現(xiàn)在可以激活成功。
一開始蘋果使用了一些用戶在按下Home按鈕同時說的“Hey Siri”語音,但是其實這些用戶并沒有試著讓Siri集中注意力聽他們說什么(按下Home按鈕的動作就已經(jīng)表達了這個意圖),而且同時麥克風也一定是在用戶的一臂距離之內(nèi)。相比之下,蘋果希望“Hey Siri”可以在整個房間的范圍內(nèi)都有效。所以蘋果專門根據(jù)不同的環(huán)境錄制了很多語音,比如在廚房(遠近都有)、車上、臥室、餐館;蘋果分別請了把各種語言做母語的人參與這項錄制。
負例數(shù)據(jù)是用來測試誤激活(以及誤喚醒)的。數(shù)據(jù)集中有不同來源的共數(shù)千小時錄音,包括語音博客和Siri收到的各種語言語音中不含有“Hey Siri”的那些,它們分別代表了背景聲音(尤其是人類對話)和用戶跟另一個人講話時容易出現(xiàn)的詞語。蘋果需要準備大量的數(shù)據(jù),因為他們的目標誤激活率要低至每周一次(如果在標識為負例的數(shù)據(jù)中確實出現(xiàn)了激活詞語,這樣的情況就不算為出錯)
系統(tǒng)的調節(jié)在很大程度上就是一個決定用什么閾值的過程。圖6中,較大的深度神經(jīng)網(wǎng)絡的那條較低的權衡曲線上的兩個點,就是選出的正常閾值和“再說一次”的閾值。較小的模型(一步檢測)的工作點在最右側。圖中的曲線展示的僅僅是檢測器中兩個階段的檢出率曲線,并未包括之后的個性化階段或者后續(xù)檢查。
對于在測試集上表現(xiàn)較好的模型,蘋果的工程師們當然有信心認為它們確實更優(yōu)秀,但把離線測試的結果轉換成對用戶體驗的靠譜的預測就是另一件事情了。所以除了剛剛介紹的離線測試之外,蘋果還從最新的iOS設備和Apple Watch上對生產(chǎn)數(shù)據(jù)(用戶真實使用狀況下的數(shù)據(jù))進行了每周采樣,用來估計誤識別率(用戶沒有說“Hey Siri”的時候Siri就啟動了)和冒名接受率(檢測器已經(jīng)經(jīng)過了用戶語音的訓練,但是另一個人說“Hey Siri”的時候Siri也啟動了)。這些數(shù)據(jù)中并不能得到拒絕率(用戶說了“Hey Siri”但Siri并沒有應答),但是這個指標可以由系統(tǒng)開發(fā)人員從剛好高出閾值的真實激活動作的比例,以及設備上記錄的剛好未達到閾值的事件次數(shù)中推測出來。
蘋果的工程師們用這篇文章中介紹的訓練和測試方法以及它們的變種,不斷評估、改進著“Hey Siri”功能以及在背后支持著功能的模型。訓練中總是包含了各種不同的語言,測試中也總是考慮了各種變化的條件。
下次你再對手機說出“Hey Siri”的時候,你可能會想起蘋果工程師們?yōu)榱四軕疬@個短語而做的所有這一切,但蘋果工程師更希望的是你能覺得“it just works"!
via Apple Machine Learning Journal,雷鋒網(wǎng) AI 科技評論編譯
相關文章:
蘋果的機器學習開發(fā)日記:如何設計能在Apple Watch上實時運行的中文手寫識別系統(tǒng)
雷峰網(wǎng)版權文章,未經(jīng)授權禁止轉載。詳情見轉載須知。