siemens x
人工智能

MATLAB 里的天籟之音——淺談 MATLAB 語音與聲學(xué)應(yīng)用(三)

2025China.cn   2020年12月10日

  上一期,我們圍繞智能語音助手的話題,與大家聊了聊聲源分離的兩種方法:基于麥克風(fēng)陣列波束成形的方法和基于深度學(xué)習(xí)的掩模估計的方法。本期,我們將繼續(xù)本文的最后一個話題,聊聊關(guān)于深度學(xué)習(xí)的語音識別。

  本文共分三期:
  1)音頻算法快速原型試音;
  2)聲源分離與提??;
  3)深度學(xué)習(xí)語音識別

Part 3

語音關(guān)鍵詞識別

  深度學(xué)習(xí)的語音識別,目前以家用智能音箱、語音導(dǎo)航等首當(dāng)其沖。

  語音操控,本來就是人與人溝通最便捷的方式,只是過去技術(shù)水平限制,被迫用按鍵、遙控器、觸摸屏,而今語音操控已自然而然成了新一代的人機接口。所有空調(diào)、電視、凈化器這所有家電,甚至各處的燈光,都可以方便的采用語音指令進(jìn)行控制,是不是很美好。

  很多小伙伴,可能一提到語音識別,第一反應(yīng)就是深度學(xué)習(xí)。確實會用到深度學(xué)習(xí)不假,然而,想設(shè)計好實際工程化實現(xiàn)的語音識別模型,需要考慮的遠(yuǎn)不只是深度學(xué)習(xí)本身。工程化實現(xiàn)與在科研探索,最大的區(qū)別在于,科研只是單點突破即可,比如可以是僅僅優(yōu)化某個損失函數(shù)改進(jìn)某個層的算法,就可以發(fā)表論文,算作成果了。而工程化實現(xiàn),其實是一個完整的鏈條,任何一個環(huán)節(jié)出問題,都無法得到滿足工程化實現(xiàn)要求的產(chǎn)品。

  如下圖所示,實際的工程化實現(xiàn),需要完成如下所示的從左到右四個階段。

