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