編輯導語:隨著手機的逐漸智能化,越來越多的手機只要聽到指令就會幫助主人完成一些任務,這就是語音喚醒功能。本文作者圍繞語音喚醒功能,從其應用有哪些、工作原理是什麼、怎樣訓練一個喚醒模型、如何測試等方面展開了詳細地討論。
「Hi siri」、「天貓精靈」、「小愛同學」,我們生活中常常會叫到這些名字,讓她們來幫我們完成一些指令,這個過程就像叫某人幫你做某事的感覺。
而這個叫名字的過程,就是我們今天要聊的語音喚醒。
語音交互前,設備需要先被喚醒,從休眠狀態進入工作狀態,才能正常的處理用戶的指令。
把設備從休眠狀態叫醒到工作狀態就叫喚醒,我們常見的有觸摸喚醒(鎖屏鍵),定時喚醒(鬧鐘),被動喚醒(電話)等,而語音喚醒就是——通過語音的方式將設備從休眠狀態切換到工作狀態。
語音喚醒(keyword spotting):在連續語流中實時檢測出說話人特定片段。
可能有長得好看的同學就要問了,我讓他一直保持工作狀態不可以嗎?
工作狀態的設備會一直處理自己收到的音頻信息,把不是和自己說話的聲音也當作有效信息處理,就會導致亂搭話的情況。而語音喚醒就成功的避開了這個問題,在只有用戶叫名字的時候工作,其他時間休眠。
其實到底是否需要語音喚醒這個能力,也是看場景的,有些廉價的玩具,就是通過按住按鈕進行語音交互的。
語音喚醒目前的應用範圍比較窄,主要是應用在語音交互的設備上面,用來解決不方便觸摸,但是又需要交互的場景。
生活中應用的最好,就應該是智能音箱了,每個品牌的智能音箱都有自己的名字,我們通過音箱的名字喚醒她,和她進行交互,控制家電。
其次就是手機,目前大部分手機都配有手機助手,從蘋果最早的siri到現在的「小愛同學」,讓我們實現了即使不觸碰手機,也可以實現一些操作。
還有一些服務類型的機器人,也會用到語音喚醒。
不過一般機器人會採用多模態的喚醒能力,他會結合語音喚醒、人臉喚醒、觸摸喚醒、人體喚醒等多個維度的信息,在合適的時候進入工作狀態。
語音喚醒能力主要依賴於語音喚醒模型(下稱「喚醒模型」),是整個語音喚醒核心。
喚醒模型主要負責在聽到喚醒詞後馬上切換為工作狀態,所以必須要實時監測,才能做到聽到後及時反饋。由於需要實時響應,以及喚醒模型對算力要求不高等方面原因,一般喚醒模型是做在本地的(區別於雲端的ASR識別)。
這就是我們即使沒有聯網,你叫「小愛同學」,她也會答應你的原因。
喚醒模型的算法經過了三個階段的發展:
用模板匹配的方法來做喚醒模型,一般會把喚醒詞轉換成特徵序列,作為標準模板。
然後再把輸入的語音轉換成同樣的格式,使用DTW (dynamic time warping)等方法,計算當前音頻是否和模版匹配,匹配則喚醒,不匹配則繼續休眠。
簡單理解就是找到喚醒詞的特徵,根據特徵制定觸發條件,然後判斷音頻內容是否滿足觸發條件。
用隱馬爾可夫模型來做喚醒模型,一般會為喚醒詞和其他聲音分別建立一個模型,然後將輸入的信號(會對音頻信息進行切割處理)分別傳入兩個模型進行打分,最後對比兩個模型的分值,決定是該喚醒,還是保持休眠。
簡單理解就是分別對喚醒詞和非喚醒詞作了一個模型,根據兩個模型的結果對比,決定是否喚醒。
用神經網絡來做喚醒模型,可以分為多種:
凡是用到神經網絡原理的,都可以說是基於神經網絡的方案。
其實喚醒模型工作原理很簡單,就是一直在等一個信號,等到這個信號就切換到工作狀態,只是判斷信號的內部邏輯不同而已。
一般訓練語音喚醒模型大概需要四個步驟,包括:
首先我們需要定義一個喚醒詞:
定義喚醒詞也是有講究的,一般會定義3-4個音節的詞語作為喚醒詞。像我們常見的「天貓精靈」、「小愛同學」、「小度小度」,全部都是4個音節,由於漢語的發音和音節的關係,你也可以簡單的把音節理解為字數。
喚醒詞字數越少,越容易誤觸發;字數越多,越不容易記憶——這也是一般定義在4個字的原因。
另外這3-4個字要避開一些常見的發音,避免和其他發音出現競合,要不然會頻繁的誤喚醒。
一般喚醒詞會做這樣一個處理,就是喚醒詞中的連續3個字也可以喚醒,比如你喊「小愛同」,同樣可以喚醒你的小愛同學。這是為了提高容錯率所做設定的規則。
然後就需要收集這個喚醒詞的發音,理論上來說發音人越多、發音場景越豐富,訓練的喚醒效果越好。
一般按照發音人數和聲音時長進行統計,不同的算法模型對於時長的依賴不一樣。基於端到端神經網絡的模型,一個體驗良好的喚醒詞可能需要千人千時,就是一千個人的一千個小時。
收集喚醒詞發音的時候,一定要注意發音的清晰程度,有時候甚至要把相近的音也放到訓練模型中,防止用戶發音問題導致無法進行喚醒。
如果用戶群體龐大,甚至考慮該喚醒詞在各種方言下的發音。
數據都準備好了,就到了訓練模型的階段了,這裡常見的算法有:
這三種方案對比如下:
最後就是測試並上線,一般分為性能測試和效果測試,性能測試主要包括響應時間、功耗、並發等,這個一般交給工程師來解決。
產品會更關注效果測試,具體的效果測試我們會考慮喚醒率、誤喚醒率這兩個指標,後面的測試環節我們會詳細測試的流程和指標。
產品上線後,我們就可以收集用戶的喚醒數據,喚醒詞的音頻數據就會源源不斷。我們需要做的就是對這些喚醒音頻進行標註、收集badcase,然後不斷的進行訓練,再上線,就是這麼一個標註、訓練、上線的循環過程。
直到邊際成本越來越高的時候,一個好用的喚醒模型就形成了。
語音喚醒測試最好是可以模擬用戶實際的使用場景進行測試,因為不同環境可能實現的效果不一樣。比如:常見各個廠商說自己的喚醒率99%,很可能就是在一個安靜的實驗室環境測試的,這樣的數字沒有任何意義。
這裡說到的場景主要包括以下幾點:周圍噪音環境、說話人聲音響度、以及說話距離等。
測試的條件約束好,我們就要關心測試的指標了,一般測試指標如下:
喚醒詞被喚醒的概率,喚醒率越高,效果越好,常用百分比表示。
在模擬用戶使用的場景下,多人多次測試,重複的叫喚醒詞,被成功喚醒的比就是喚醒率。喚醒率在不同環境下,不同音量喚醒下,差別是非常大的。
用25dB的喚醒詞測試,在安靜場景下,3米內都可以達到95%以上的喚醒率,在65-75dB噪音場景下(日常交談的音量),3米內的喚醒率能夠達到90%以上就不錯了。
所以看到各家喚醒率指標的時候,我們要意識到是在什麼環境下測試的。
非喚醒詞被喚醒的概率,誤喚醒率越高,效果越不好,常用24小時被誤喚醒多少次表示。
在模擬用戶使用的場景下,多人多次測試,隨意叫一些非喚醒詞內容,被成功喚醒的比就是誤喚醒率。
如果誤喚醒率高,就可能出現你在和別人說話,智能音箱突然插嘴的情況。
用戶說完喚醒詞後,到設備給出反饋的時間差,越快越好。
純語音喚醒的響應時間基本都在0.5秒以內,加上語音識別的響應時間就會比較長,我們下章再討論。
喚醒系統的耗電情況,對於電池供電的設備,越低越好。
一般插電使用的音箱還好,對功耗的要求不是很嚴格。但是像手機、兒童玩具等產品,由於是電池供電,對功耗的要求較高。
siri是iphone4s就有的語音助手,但直到iphone6s的時候,才允許不接電源下直接通過語音喚醒siri,當時就是考慮功耗的原因。
我們通過喚醒詞喚醒設備後,需要一個及時的反饋,來提醒我們喚醒成功,這就要考驗產品的設計功力了。
一般會有兩個可感知的層面上進行提示,一個是聽覺方面,一個是視覺方面(暫不考慮震動)。
聽覺方面的反饋,又分為兩種:
語音回復一般常見的有「在的」、「嗯嗯」、「來了」等,都是一些簡短的回覆,表示已經聽到。這幾句TTS的內容需要仔細打磨,反覆調試,才能達到一個理想的效果,建議不要超過1秒。
聲音提示往往是在語音回復之後,提示用戶可以進行語音交互了,一般都是一個簡短的音效,之後就開始收音了。
視覺方面的反饋,也可以分為兩種:
燈效反饋常見於智能音箱的產品上面,他們沒有屏幕,但是也需要在視覺上提示用戶,一般不同顏色的燈效,表示機器不同的狀態,是有明確的產品定義的。
屏幕反饋可以做的事情就比較多了,可以根據自己產品的需求,設計提示的強度,是彈出浮窗,還是彈出頁面,根據不同的應用場景來設計,這裡就不展開討論了。
還有一種情況,中間是不需要反饋的,比如「天貓精靈,打開燈」這樣一氣呵成的喚醒+交互,我們只需要執行相應的指令,並給出最後執行結果的反饋即可。
隨著語音交互的普及,逐漸衍生出一些個性化的需求,大家開始給自己的設備起一個專屬的名字,這就是自定義喚醒詞。
自定義喚醒詞一般會打包成一個輸入框提供給用戶,用戶只需要在框內按照我們的提示填寫內容即可,在這裡我們可能需要注意以下幾點:
還有一個技術上面的問題,就是喚醒的效果要在功耗之間達到一個平衡。
一般在電池供電的產品上,需要有專門控制語音喚醒的獨立硬體,來平衡效果和功耗,達到一個相對理想的水平。
之前就聽說過亞馬遜音箱半夜被周圍噪音誤喚醒,然後給一些莫名其妙的回覆。想想晚上睡著了,然後音箱突然自言自語,想想就比較恐怖。
為了應對這種問題,我們可以動態調整音箱的喚醒閾值,比如正常的閾值是0.9以上進行喚醒,那麼晚上可以根據應用場景,設置為0.8以上喚醒,具體還要看場景和模型的效果。
整個過程需要先定義喚醒詞,再根據實際場景選擇模型,收集數據,最後上線迭代。
隨著產品的用戶越來越多,訓練數據越來越大,整個喚醒模型進入一個正向循環,再考慮支持自定義喚醒詞的能力。
語音喚醒作為語音交互的前置步驟,主要負責判斷什麼時候切換為工作狀態,什麼時候保持休眠狀態,而這個判斷依據就是語音信息。
本文由 @我叫人人 原創發布於人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基於CC0協議