深度學(xué)習(xí)開發(fā)基本流程

  首先要采集數(shù)據(jù),不僅需要獲得足夠大的高質(zhì)量樣本集,并且如果是有監(jiān)督的學(xué)習(xí),那你的標(biāo)注也需要足夠的精確;接下來就是預(yù)處理和特診提取,這個步驟對獲得輕量化的模型,適合進(jìn)行嵌入式低功耗、小型化設(shè)備進(jìn)行產(chǎn)品工程化實現(xiàn)至關(guān)重要;接下來是模型訓(xùn)練和開發(fā);最后還需要在嵌入式設(shè)備或者云端上,產(chǎn)品化實現(xiàn)我們的算法。

  而之前我們開發(fā)人員的大多數(shù)精力,是不是基本都只關(guān)注在第三個階段呢?我們模型的整體性能其實是由這個鏈條里四個階段,整體決定的,而非單一環(huán)節(jié)。

  這也就解釋了,為什么很多時候,若模型精度欠佳,如果希望只在第三個階段努力,即僅通過模型優(yōu)化和超參調(diào)解,通常很難得到有效改善的。反而可能使模型變得復(fù)雜,得到一個臃腫不適合產(chǎn)品化的模型。

  首先在音頻采集階段,就需要考慮到回聲消除、去混疊、降噪等一系列的預(yù)處理算法,而且在準(zhǔn)備數(shù)據(jù)時,還需要根據(jù)自己的實際需要和訓(xùn)練平臺的情況,來選擇合適算法對音頻數(shù)據(jù)進(jìn)行預(yù)處理,這里可能涉及采樣率變換、感興趣頻帶的提取,也可能涉及感興趣特征的提取。

  接下來,我們以語音指令識別為例【1】,介紹如何在 MATLAB 中,快速完成產(chǎn)品化的整個鏈條。

  我們的目標(biāo)是將識別以下的十個英文指令,將采用 Google 隨如下論文一同剛發(fā)表的語音指令數(shù)據(jù)集。

  首先,我們導(dǎo)入數(shù)據(jù)集,數(shù)據(jù)集通常會比較龐大,若同時加載很可能占用大量內(nèi)存使運算卡頓。MATLAB 提供了一系列的 datastore,對數(shù)據(jù)集進(jìn)行管理和操作,datastore 僅記錄數(shù)據(jù)集的索引和標(biāo)簽,而只在需要時,才會去加載對應(yīng)的樣本。

  如下所示,采用音頻專用的 audioDatastore,自動把樣本文件夾下的各個子文件夾中數(shù)據(jù)建立索引數(shù)據(jù)集,而后自動以每個子文件夾名字作為其中各樣本的標(biāo)簽。

  這里,其實 Google 提供了一個顯然由高手,精心加工的高水準(zhǔn)的音頻指令數(shù)據(jù)集。

  而你的實際工程中,通常采集到的原始數(shù)據(jù)還需要進(jìn)行一系列的預(yù)處理,如前面提到的去回聲、去混疊、降噪等一系列操作,通常還會有濾波、采樣率變換,然后才會得到這樣一個理想的數(shù)據(jù)集。這個部分恰恰是很多大牛都會重視去做,卻很少談及的。

  敲黑板~劃重點~高質(zhì)量的數(shù)據(jù)集,才能產(chǎn)生高質(zhì)量的模型呦。

  Notes:  大多數(shù)實際的工程應(yīng)用,都需要自己動手準(zhǔn)備這個至關(guān)重要的數(shù)據(jù)集,音頻樣本的采集的質(zhì)量與標(biāo)簽的質(zhì)量,同樣重要。這個過程是非常耗時費力的,往往需要人工一段一段的音頻反復(fù)聽,反復(fù)手工標(biāo)注。MATLAB 提供了對應(yīng)于音頻和信號領(lǐng)域的快捷標(biāo)注工具,Audio Labeler 和 Signal Labeler。請看以下操作視頻,可以看到您可以自動標(biāo)注,快捷準(zhǔn)確的完成這個過程。

  以上我們介紹了,導(dǎo)入了整個數(shù)據(jù)集和標(biāo)注。接下來,我們把數(shù)據(jù)集分成訓(xùn)練集、驗證集和測試集。

  接下來我們講選擇用哪種網(wǎng)絡(luò)進(jìn)行指令識別。如圖所示,是常見的兩種對時間序列進(jìn)行分類或者檢測的網(wǎng)絡(luò),上面一種是借助卷積神經(jīng)網(wǎng)絡(luò)對二維圖像的檢測能力,所不同的是需要先將音頻序列轉(zhuǎn)換成時頻圖。

  下面這種,采用的是 LSTM 長短周期記憶網(wǎng)絡(luò),雖然也可以直接把時間序列作為其輸入,但通常效果欠佳。所以我們一般會在每一個時間拍,提取一個特征向量,把它作為 LSTM 網(wǎng)絡(luò)的輸入。

  這里我們采用上面這種方法,即首先對信號進(jìn)行時頻變換,得到每個時間拍上的時頻圖作為特征,輸入進(jìn)后面的卷積神經(jīng)網(wǎng)絡(luò)。音頻中有許多可用的特征,這里過去我們需要自己手寫函數(shù),選擇提取哪些特征,這個過程經(jīng)常需要反復(fù)嘗試。目標(biāo)是用盡量少的特征,來達(dá)到可以接受的模型精度。恰到好處的特征選擇,可以使后序的神經(jīng)網(wǎng)絡(luò)模型搭建和調(diào)優(yōu),得以大大簡化,輕量級網(wǎng)絡(luò)即可達(dá)到驚艷的效果,并不是每個做得漂亮的項目,都需要在模型訓(xùn)練階段,死磕超參優(yōu)化的。

  Notes:特征的選擇,需要針對您的特定使用環(huán)境,巧妙選擇,比如識別人類語音,則需要了解人耳對于語音的選擇性,比如在幾百赫茲以下,成線性分布,這部分其實是語音的主要傳遞信號的部分。從幾百赫茲到 20K,成對數(shù)分布,而對其他頻點的聲音。而如果您要識別的是樂音,那么您最好花點時間了解十二平均律,以及對應(yīng)的有效特征,如恒 Q 變換等。

  這里MATLAB提供了一個專用的音頻特征提取工具,即 audioFeatureExtractor。他把音頻常見的特征都統(tǒng)一集成在一個模塊,你只要按需求,選擇即可使用。

  特征提取時,因為需要提取特征的樣本量很大,以滑動窗口逐幀計算特征,通常計算很耗時,這里我們采用了如下所示的并行計算方式進(jìn)行加速。

  MATLAB代碼,僅需要使用關(guān)鍵詞稍作修改,即可輕松擴展到多節(jié)點,并行執(zhí)行,使我們的算法執(zhí)行速度大幅提高。

  如果您想利用 GPU 加速,卻不想手寫 CUDA 代碼怎么辦?Parallel Computing Toolbox 也可以支持無縫的使用底層的 GPU 加速。您也可以方便的使用 gpuArray 對數(shù)組聲明,底層就會自動使用您的 GPU 進(jìn)行加速。

  上面代碼中,numPar 即本機可訪問的并行節(jié)點數(shù),若 numPar=16,則特征提取的計算將被自動在底層分配到這 16 個節(jié)點上并行完成,大幅提高計算速度。你的代碼只需把 for 循環(huán),換成 parfor 循環(huán)。不必再硬著頭皮去學(xué)習(xí)并行編程語言了,所有底層的 map-reduce、Hadoop 之類的繁文縟節(jié),MATLAB 都會為你自動搞定。

  接下來我們看一下,提取到的特征。

  上圖中上面一行是原音頻波形,16000 個采樣點,而下圖中是其對應(yīng)的時頻圖,可以看到橫軸和縱軸的點數(shù)明顯減少了,也就是特征提取起到了明顯壓縮數(shù)據(jù)量的作用。恰到好處的選擇特征,不僅會大大提高識別精度,而且可以使后面的卷積神經(jīng)網(wǎng)絡(luò)只需要一個輕量級的模型,即可達(dá)到很理想的精度。這對于產(chǎn)品化實現(xiàn)至關(guān)重要。

  準(zhǔn)備好了訓(xùn)練用的時頻圖數(shù)據(jù)集,我們就可以著手搭建神經(jīng)網(wǎng)絡(luò)了,我們不必記住指令敲代碼,而是可以直接使用如下的 Deep Network Designer 以拖拽模塊和連接的方式,快速完成。

  接下來,設(shè)置好訓(xùn)練參數(shù)后,我們開始對模型進(jìn)行訓(xùn)練。只要指定訓(xùn)練環(huán)境,他會自動在底層使用你所指定的多核 CPU 或者 GPU 進(jìn)行加速。

  訓(xùn)練完成后,我們可以對訓(xùn)練結(jié)果,進(jìn)行評估。得到如下的混淆矩陣。

  那么我們還可以在 MATLAB 中,直接訪問底層的麥克風(fēng),采集實時音頻流,來測試我們的模型識別精度,請看下面的視頻。

  上邊,我們實現(xiàn)的其實還只是一個算法原型,那么我們?nèi)绻朐谇度胧接布希瑢嶋H做一下硬件原型測試怎么辦?難道還需要把所有算法都手工用底層代碼敲出來嗎?

  顯然不必如此,您可以用 MATLAB Coder 很方便的把這一整套算法(包含預(yù)處理、特征提取和深度學(xué)習(xí)模型),一起打包生成嵌入式處理器如 ARM,可運行的高性能 C++ 代碼。在這個階段,仍然保持快速的硬件原型測試和調(diào)試迭代的優(yōu)勢。

  這個語音指令識別的案例,其對應(yīng)的嵌入式硬件實現(xiàn)的 demo,我們也一并在 Shipping Demo 中提供了,感興趣的童鞋可以找來試試看【2】。

