劉梅 山東省淄博第一中學(xué)
語(yǔ)音交互指的是人與計(jì)算機(jī)設(shè)備通過(guò)語(yǔ)音進(jìn)行信息交流的過(guò)程,其中兩個(gè)關(guān)鍵過(guò)程包括STT(語(yǔ)音轉(zhuǎn)文字)即語(yǔ)音識(shí)別、TTS(文本轉(zhuǎn)語(yǔ)音)即語(yǔ)音合成。本項(xiàng)目帶領(lǐng)學(xué)生通過(guò)完整的模型訓(xùn)練流程實(shí)現(xiàn)對(duì)訓(xùn)練指令的語(yǔ)音識(shí)別,并結(jié)合Arduino板實(shí)現(xiàn)模型的本地部署,使語(yǔ)音小助手不僅具有交流對(duì)話(huà)的功能,更能根據(jù)訓(xùn)練好的指令完成一系列操作。
本項(xiàng)目的主題是“看見(jiàn)”你的聲音,那么如何使聲音能夠被“看見(jiàn)”呢?在本項(xiàng)目中主要體現(xiàn)在兩個(gè)方面:一是在數(shù)據(jù)集處理的過(guò)程中,通過(guò)將音頻信號(hào)轉(zhuǎn)換成波形圖與音譜圖,讓學(xué)生實(shí)現(xiàn)用看的方式直觀理解音頻信號(hào)在圖像維度上的波形特征,并通過(guò)將音頻信號(hào)轉(zhuǎn)成音譜圖,使學(xué)生可以利用處理圖像的CNN卷積神經(jīng)網(wǎng)絡(luò)去處理音頻方面的問(wèn)題,讓計(jì)算機(jī)實(shí)現(xiàn)用“看”的方式去處理“聽(tīng)”的問(wèn)題。二是在模型部署階段,除了可以使語(yǔ)音對(duì)話(huà)機(jī)器人實(shí)現(xiàn)聊天功能外,還能根據(jù)指令完成一系列可被看到的操作:開(kāi)關(guān)燈、開(kāi)關(guān)風(fēng)扇、開(kāi)關(guān)窗戶(hù)、查詢(xún)室內(nèi)溫濕度并反饋等。
天貓精靈、小愛(ài)音箱等設(shè)備都具備了對(duì)話(huà)交流、完成各種指令操作等功能,其核心原理就是語(yǔ)音交互。那么,語(yǔ)音交互是如何實(shí)現(xiàn)的呢?除了對(duì)話(huà)交流外還能設(shè)計(jì)哪些功能呢?本項(xiàng)目將對(duì)這些問(wèn)題進(jìn)行探索,并采集自己的指令音頻打造一個(gè)專(zhuān)屬私人語(yǔ)音小助手。
該項(xiàng)目分四部分,共5課時(shí):自主采集音頻指令數(shù)據(jù)(課前)、處理音頻數(shù)據(jù)為語(yǔ)譜圖(1課時(shí));模型訓(xùn)練(1課時(shí));模型轉(zhuǎn)換(1課時(shí));模型部署(2課時(shí))。
因采集音頻需要安靜的環(huán)境,該階段讓學(xué)生在課前完成。學(xué)生2人一組,先利用matplotlib、librosa庫(kù)對(duì)采集的音頻信號(hào)進(jìn)行預(yù)處理并批量轉(zhuǎn)成語(yǔ)譜圖;然后搭建CNN卷積神經(jīng)網(wǎng)絡(luò)模型,對(duì)處理好的音頻數(shù)據(jù)進(jìn)行模型訓(xùn)練;接著將訓(xùn)練出的模型封裝,生成onnx模型,實(shí)現(xiàn)本地調(diào)用;最后,利用Arduino板、溫濕度傳感器、LED小燈、風(fēng)扇傳感器等完成硬件部署,實(shí)現(xiàn)語(yǔ)音小助手的制作。
(1)音頻文件采集
學(xué)生根據(jù)自己的項(xiàng)目需求采集指令音頻。以本項(xiàng)目語(yǔ)音小助手為例,采集7種指令語(yǔ)句,每種指令150條,其中130條用作訓(xùn)練集,20條用于驗(yàn)證集。學(xué)生結(jié)合pyaudio庫(kù),運(yùn)行圖1所示的代碼進(jìn)行音頻錄制。錄制時(shí)只需要設(shè)置好聲道數(shù)、比特率、錄制時(shí)間等即可。
圖1
同時(shí),教師要提前配置好機(jī)房環(huán)境,為學(xué)生準(zhǔn)備好半成品模板代碼,鼓勵(lì)學(xué)生積累代碼范例并上傳至自己的學(xué)習(xí)平臺(tái)。例如,pyaudio調(diào)用麥克風(fēng)采集音頻文件、opencv采集圖像文件,學(xué)生將這些經(jīng)常用到的代碼,形成固定的代碼模塊,這樣在下一個(gè)項(xiàng)目中使用時(shí),只要根據(jù)項(xiàng)目主題更改邏輯語(yǔ)句或簡(jiǎn)單參數(shù)即可,進(jìn)而提高課堂效率。
(2)音頻文件預(yù)處理
任意選擇兩條不同的語(yǔ)句,利用matplotlib、librosa庫(kù)繪制波形圖與音譜圖,圖2為“小梅關(guān)燈”與“屋里好黑”的音頻圖與語(yǔ)譜圖,學(xué)生通過(guò)對(duì)比,可以直觀理解兩條語(yǔ)音指令在圖像維度上的特征差異。然后將錄制好的音頻文件批量生成音頻譜圖,為后續(xù)模型訓(xùn)練做好準(zhǔn)備。
圖2
利用語(yǔ)音頻譜圖進(jìn)行模型訓(xùn)練有如下優(yōu)勢(shì):①有利于本地機(jī)房環(huán)境下學(xué)生進(jìn)行模型訓(xùn)練,解決了機(jī)房環(huán)境下算力不足的問(wèn)題。②用處理圖像的神經(jīng)網(wǎng)絡(luò)模型解決音頻問(wèn)題,大大提高了所生成模型對(duì)音頻文件識(shí)別的準(zhǔn)確率。本項(xiàng)目基于pytorch搭建CNN卷積神經(jīng)網(wǎng)絡(luò),模型預(yù)測(cè)階段識(shí)別準(zhǔn)確率在98%左右。
(3)批量生成語(yǔ)譜圖
利用librosa庫(kù),將音頻信息批量轉(zhuǎn)化為語(yǔ)譜圖,核心代碼如下頁(yè)圖3所示。
圖3
CNN卷積網(wǎng)絡(luò)在計(jì)算機(jī)視覺(jué)領(lǐng)域發(fā)揮了重要的作用,筆者借助某平臺(tái)搭建了卷積神經(jīng)網(wǎng)絡(luò),對(duì)生成的語(yǔ)音譜圖進(jìn)行模型訓(xùn)練,核心代碼如下頁(yè)圖4所示。
圖4
onnx模型是一種廣泛使用的模型轉(zhuǎn)換文件格式,將訓(xùn)練好的模型文件導(dǎo)出并轉(zhuǎn)換為onnx模型,這樣便可以結(jié)合智能硬件,在本地對(duì)訓(xùn)練出的模型進(jìn)行部署。
在模型部署環(huán)節(jié),教師帶領(lǐng)學(xué)生實(shí)現(xiàn)兩大功能:一是能“聽(tīng)”會(huì)“說(shuō)”,即傳統(tǒng)意義上的語(yǔ)音交互功能,通過(guò)在代碼中接入圖靈機(jī)器人平臺(tái)API,實(shí)現(xiàn)與小助手對(duì)話(huà)交流;二是能“聽(tīng)”會(huì)“做”,即利用Arduino,結(jié)合LED小燈、風(fēng)扇模塊、舵機(jī)、溫濕度傳感器等智能硬件,讓小助手根據(jù)語(yǔ)音指令完成包括開(kāi)關(guān)燈在內(nèi)的一系列操作。
環(huán)節(jié)一:能“聽(tīng)”會(huì)“說(shuō)”
在這一環(huán)節(jié),教師使用識(shí)別出的指令,關(guān)聯(lián)圖靈平臺(tái)API,與圖靈機(jī)器人進(jìn)行對(duì)話(huà),并將返回的文字對(duì)話(huà)結(jié)果利用pyttsx3模塊轉(zhuǎn)換成語(yǔ)音進(jìn)行播報(bào),實(shí)現(xiàn)與小助手對(duì)話(huà)的功能。學(xué)生兩人一組在圖靈機(jī)器人平臺(tái)注冊(cè)賬號(hào),創(chuàng)建一個(gè)自己的聊天機(jī)器人,記錄下Apikey,這樣便可以在項(xiàng)目中實(shí)現(xiàn)與小機(jī)器人的對(duì)話(huà)了。接著,利用訓(xùn)練好的語(yǔ)句進(jìn)行測(cè)試,如“你的名字是什么”,機(jī)器人反饋結(jié)果“我就是人見(jiàn)人愛(ài)花見(jiàn)花開(kāi)的劉小梅呀”。但圖靈平臺(tái)返回的是文字內(nèi)容,還需要利用pyttsx3模塊,將返回得到的結(jié)果轉(zhuǎn)化為語(yǔ)音形式,這一過(guò)程又叫做語(yǔ)音合成。核心代碼如圖5所示。
圖5
環(huán)節(jié)二:能“聽(tīng)”會(huì)“做”
作品只能進(jìn)行對(duì)話(huà)交流顯然是不夠的,“小梅同學(xué)”還要具備其他功能,完成更多的任務(wù),如“‘屋里好黑呀’:LED燈亮起”“‘小梅關(guān)燈’:LED燈關(guān)閉”“‘天氣真熱’:風(fēng)扇轉(zhuǎn)動(dòng)”等。以“小梅查詢(xún)溫濕度”為例,核心代碼如圖6所示,作品如圖7所示。
圖6
圖7