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