簡單總結(jié)

  我們介紹了基于深度學(xué)習(xí)的語音識別在實際工程化實現(xiàn)時,需要完成如下所示的從左到右四個階段。而之前我們中大多數(shù)注意力,往往只關(guān)注第三個階段呢,然而實際上,我們模型的性能其實是由這個鏈條里四個階段,整體決定的,而非單一環(huán)節(jié)。

深度學(xué)習(xí)開發(fā)基本流程

  而 MATLAB 是面向工程化實現(xiàn)的平臺,完整覆蓋全部這四個階段的內(nèi)容。

  首先要采集數(shù)據(jù),不僅需要獲得足夠大的高質(zhì)量樣本集,并且也需要高質(zhì)量的標(biāo)簽,這部分 MATLAB 提供了一系列能夠快速自動完成標(biāo)注 APP;接下來就是預(yù)處理和特診提取,MATLAB 提供大量方便易用的信號處理和預(yù)處理的 APP,以及音頻信號特征提取器,可以方便的嘗試需要的預(yù)處理和特征提??;接下來是模型訓(xùn)練和開發(fā);最后還支持嵌入式設(shè)備或者云端上,自動生成代碼或者部署實現(xiàn)我們的算法。

(轉(zhuǎn)載)

標(biāo)簽:MathWorks 我要反饋 
2024世界人工智能大會專題
即刻點擊并下載ABB資料,好禮贏不停~
優(yōu)傲機器人下載中心
西克
2024全景工博會
專題報道
2024 工博會 | 直播探館 · 全景解讀
2024 工博會 | 直播探館 · 全景解讀

第二十四屆中國工博會于9月24日至28日在國家會展中心(上海)舉行,展會以“工業(yè)聚能 新質(zhì)領(lǐng)航”為全新主題。 [更多]

2024世界人工智能大會
2024世界人工智能大會

WAIC 2024將于7月在上海舉行,論壇時間7月4日-6日,展覽時間7月4日-7日。WAIC 2024將圍繞“以共商促... [更多]

2024漢諾威工業(yè)博覽會專題
2024漢諾威工業(yè)博覽會專題

2024 漢諾威工業(yè)博覽會將于4月22 - 26日在德國漢諾威展覽中心舉行。作為全球首屈一指的工業(yè)貿(mào)易展覽會,本屆展覽會... [更多]