CUI三部曲之語音識別——機器如何聽懂你的話?
在智能時代,以對話為主要交互形式的CUI會應用到越來越多的場景中。進行對話交互時,機器往往需要完成「聽懂——理解——回答」的閉環。這個閉環涉及到三類技術:語音識別(ASR)、自然語言處理(NLP)以及語音合成(TTS)。
語音識別的任務是將用戶所說的話從聲音形式轉變為文字形式,自然語言處理則是理解這些文字所要表達的意思(語義)。理解了用戶的意圖之後,機器同樣會以語音的形式給出相應的回答,這就需要用到語音合成。
(ASR、NLP、TTS構成的閉環)
語音識別、自然語言理解與語音合成三者環環相扣,任何一環的失誤都無法使產品獲得良好的交互體驗。而語音識別正是這一切的基礎:識別成文字都出了問題,語義理解得再好也不可能正確到哪裡去。
語音識別原理
語音識別已有數十年的發展歷史,大體來看可以分為「傳統」的識別方法和基於深度神經網路的「端到端」方法。無論哪種方法,都會遵循「輸入——編碼——解碼——輸出」的流程。
(語音識別流程)
語音識別的輸入是聲音,屬於計算機無法直接處理的模擬信號,所以需要通過編碼將其轉變為數字信號,並提取其中的特徵進行處理。編碼時,一般會將聲音信號按照很短的時間間隔(ms級別)切成一個個小段,稱為幀;幀與幀之間會有一定的重疊。
對於得到的每一幀,可以通過某種規則(如依照人耳聽聲特點提出的MFCC規則),提取信號中的特徵,將其變成一個多維向量。向量中的每一個維度可以看作描述了這幀信號中的一項特徵。
(編碼過程)
解碼則是將編碼得到的向量變成文字的過程,其中需要用到兩個模型:聲學模型和語言模型。聲學模型通過處理編碼得到的向量,將相鄰的幀組合起來變成音素(如拼音中的聲母韻母等),再組合起來變成單個的單詞或漢字;語言模型則用來調整聲學模型所得到的不合邏輯的字詞,使識別結果變得正確通順。聲學模型和語言模型都需要用大量的語音和語言數據來訓練。
(解碼過程)
無論是編碼過程中的特徵提取規則,還是解碼過程中的聲學模型與語言模型,都有很多不同的種類。而「傳統」識別方式與「端到端」識別方式的主要差異就體現在聲學模型上。「傳統」方式的聲學模型一般採用隱馬爾可夫模型(HMM),而「端到端」方式一般採用深度神經網路(DNN)。
對於「端到端」的識別方式,聲學模型的輸入通常可以使用更原始的信號特徵(減少了編碼階段的工作),輸出也不再必須經過音素等底層元素,可以直接是字母或者漢字。在計算資源與模型的訓練數據充足的情況下,「端到端」方式往往能達到更好的效果。
語音識別的效果一般用「識別率」,即識別文字與標準文字相匹配的字數與標準文字總字數的比例來衡量。目前中文通用語音連續識別的識別率最高可以達到97%,已經能夠應用到一些場景當中,但距離99%以上的「完美」效果還有很長的路要走。
從工具到交互
語音識別比較傳統的應用是用作對語音信息的轉錄,或是在某些特定場景下作為向機器發送指令的方式,如通話質檢、語音命令、語音輸入法等。由於當時語音識別和自然語言處理技術水平的限制,這項技術的應用一直停留在單純的工具層面。
近年來語音識別技術的研究取得突破,並有科大訊飛、雲之聲等企業將其產品化,使它的應用門檻明顯降低。因此,作為人類最自然的交流方式與CUI的核心技術,語音識別的應用也正逐漸從工具層面向人機交互拓展。
然而,通過GUI和視覺傳遞信息是二維的,通過語音和聽覺則是一維的,所以在大多數場景下語音的信息傳遞效率明顯低於屏幕顯示。而且,即便是CUI,有時也可以沒有語音而通過文字來對話。所以問題來了,在什麼樣的場景下,語音交互是有明顯需求的?
(現在知道為什麼可怕了吧)
單純通過GUI進行交互時,必須用手進行輸入,用眼睛獲取輸出信息。所以在手的操作受到限制或者眼睛不方便一直注視屏幕時,僅僅通過GUI就很不方便;這就為使用語音進行交互創造了機會。
「手不方便」最典型的例子是智能家居,比如亞馬遜的Echo:當你在沙發上葛優癱的時候,是絕對不想起身去用手操作哪怕兩米開外的設備的。「眼不方便」最典型的例子是智能車載:開車的時候如果總是盯著屏幕操作,即便是老司機也難免會翻車。
正因如此,智能家居與智能車載也成為了目前語音識別技術最受青睞的應用領域。幾乎所有開展語音識別業務公司都將這兩個領域作為重點戰場。
當然,合適的場景肯定不止這兩個,但總體而言都需要符合一個大的原則:不要在GUI本來就適合的場景下硬碰硬,而要尋找原有交互方式所不能完美滿足的場景去替代,提升用戶體驗,從而形成突破。
交互場景的難點
當一項技術作為面向特定場景的工具時,面對的往往是相對專業的用戶。哪怕此時的技術水平存在局限,用戶也會儘可能地規避掉那些技術無法實現的情況。這時在用戶心裡,是存在著一種「正確打開方式」的。
但如果這項技術應用在了通用場景下的人機交互中,必然會面對形形色色的用戶。他們心裡根本不會將它當作是一項技術成果,而是和鍋碗瓢盆冰箱彩電一樣,想怎麼用就怎麼用,只要不爽,立馬走掉。
(用戶使用產品的方式)
這時,應用了這項技術的產品會碰到很多新的情況,對技術本身也必然會有更高更全面的要求,語音識別也不例外。智能家居與智能車載等適合語音交互的場景往往有這樣兩個特點:人與設備的距離相對較遠、說話的環境相對嘈雜;所以就出現了下面一些技術難點。
(1)語音激活檢測(VAD)
VAD指設備判斷外界什麼時候存在「有效語音」,什麼時候不存在。當判斷外界存在有效的語音時,機器才會對其進行後續的識別操作。
好比我們周圍的環境中一直有各種聲音,但絕大部分我們都會進行「屏蔽」,這樣才能保證我們能夠專心做自己的事情或者好好休息。對於機器來說也是一樣,通過VAD把「無效」的聲音信號(如風吹草動、寵物叫聲、電視聲音等)屏蔽掉,可以降低信號處理的計算量,也能減少雜訊引起的誤識別。
在近場識別(人與設備距離較近)中,VAD可有可無:比如可以通過設備上的一個按鈕來控制它是否接受信號。即便需要,由於近場情況下信噪比(信號和雜訊的比例)較高,簡單的VAD演算法也可以做到有效可靠。
但對於遠場識別,用戶無法方便地觸摸設備,所以VAD必不可少;且由於環境干擾,信噪比較低,對VAD演算法的複雜程度也要求更高,成為了一個具有挑戰性的問題。
(2)語音喚醒(VT)
VT指設備通過識別「有效語音」中是否存在某個關鍵詞(喚醒詞),來判斷用戶接下來是否要對自己發出指令,以及自己是否需要進行響應。
好比我們在周圍的環境中發現了可能和自己相關的聲音(比如旁邊人的談話),就會去留意聲音的內容是否和自己真的相關:如果別人的談話中出現了自己的名字(喚醒詞),那麼很可能就需要自己去參與這次談話了(響應)。
目前各家以對話為交互形式的產品都有自己的喚醒詞,比如Google的「OK Google」、亞馬遜Echo的「Alexa」等。
與VAD一樣,VT在遠場識別中必不可少,且對用戶體驗影響很大。如果喚醒詞很長,用戶喚醒設備就很麻煩,且容易被漏識別,很可能說了一串話,設備還是沒有睬你;如果喚醒詞很短,則容易出現誤識別,也許用戶什麼都沒說,設備自己開始說話了。
這個窘境也使得VT成為了語音識別中的又一個難點。為產品選擇一個盡量短又朗朗上口的喚醒詞,同時做到很低的誤識率,也成為了各家公司技術實力的體現。
(3)語音打斷
語音打斷指在設備說話時,用戶可以直接通過語音進行打斷,而不需要通過用手按下停止鍵或是強行等設備把話說完。
在與用戶交互的過程中,設備很可能出現錯誤理解用戶意圖的情況,而且很多回答聽到一半就能大致明白它的意思。這時就可以通過語音,在發出新指令的同時打斷設備正在說的話,不僅提高了效率,也更符合人類自身的交流方式。
顯然,在設備自己說話的時候識別用戶的語音會受到很大的干擾,如何從中分辨出用戶的語音信號進行識別也對演算法有較高的要求。
(4)低信噪比
在遠場識別中,語音信號從用戶傳遞到設備處的衰減非常明顯;且對於某些場景(如駕駛汽車),環境噪音本來就比較大,這些都會使得語音信號的信噪比變低。
對於低信噪比語音信號的識別,單個麥克風已經不能勝任,需要多個麥克風按照一定規則排列組成的麥克風陣列,同時配合相應的演算法。自行設計或選擇一款合適的麥克風陣列已經逐漸成為語音交互產品的成功關鍵之一。
總結
在基於CUI的交互中,機器往往需要完成「聽懂——理解——回答」的閉環,涉及到語音識別、自然語言理解與語音合成三類技術。其中,語音識別是機器完成這個閉環,為用戶提供良好交互體驗的基礎。
語音識別有很多技術路線,大體可以分為「傳統」的識別方式與「端到端」方式。不同的技術路線都遵循「輸入——編碼——解碼——輸出」的流程,只不過編碼所用的規則與解碼所用的模型有所區別。
隨著技術的發展,語音識別的應用已經逐漸從單純的工具層面拓展到人機交互。但語音傳遞信息的效率低於GUI,所以需要尋找不適合通過GUI進行交互的場景來突破,如智能家居與智能車載。
語音識別應用於人機交互必定會遇到各種複雜和奇葩的場景,從而遇到技術上的難點。目前這些難點主要由遠場識別和環境嘈雜而引起,包括語音激活檢測、語音喚醒、語音打斷以及低信噪比情況下的識別。
最後,用一張圖總結語音識別用於人機交互中的幾個難點。
歡迎關注微信公眾號「AI從入門到xx」,用一看就懂的語言分享AI知識與見解。
推薦閱讀:
※愛因斯坦的性格分析 |原子彈之父原來是這樣的人
※文字閱讀會不會成為逐漸過時的信息獲得方式?
※7200元的胃鏡誰會做?談消費升級時請別忘了醫療產業
※雷軍會編程嗎?